下面是我用于解析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>";
}
答案 0 :(得分:2)
这样的事情应该有效:
<?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>");
} ?>
答案 1 :(得分: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
答案 2 :(得分:1)
由于SimpleXMLElement
是Traversable
,您可以使用随PHP附带的LimitItertor
进行分页。
要获取产品元素的总数,您可以使用SimpleXMLElement::count()
函数。
分页的工作方式类似于其他数百个问题,我最好使用LimitPagination
type。
它将当前页面,每页元素和元素的总量作为参数(请参阅:PHP 5.2 and 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