0

I want to paginate the following filtered results from xml file:

<?php

//load up the XML file as the variable $xml (which is now an array)

$xml = simplexml_load_file('inventory.xml');

//create the function xmlfilter, and tell it which arguments it will be handling

function xmlfilter ($xml, $color, $weight, $maxprice)
{
    $res = array();
    foreach ($xml->widget as $w)
    {
        //initially keep all elements in the array by setting keep to 1
        $keep = 1;
        //now start checking to see if these variables have been set
        if ($color!='')
        {
        //if color has been set, and the element's color does not match, don't keep this element
            if ((string)$w->color != $color) $keep = 0;
        }
        //if the max weight has been set, ensure the elements weight is less, or don't keep this element
        if ($weight)
        {
            if ((int)$w->weight > $weight) $keep = 0;
        }
        //same goes for max price
        if ($maxprice)
        {
            if ((int)$w->price > $maxprice) $keep = 0;
        }
        if ($keep) $res[] = $w;
    }
    return $res;
}

//check to see if the form was submitted (the url will have '?sub=Submit' at the end)
if (isset($_GET['sub']))
{
    //$color will equal whatever value was chosen in the form (url will show '?color=Blue')
    $color = isset($_GET['color'])? $_GET['color'] : '';
    //same goes for these fellas
    $weight = $_GET['weight'];
    $price = $_GET['price'];

    //now pass all the variables through the filter and create a new array called $filtered
    $filtered = xmlfilter($xml ,$color, $weight, $price);
    //finally, echo out each element from $filtered, along with its properties in neat little spans
    foreach ($filtered as $widget) {
        echo "<div class='widget'>";
        echo "<span class='name'>" . $widget->name . "</span>";
        echo "<span class='color'>" . $widget->color . "</span>";
        echo "<span class='weight'>" . $widget->weight . "</span>";
        echo "<span class='price'>" . $widget->price . "</span>";
        echo "</div>";
    }
}

Where $xml->widget represents the following xml:

<hotels xmlns="">
    <hotels>
        <hotel>
            <noofrooms>10</noofrooms>
            <website></website>
            <imageref>oias-sunset-2.jpg|villas-agios-nikolaos-1.jpg|villas-agios-nikolaos-24​.jpg|villas-agios-nikolaos-41.jpg</imageref>
            <descr>blah blah blah</descr>
            <hotelid>119</hotelid>
        </hotel>
    </hotels>
</hotels>

Any good ideas?

Decent Dabbler
  • 22,532
  • 8
  • 74
  • 106
Antonis Vergetakis
  • 105
  • 1
  • 2
  • 12

1 Answers1

0

Honestly if you're already using XML and want to do Pagination then use XSL. It'll allow for formatting of the results and for pagination with ease. PHP has a built in XSL transformer iirc

See http://www.codeproject.com/Articles/11277/Pagination-using-XSL for a decent example.

John
  • 87
  • 4