Создание динамического плейлиста с использованием PHP - PullRequest
0 голосов
/ 28 февраля 2012

У меня есть сценарий списка воспроизведения в моей теме WordPress, который помещает URL из файла в галерее мультимедиа в сценарий списка воспроизведения, который может быть прочитан аудиопроигрывателем.

<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-скрипта на элемент LAST, чтобы после «} не было запятой.Мне сказали, что это проблема AJAX, но я не уверен, с чего начать.

Ответы [ 4 ]

0 голосов
/ 28 февраля 2012

Вы можете изменить foreach на for и сделать что-то вроде этого:

<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>
0 голосов
/ 28 февраля 2012

При передаче объектов из PHP в JS самый безопасный и простой способ - использовать json_encode.Таким образом, вам не придется беспокоиться о нарушении синтаксиса JS в случае, если $file->post_title содержит ' или любой другой символ, который нарушит его.

<?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 голосов
/ 28 февраля 2012

Предполагая, что $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 ? ',' : '');
; }
?>

Однако, если это не ассоциативно, тогда это даже проще, так как вам не нужно ничего увеличивать, и вы можете использоватьобычный for цикл ...

0 голосов
/ 28 февраля 2012

Попробуйте следующее:

<?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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...