У меня есть URL, который я определяю в моем контроллере следующим образом:
$musicList = "http://website.com/search?q=$artist&results=30";
Это создаст файл json с 30 результатами от художника. В моем файле шаблона я хочу декодировать этот json и отображать из него значения twi. JSON выглядит так:
[
{
artist: "Rihanna",
title: "Rihanna - Diamonds",
trid: "ID"},
{
artist: "Rihanna",
title: "S&M",
trid: "ID"},
Но я не могу понять, как распечатать их в файле шаблона, следующий код ничего не дает:
{foreach from=$musicList item=entry}
{assign var=song value=$entry|json_decode:1}
<pre>
{$song|@print_r}
</pre>
{/foreach}
Я использую smarty в PHPFox, если это как-то связано с решением этой проблемы.
Метод, который я упомянул, действительно работает.
Если в php файле у вас есть:
$data = array(
array(
'artist' => "Rihanna",
'title' => "Rihanna - Diamonds",
'trid' => "ID"),
array(
'artist' => "Rihanna",
'title' => "S&M",
'trid' => "ID"),
);$x = json_encode($data);
$smarty->assign('musicList', $x);
и в Smarty у вас есть:
{foreach from=$musicList|json_decode item=song}
<pre>
{$song->artist} {$song->title} {$song->trid}
</pre>
{/foreach}
Вы получите желаемый результат:
Rihanna Rihanna - Diamonds ID
Rihanna S&M ID
Конечно, вы должны быть уверены, что у вас есть действительные данные Json (я думаю, код, который вы вставили, является фрагментом Json)
РЕДАКТИРОВАТЬ — код с реальными данными
В файле PHP:
$smarty->assign('musicList', file_get_contents('http://f.cl.ly/items/1C1P2v1U1i1a3i181a0T/search.json'));
В файле Smarty — так же, как я уже сказал
Результат по-прежнему, как и ожидалось — без ошибок и предупреждений
Я получил это, сделав следующее в моем PHP-файле:
$url = file_get_contents("http://labs.echonest.com/Uploader/search?q=$artist&results=30");
$json = json_decode($url, true);
$trackname = array();
$url = array();
$i = 0;
if($artist) {
foreach ($json as $track) {
$trackname = $track['title'];
$url = $track['trid'];
$artists[] = $track['artist'];
$tester[] = "<a href='$url'>$trackname</a>";
$i++;
}
} else {
echo Phpfox::getPhrase('lastfm.not_connected');
}
Затем я назначил его своему шаблону:
'songs' => $tester,
И назвал это так:
{foreach from=$songs item=song}{$song}<br/>{/foreach}