0

xml ファイルから次のフィルタリングされた結果をページ付けしたい:

<?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>";
    }
}

$xml->widgetは、次の 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>

良いアイデアはありますか?

4

1 に答える 1

0

正直なところ、すでに XML を使用していてページネーションを行いたい場合は、XSL を使用してください。結果の書式設定とページネーションを簡単に行うことができます。PHP には組み込みの XSL トランスフォーマー iirc があります

適切な例については、http://www.codeproject.com/Articles/11277/Pagination-using-XSLを参照してください。

于 2012-11-21T23:32:17.723 に答える