Я получаю json от api, как печатать json, используя Smarty.
Формат Json
[ { "first_name": "jinu", "last_name": "mk", "loginid": "jinu@amt.in", "timezone": "5.5", "team_id": "c964ef415f157ddd99173f5b481ee1e3", "user_type": 1, "last_login_date": null }, { "first_name": "avatar second", "last_name": "test", "loginid": "avatar2@gmail.com", "timezone": "5.5", "team_id": "ec40f5feda8643135bc20be44f897b03", "user_type": "3", "last_login_date": null }, { "first_name": "avatar testing admin", "last_name": "amt 1", "loginid": "avatar@amt.in", "timezone": "5.5", "team_id": "ec40f5feda8643135bc20be44f897b03", "user_type": 1, "last_login_date": null } ]
Я устал от следующего foreach, но ничего не печатал.
{foreach from=$games item=foo} <li>{$foo.first_name}</li> {/foreach}
Пожалуйста, помогите мне решить эту проблему. благодаря
У вас есть 2 возможных решения.
Первое решение
в PHP вы используете:
$data = '[ { "first_name": "jinu", "last_name": "mk", "loginid": "jinu@amt.in", "timezone": "5.5", "team_id": "c964ef415f157ddd99173f5b481ee1e3", "user_type": 1, "last_login_date": null }, { "first_name": "avatar second", "last_name": "test", "loginid": "avatar2@gmail.com", "timezone": "5.5", "team_id": "ec40f5feda8643135bc20be44f897b03", "user_type": "3", "last_login_date": null }, { "first_name": "avatar testing admin", "last_name": "amt 1", "loginid": "avatar@amt.in", "timezone": "5.5", "team_id": "ec40f5feda8643135bc20be44f897b03", "user_type": 1, "last_login_date": null } ]'; $smarty->assign('games',$data);
В Smarty вы используете:
{foreach from=$games|json_decode item=foo} <li>{$foo->first_name}</li> {/foreach}
Однако я не уверен в этом случае, если json_decode
запускается в $games
только один раз или при каждом вызове.
Второе решение
В PHP вы используете:
$data = '[ { "first_name": "jinu", "last_name": "mk", "loginid": "jinu@amt.in", "timezone": "5.5", "team_id": "c964ef415f157ddd99173f5b481ee1e3", "user_type": 1, "last_login_date": null }, { "first_name": "avatar second", "last_name": "test", "loginid": "avatar2@gmail.com", "timezone": "5.5", "team_id": "ec40f5feda8643135bc20be44f897b03", "user_type": "3", "last_login_date": null }, { "first_name": "avatar testing admin", "last_name": "amt 1", "loginid": "avatar@amt.in", "timezone": "5.5", "team_id": "ec40f5feda8643135bc20be44f897b03", "user_type": 1, "last_login_date": null } ]'; $smarty->assign('games',json_decode($data));
В файле Smarty:
{foreach from=$games item=foo} <li>{$foo->first_name}</li> {/foreach}
Я всегда рекомендую использовать второй метод, потому что, если это возможно в Smarty, вы должны избегать любых вычислений и просто отображать данные.
Попробуйте следующее:
{foreach from=$games item=foo} {assign var=bar value=$foo|json_decode:1} <li>{$bar.first_name}</li> {/foreach}
Прежде всего, вам нужно преобразовать его в массив, тогда вам будет намного проще выполнить цикл и распечатать его
Скажем, вы получаете свой json в переменной с именем $ response
// Convert to array {$response|json_decode}
Теперь вы получите массив, и вы можете пропустить массив, используя {foreach}
После преобразования в массив вам будет проще выполнять цикл как foreach для массива, а не для json-вывода