2014-03-03 55 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。