2011-04-22 150 views
1

我有3個節點的內容類型'mycontenttype'。我試圖設置一個可排序/可分頁的表,每個頁面限制爲10個項目。D7尋呼機查詢 - 尋呼機頁面太多

在這段代碼中,$ nids只返回3個節點。實際上,我運行node_load_multiple($ nids)然後遍歷這些節點來構建$ rows變量。只有3個出現。

問題:尋呼機正在渲染4頁。

期望:不應該有任何尋呼機呈現,因爲我在查詢或計數查詢中沒有10個節點。

任何有識之士將不勝感激。

<?php 
function mymodule_create_a_pager_table() { 

    $query = db_select('node', 'n')->extend('PagerDefault')->extend('TableSort')->element('my_custom_id'); 
    $query->fields('n', array('nid')); 

    $query->condition('n.type', 'mycontenttype'); 
    $query->condition('n.status', 1); 

    $count_query = clone $query; 
    $query->setCountQuery($count_query); 

    $query->limit(10); 

    $header = array(array('data' => 'Title', 'sort' => 'asc', 'field' => 'n.title'), 'column 2', 'column 3'); 
    $query->orderByHeader($header); 

    $nids = $query->execute()->fetchCol(); 

    // ... building $rows array for display only here 

    $output = theme('table', array('header'=> $header, 'rows' => $rows)); 
    $output .= theme('pager', array('element' => 'my_custom_id', 'quantity' => 10)); 

    return $output; 
} 
?> 

輸出

節點1個標題| col2 val | col3 val

節點2標題| col2 val | col3 val

節點3標題| col2 val | COL3 VAL

1 2 3 4下一個>最後»

回答

2

我認爲元件應該是一個整數。

嘗試將 - > element()調用和任何參數都留給主題('pager')。

此外,您的計數查詢是錯誤的。只是不要定義它,這將自動爲你完成。這可能是你問題的真正原因,而不是元素。

計數查詢get被執行,並且第一個返回值(fetchField())被假定爲元素的數量。您的查詢可能會返回一個nid,這被誤認爲是數字。因此,只需將其丟棄,Drupal就會自動爲您創建正確的計數查詢。

+0

謝謝貝爾迪爾。我見過的例子在那裏有數據查詢,這就是拋棄它的原因。不確定的元素與它有什麼關係,因爲它可以正常工作,但我只是添加了這些東西,因爲我以爲我得到了一個錯誤的尋呼機。我感謝幫助! – Coder1 2011-04-22 16:06:10

+0

如果默認的查詢不起作用,您只需定義一個自定義查詢。在Drupal 7中,它甚至可以處理GROUP BY條件。但是,在這種情況下,它只是執行SELECT COUNT(*)FROM($ the_normal_query)。這總是有效的,但如果它是例如聚合函數等,則它是不必要的慢。因此,對於這些情況,您可以定義自定義計數查詢。如果你這樣做,你將不得不確保它只返回一個結果 - 實際查詢的總行數。 – Berdir 2011-04-22 18:54:11