2014-03-03 152 views
2

我需要为由WordPress插件生成的输出分页。该插件从数据库中检索某个产品组的所有产品。基本码是:对于foreach循环的简单分页

<?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 { ?> 

由于默认的url已经包含一个查询字符串,所以我不得不修改代码一点点。我不希望当前网站在分页中有链接。这让我分页查询字符串的数量:再次

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

感谢:

$page_no = $_REQUEST['seite']; 

然后我可以很容易地改变分页链接用一个简单的if语句!

回答

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

非常感谢。我快到了。问题是,基本的URL已经使用了一个查询字符串,如“www.domain.com/productsgroups?show = 12”(其中12是产品组的编号)。我试图修改你的代码,如下所示:'

  • '($ queryString包含包含查询字符串的url)。这给了我一个网址,如“www.domain.com/productsgroups?show = 12&page = 1”。但是,这不起作用。我想,我必须改变'$ page = isset($ _ GET ['page'])?intval($ _ GET ['page'] - 1):0;' – user2516117

    +0

    我不这么认为。 这是正常的:'www.domain.com/productsgroups?'没有.php扩展名? –

    +0

    是的,这是标准行为。这是一个WordPress网站。该页面没有扩展名。插件只需将查询字符串?show = xx添加到www.domain.com/page/。 (编号参考ID = 12的产品组。)您的代码正常工作并创建正确的分页。唯一的问题是链接到不起作用的子页面。我不知道如何组合两个查询字符串。 – user2516117

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

    (未测试)

    编辑:@卢瓦克的答案是更好,因为它仅使用一个array_splice。