Frage

Ich bin ein Drittanbieter AJAX Diashow für eine Website verwenden, die einen RSS-Feed als Bildquelle nimmt. Ich möchte die Reihenfolge der Bilder randomisieren, aber das ist kein Merkmal der Diashow (oder den RSS-Feed Ich ziehe aus).

Sicherlich sollte es nicht schwierig sein, eine kurze Funktion in PHP zu schreiben, die einen externen RSS-Feeds nimmt, randomisiert die Elemente und neu veröffentlicht das gleiche Futter ‚out of order‘. Ich kann einfach nicht scheinen, damit es funktioniert.

War es hilfreich?

Lösung

Sind Sie mit DOM XML ? Dann mische nur das Array auf Import.

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

Andere Tipps

Hier ist ein vollständiges Beispiel von dem, was für mich gearbeitet. Die beiden ersten Antworten nicht aus irgendeinem Grund in meinem Fall arbeiten. Dieser ist sehr ähnlich wie die zweite.

<?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();
}
?> 

Sie einfach diesen php mit ?rss=rss_url_to_randomize verwenden.

Was hat funktioniert:

$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();

}

> <?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>';
  }
}
?>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top