Расшифровать JSON в Smarty

У меня есть 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, если это как-то связано с решением этой проблемы.

0

Решение

Метод, который я упомянул, действительно работает.

Если в 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 — так же, как я уже сказал

Результат по-прежнему, как и ожидалось — без ошибок и предупреждений

2

Другие решения

Я получил это, сделав следующее в моем 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}
-1

По вопросам рекламы [email protected]