我有一个我在控制器中定义的网址:
$musicList = "http://website.com/search?q=$artist&results=30";
这将创建一个包含艺术家30个结果的json文件。在我的模板文件中,我想解码这个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}
我在PHPFox中使用smarty,如果这与解决这个问题有关。
答案 0 :(得分:2)
我提到的方法确实有效。
如果在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文件中 - 与我已经说过的相同
结果仍然如预期 - 没有错误或警告
答案 1 :(得分:-1)
我通过在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}