Как вытащить определенный контент из XML (при загрузке страницы)? - PullRequest
1 голос
/ 01 апреля 2019

Я работаю над кодом html / js , как показано ниже, принадлежащим следующему url , в котором все содержимое в черном извлекается из xml

<div class="container-wrap background--gray-light-2 cf">
    <div class="section container container--mid container--margbot background--white entry-content cf">
        <script src="https://content.jwplatform.com/libraries/FZ8yNTef.js"></script>
        <center>
            <div id="podcast" align="center"></div>
        </center>
        <script>
            var PodcastplayerInstance = jwplayer("podcast");
            PodcastplayerInstance.setup({
                playlist: "//www.cpac.ca/tip-podcast/jwplayer.xml",
                androidhls: true,
                preload: "auto",
                height: 200,
                width: 400,
                visualplaylist: false,
                stretching: "fill",
                "plugins": {
                    "http://www.cpac.ca/tip-podcast/listy.js": {},
                    'viral-2': {'oncomplete': 'False', 'onpause': 'False', 'functions': 'All'}
                }
            });
        </script>
    </div><!-- .entry-content -->
</div><!-- .container-wrap -->

Постановка проблемы:

Мне интересно, какой код php / javascript мне нужно добавить выше, чтобы он получал только 3 апреля 2019 или 1 апреля 2019 или только один контент (как показано ниже) НА СТРАНИЦЕ ЗАГРУЗКИ из прямоугольного прямоугольника отсюда http://www.cpac.ca/en/episode/

enter image description here

В этот момент 5 содержимого (в черном прямоугольнике) извлекается из xml.

Использовал следующую логику для извлечения определенного содержимого из xml:

 $context  = stream_context_create(array('http' => array('header' => 'Accept: application/xml')));
 $url = 'http://www.cpac.ca/tip-podcast/jwplayer.xml';

 $xml = file_get_contents($url, false, $context);
 $xml = simplexml_load_string($xml);
 $itemarray = $xml->xpath("/rss/channel/item[1]");

Мне интересно, как я могу интегрировать его с приведенным выше кодом html / js.Значение (1, 2, 3, 4, 5) массива элементов может быть случайным в зависимости от требования.

1 Ответ

2 голосов
/ 09 апреля 2019

JavaScript Solution

Вы можете использовать JW PLayer API списка воспроизведения , где вы будете использовать jwplayer().getPlaylistItem() для извлечения только определенного элемента в списке воспроизведения. И в вашем случае jwplayer() равен PodcastplayerInstance, и обратите внимание, что индекс основан на 0. Таким образом, вы можете добавить это после , когда вы звоните PodcastplayerInstance.setup():

var item = PodcastplayerInstance.getPlaylistItem(0);
console.log( item.title, item.description, item ); // for debugging/testing purposes

И вы можете использовать jQuery (который - на момент написания - используется на странице ), чтобы обновить «вертикальный прямоугольник», который (на основе текущей разметки), находится внутри div#podcast_listy_pl_panel :

var $item = jQuery( '#podcast_listy_pl_panel .listy-item' );
$item.find( '.listy-title' ).html( item.title + ' <span class="listy-duration"></span>' );
$item.find( '.listy-description' ).html( item.description );

Чтобы получить второй, третий и т. Д. Элемент, просто измените индекс:

var item = PodcastplayerInstance.getPlaylistItem(1); // get the second item; index = 1

PHP Solution

У вас уже есть код, который извлекает содержимое удаленного XML-файла , так что вы можете просто добавить его прямо ниже, где определен $itemarray (т. Е. после в следующем строка: $itemarray = $xml->xpath("/rss/channel/item[1]");):

$item = $itemarray ? (array) $itemarray[0] : null;
if ( $item ) :
?>
<div class="listy-textwrapper">
    <span class="listy-title">
        <?php echo $item['title']; ?>
        <span class="listy-duration"></span>
    </span>
    <span class="listy-description">
        <?php echo $item['description']; ?>
    </span>
</div>
<?php
endif; // end $item

И чтобы получить второй предмет, просто используйте item[2] примерно так:

$itemarray = $xml->xpath("/rss/channel/item[2]"); // get the second item; index = 2, not 1

Но $item здесь всегда указывает на $itemarray[0]:

$item = $itemarray ? (array) $itemarray[0] : null;
...