PHP выводит мой XML-канал в случайном порядке - PullRequest
0 голосов
/ 12 мая 2018

У меня нормально работает вывод XML, но он в порядке последней даты. Что было бы здорово, если бы я мог получить это в случайном порядке. Я пытался использовать shuffle и просто не могу заставить его работать (кажется, ничего не происходит).

Вот пример кода, который я использую для создания своего XML. Вывод HTML с PHP для вставки переменных.

    // Build the Feed
    $feed   = "http://www.reviewswebsite.com/api/consumer-reviews/?username=" . $userName . "&format=xml&reviews_per_page=20&page=" . $pageNumber;
    $xml    = simplexml_load_file($feed);

    for($i = 0; $i < $numberOfForLoops; $i++)
    {
        $reviewer_name                = $xml->reviews->review[$i]->reviewer_name;
        $date_of_work                 = date('l, d m Y' , strtotime($xml->reviews->review[$i]->date_of_work));
        $average_reviewer_rating      = (float)$xml->reviews->review[$i]->average_rating;
    ..
    ?>
    <div><?php  echo $reviewer_name; ?></div>
...

        <?php ;} ?>

1 Ответ

0 голосов
/ 12 мая 2018

@ Четвертая птица помогла мне, передав эту ссылку: Случайное ранжирование результатов объекта SimpleXML

Конечный результат, который я создал для Trust-A-Trader обзоров, которые я встроил в Joomla! модуль был. Я постараюсь бесплатно выпустить модуль на Joomla! Каталог расширений (JED).

Код окончания был

$feed = "http://www.trustatrader.com/api/consumer-reviews/?username=" . $userName . "&format=xml&reviews_per_page=20&page=" . $pageNumber;
$xml = simplexml_load_file($feed);

    // Count Reviews, if total number of reviews is less than the total shown on page set in module then show the lesser amount to avoid an error.
    $totalNumberOfReviews = count($xml->reviews->review);
    $numberOfForLoops = $totalNumberOfReviews;
    if ($totalNumberOfReviews > $numberOfReviews) {
        $numberOfForLoops = $numberOfReviews;
    }


    // If the module sets the order to random then shuffle array, or else do in latest first date order.
    if ($params->get('Order') == 0) {
        foreach($xml->reviews->review as $val)
            $array[]= $val;

        shuffle($array);
    }


    // Loop through the reviews and output them.
    foreach($array as $val)
    {
        $i = 0;
        if ($i < $numberOfForLoops)
        {
            ?>
            <div class="mod_trust_a_trader_reviews--review g-grid" itemscope itemtype="http://schema.org/Review" itemprop="review" >
                <div class="review g-block size-100" itemprop="reviewBody">
                    <?php echo $val->comments; ?>
                </div>
                <div class="authorBlock g-grid size-100">
                <span class="author g-block size-100" itemprop="author">
                    <?php echo $val->reviewer_name; ?>
                </span>
                </div>
                <div class="score g-block size-100 g-grid">
                    <div class="g-block size-100">
                        <?php starRatingImage($val->average_rating); ?>
                    </div>
                    <div class="g-block size-100 reviewRating">
                        <?php echo '(<span  itemprop="reviewRating">' . $val->average_rating . '</span>)'; ?>
                    </div>
                </div>
            </div>
            <?php
        }

        $i++;
    }

?>
...