2

以下は、XML ファイルを解析するために使用しているコードですが、ファイルには多くのレコードがあり、ページ分割し、ページごとに 20 レコードを表示したいと考えています。

また、ユーザーが他のページにも移動できるように、ページの下部にページネーション リンクが必要です。値が指定されていない場合は 0 から 20 で始まり、それ以外の場合、値が 2 の場合は 40 から始まり 60 で停止しtest.php?page=2ます。

$xml = new SimpleXMLElement('xmlfile.xml', 0, true);

foreach ($xml->product as $key => $value) {
    echo "<a href=\"http://www.example.org/test/test1.php?sku={$value->sku}\">$value->name</a>";
    echo "<br>";
}
4

3 に答える 3

3

このようなものが動作するはずです:

<?php
    $startPage = $_GET['page'];
    $perPage = 10;
    $currentRecord = 0;
    $xml = new SimpleXMLElement('xmlfile.xml', 0, true);

      foreach($xml->product as $key => $value)
        {
         $currentRecord += 1;
         if($currentRecord > ($startPage * $perPage) && $currentRecord < ($startPage * $perPage + $perPage)){

        echo "<a href=\"http://www.example.org/test/test1.php?sku={$value->sku}\">$value->name</a>";    

        //echo $value->name;

        echo "<br>";

        }
        }
//and the pagination:
        for ($i = 1; $i <= ($currentRecord / $perPage); $i++) {
           echo("<a href='thispage.php?page=".$i."'>".$i."</a>");
        } ?>
于 2013-03-29T17:52:38.100 に答える
1

と同様SimpleXMLElementに、PHP に同梱されている でTraversableページネーションを行うことができます。LimitItertor

製品要素の総数を取得するには、SimpleXMLElement::count()関数を使用できます。

ページネーションは、他の何百もの質問で概説されているように機能します。LimitPaginationタイプを使用することをお勧めします。

現在のページ、要素の総数、およびページごとの要素を引数として取ります ( PHP 5.2 および Paginationも参照してください)。を提供するヘルパー関数もありますLimitIterator

例:

$products = $xml->product;

// pagination
$pagination = new LimitPagination($_GET['page'], $products->count(), 20);

foreach ($pagination->getLimitIterator($products) as $product) {
    ...
}

ページ間の移動を可能にするページャを出力したい場合LimitPagination、たとえば現在のページをハイライト表示するすべてのページ (ここでは例として角かっこを使用) など、もう少し簡単にするための機能がさらに提供されます。

foreach ($pagination->getPageRange() as $page)
{
    if ($page === $pagination->getPage()) {
        // current page
        printf("[p%d] ", $page); 
    } else {
        printf("p%d ", $page);
    }
}

foreach ($pagination->getPageRange() as $page)
{
    if ($page === $pagination->getPage()) {
        // current page
        printf("[p%d] ", $page); 
    } else {
        printf("p%d ", $page);
    }
}

対話型オンライン デモ: http://codepad.viper-7.com/OjvNcO
非対話型オンライン デモ: http://eval.in/14176

于 2013-04-01T10:09:08.473 に答える
1

php のarray_slice関数を使用できます (ドキュメント: http://www.php.net/manual/en/function.array-slice.php )

開始は$page * $itemsPerPage、終了は$page * $itemsPerPage + $itemsPerPage、ページ数は になりますceil(count($xml->product) / $itemsPerPage)

例:

$allItems = array(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20);
$itemsPerPage = 5;
$page = isset($_GET['page']) ? intval($_GET['page']) : 0;

foreach (array_slice($allItems, $page * $itemsPerPage, $page * $itemsPerPage + $itemsPerPage) as $item) {
    echo "item $item";
}

それも機能します:) http://codepad.org/JiOiWcD1を参照してください

于 2013-03-29T17:59:23.147 に答える