2012-02-27 64 views
0

我的WordPress主题中有一个播放列表脚本,它将来自媒体库中文件的URL放入播放列表脚本中,播放列表脚本可以被音频播放器读取。使用PHP创建动态播放列表

<script type="text/javascript"> 
var myPlaylist = [ 
<?php 
foreach ($audiofiles as $file) 
{ 
    echo "{ 
     mp3:'".$file->guid."', 
     title:'".$file->post_title."', 
     artist:'"."', 
     rating:5, 
     buy:'".$file->post_excerpt."', 
     price:'"."', 
     duration:'"."', 
     cover:'"."' 
    }," 
; } 
?> 
]; 
</script> 

我的问题是,我需要弄清楚如何改变的最后一个项目的PHP脚本的输出,所以没有逗号后的“}”。我被告知这是一个AJAX问题,但我不确定从哪里开始。

回答

0

当传递对象从PHP到JS,最安全,最简单的方法是使用json_encode。这样,如果$file->post_title包含'或其他任何会破坏它的字符,您就不必担心会中断JS语法。

<?php 
$playlist = array(); 
foreach ($audiofiles as $file) 
{ 
    $playlist[] = array(
     'mp3'=>$file->guid, 
     'title'=>$file->post_title, 
     'artist'=>'', 
     'rating'=>5, 
     'buy'=>$file->post_excerpt, 
     'price'=>'', 
     'duration'=>'', 
     'cover'=>'' 
    ); 
    } 
?> 

<script type="text/javascript"> 
    var myPlaylist = <?= json_encode($playlist) ?>; 
</script> 
+0

你是一个糟糕的** ** mofo!谢谢你。不知道json_enconde。超酷 :)。音乐播放器现在完美工作! – marctain 2012-02-27 22:58:03

0

请尝试以下之一:

<?php 
$playlist = array(); 
foreach ($audiofiles as $file) 
{ 
    $playlist[] = "{ 
     mp3:'".$file->guid."', 
     title:'".$file->post_title."', 
     artist:'"."', 
     rating:5, 
     buy:'".$file->post_excerpt."', 
     price:'"."', 
     duration:'"."', 
     cover:'"."' 
    }"; 
} 
?> 
<script type="text/javascript"> 
var myPlaylist = [ 
<?php echo implode(',' $playlist);?> 
]; 
</script> 
0

假设$audiofiles是关联数组,你有没有试过这样:

<?php 
$totalFiles = count($audiofiless); 
$i = 0; 
foreach ($audiofiles as $file) 
{ 
    echo "{ 
     mp3:'".$file->guid."', 
     title:'".$file->post_title."', 
     artist:'"."', 
     rating:5, 
     buy:'".$file->post_excerpt."', 
     price:'"."', 
     duration:'"."', 
     cover:'"."' 
    }" . (++$i < $totalFiles ? ',' : ''); 
; } 
?> 

但是,如果它不是一个关联,然后它甚至simplier,因为你不必增加任何东西,你可以使用普通for周期...

0

你可以在foreach更改为并做这样的事情:

<script type="text/javascript"> 
var myPlaylist = [ 
<?php 
for ($i=0; $i<=$audiofile.length; $i++) 
{ 
    $file = $audiofile[$i]; 
    echo "{ 
     mp3:'".$file->guid."', 
     title:'".$file->post_title."', 
     artist:'"."', 
     rating:5, 
     buy:'".$file->post_excerpt."', 
     price:'"."', 
     duration:'"."', 
     cover:'"."' 
    }" 
    if ($i<$audiofile.length) 
    { 
     echo "," 
    } 
; } 
?> 
]; 
</script>