2009-11-04 5 views
1

RSS 피드를 그림 소스로 사용하는 웹 사이트에 제 3 자 AJAX 슬라이드 쇼를 사용하고 있습니다. 사진 순서를 무작위로 지정하고 싶지만 슬라이드 쇼 (또는 내가 가져 오는 RSS 피드)의 기능이 아닙니다.PHP에서 외부 RSS 피드 순서를 임의로 지정합니다.

PHP에서 외부 RSS 피드를 사용하고 항목을 무작위로 추출하고 동일한 피드를 '순서가 맞지 않는'것으로 다시 게시하는 짧은 함수를 작성하는 것이 분명 어렵습니다. 나는 그저 효과가없는 것처럼 보일뿐입니다.

답변

2

DOM XML을 사용하고 있습니까? 그런 다음 가져올 때 배열을 임의로 섞습니다.

$dom = new DOMDocument; 
$dom->load($url); 

// Load the <channel> element for this particular feed 
$channel = $dom->documentElement->firstChild; 

$items = $channel->getElementsByTagName('item'); 

// duplicate $items as $allitems, since you can't remove child nodes 
// as you iterate over a DOMNodeList 
$allitems = array(); 
foreach ($items as $item) { 
    $allitems[] = $item; 
    } 

// Remove, shuffle, append 
foreach ($allitems as $item) { 
    $channel->removeChild($item); 
} 

shuffle($allitems); 

foreach ($allitems as $item) { 
    $channel->appendChild($item); 
    } 

print $dom->saveXML(); 

} 여기

+0

그런데 데이터베이스에서 데이터를 가져 오는 것과 달리 XML (XML)을 구문 분석하는 것은 집중적입니다. – Radek

+0

getElementsByTagName()은 배열이 아닌 객체를 반환하며 셔플 링 될 수 없습니다. –

+0

당신이 맞아요, 그래서 약간의 업데이 트가 먼저 노드에서 배열()에 데이터를 저장 후 셔플 :) – Radek

0

. 두 가지 첫 번째 답변은 내 경우에 어떤 이유로 작동하지 않았습니다. 이것은 두 번째 것과 매우 비슷합니다.

<?php 
header("Content-Type: text/xml"); 

if (isset($_GET["rss"])) { 
    $url = $_GET["rss"]; 
    randomizeAndDumpRss($url); 
} 

function randomizeAndDumpRss($url) { 
    $dom = new DOMDocument; 
    $dom->load($url); 
    $channel = $dom->getElementsByTagName('channel')[0]; 
    $items = $channel->getElementsByTagName('item'); 

    $allitems = array(); 
    foreach ($items as $item) { 
     $allitems[] = $item; 
    } 

    foreach ($allitems as $item) { 
     $channel->removeChild($item); 
    } 

    shuffle($allitems); 

    foreach ($allitems as $item) { 
     $channel->appendChild($item); 
    } 

    print $dom->saveXML(); 
} 
?> 

이 PHP를 ?rss=rss_url_to_randomize과 함께 사용하기 만하면됩니다.

+0

이것은 좋은 팁입니다. 나는 이런 종류의 기능을 사용할 몇몇 애플 리케이션에서 일하고 있었고, 여기에 와서 분명히 내 일을 훨씬 쉽게 할 것이다. –

+0

조금 복잡해 보이지만, "place shuffle"을 찾을 수 없어서 솔루션을 사용하려고합니다. 저에게 도움이 된 – MartinM

-1
> <?php 
$random = rand(); 
$url = "http://www.gaafilaa.com/index.php/shop/feed/?orderby=rand" . "&v=$random"; 
$rss = simplexml_load_file($url); 
if($rss) 
{ 
    $items = $rss->channel->item; 
    foreach($items as $item) 
    { 
    $title = $item->title; 
    $link = $item->link; 
    $image = $item->product->image; 
    echo '<a href="'.$link.'" target="_blank">'.$title.'</a></br>'; 
    echo '<a href="'.$link.'" target="_blank"><img src="'.$image.'" style="width:100%;"/img></a></br>'; 
    echo '............................................</br>'; 
    } 
} 
?> 
+0

고맙습니다. – Ariph

0

이 나를 위해 일한 무엇의 전체 예이다 : 일을 무엇

$xml = new DOMDocument(); 
$articles = $xml->getElementsByTagName("article"); 
$data = array(); 
foreach ($articles as $article) { 
    data[] = ... 
} 
shuffle($data);