Ниже приведен код, который я использую для анализа 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>"; }
Что-то вроде этого должно работать:
<?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>"); } ?>
Вы можете использовать функцию array_slice
php (Документация: http://www.php.net/manual/en/function.array-slice.php )
Start будет $page * $itemsPerPage
, end будет $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
Поскольку SimpleXMLElement
является Traversable
, вы можете сделать разбивку на страницы с LimitItertor
который поставляется с PHP.
Чтобы получить общее количество элементов продукта, вы можете использовать SimpleXMLElement::count()
.
Пагинация работает, как описано в сотнях других вопросов, я предпочитаю использовать для LimitPagination
тип 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