foreach循环的简单分页

时间:2014-03-03 11:13:56

标签: php pagination

我需要对WordPress插件生成的输出进行分页。该插件从日期库中检索某个产品组的所有产品。基本代码是:

<?php 
    foreach ((array)$this->view['data']['produkte'] as $p) 
    { ?>
    ...some html code here
    } 
?>

其中$p是一个包含单个产品数据的多维数组。 我想将输出限制为10个产品,并为此创建一个简单的分页。该插件非常复杂并且使用嵌套模板,因此在这种情况下自定义查询可能不是一个选项。

如果有人能指出我正确的方向,那会很棒。谢谢!

这是最终的代码。非常感谢您的宝贵帮助!!

<?php
$nb_elem_per_page = 3;      
$page = isset($_GET['seite'])?intval($_GET['seite']-1):0;
$data = (array)$this->view['data']['produkte'];
$number_of_pages = intval(count($data)/$nb_elem_per_page)+2;
$page_no = $_REQUEST['seite'];
foreach (array_slice($data, $page*$nb_elem_per_page, $nb_elem_per_page) as $p) 
  { ?> some HTML here... <?php } ?>
<?php if (count($data) > $nb_elem_per_page) { ?>       
<ul id='paginator'>
  <?php
  for($i=1;$i<$number_of_pages;$i++){
  if ($i == $page_no) {?>
    <li><?php echo $i ?></li>
    <?php }
    else { ?>
    <li><a href="<?php echo get_permalink(); ?>?show=<?php echo $_REQUEST['show']; ?>&seite=<?=$i?>"><?php echo $i ?></a></li>
  <?php }} ?>
</ul>
<?php { ?>

由于默认网址已包含查询字符串,因此我不得不修改代码。我不希望当前网站在分页中有链接。这会得到分页查询字符串的编号:

$page_no = $_REQUEST['seite'];

然后,我可以使用简单的if语句轻松更改分页链接:

if ($i == $page_no) {...}?>

再次感谢!

2 个答案:

答案 0 :(得分:4)

您可能需要稍微修改一下,但这将是类似的事情:

$nb_elem_per_page = 10;
$page = isset($_GET['page'])?intval($_GET['page']-1):0;
$data = (array)$this->view['data']['produkte'];
$number_of_pages = intval(count($data)/$nb_elem_per_page)+1;


<?php foreach (array_slice($data, $page*$nb_elem_per_page, $nb_elem_per_page) as $p) { ?>
...some html code here
<?php} ?>

<ul id='paginator'>
<?php
for($i=1;$i<$number_of_pages;$i++){?>
    <li><a href='./?page=<?=$i?>'>$i</a></li>
<?php}?>
</ul>

答案 1 :(得分:0)

您可以使用array_splice(两次)来获取仅包含所需产品的新阵列。 假设您要在每页显示10个项目并从第3页开始:

<?php
$all_products = (array)$this->view['data']['produkte'];
$all_products = array_splice($all_products, 20); //select where to start
$all_products = array_splice($all_products, 0, count($all_products) - 10); //select how many products to show
foreach ($all_products as $p) {
    //...some html code here
}
?>

(未经测试)

编辑:@Loïc的答案更好,因为它只使用一个array_splice。