2011-10-03 24 views
7

Tôi đang chạy đoạn mã sau:Làm cách nào để truy vấn PagerDefault hoạt động đúng với Drupal 7?

$query = db_select('taxonomy_index', 'ti') 
    ->fields('ti', array('nid')) 
    ->condition('ti.tid', $term->tid) 
    ->condition('n.status', 1); 

$query->join('node', 'n', 'n.nid = ti.nid'); 

$query->extend('PagerDefault')->limit(2); 

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

nhưng pager không hoạt động: tất cả các mục từ truy vấn được trả lại, như thể cuộc gọi đến PagerDefault là hoàn toàn bị bỏ qua. Tôi outputting chủ đề ('pager') tiếp tục xuống trong đầu ra vì vậy đó không phải là vấn đề.

Đây không phải là ví dụ duy nhất của lỗi này mà tôi có, trong một số dự án khác các truy vấn tương tự cũng mang lại số lượng kết quả đầy đủ mỗi lần.

Tôi đã đọc tất cả tài liệu, có vẻ như nó hoạt động đôi khi và không phải lúc khác. Bất cứ ai có bất kỳ ý tưởng?

Cheers

Trả lời

18

Nó không phải là có liên quan khi bạn gọi extend().

Điều duy nhất quan trọng là bạn sử dụng đối tượng mới được trả về extend(). Lý do cho điều này là extend() tạo một đối tượng mới bao bọc đối tượng hiện tại (mẫu Decorator).

Vì vậy, bạn cần sử dụng $query = $query->extend('PagerDefault'), giống như bạn làm trong câu trả lời của mình (kết hợp với các cuộc gọi khác).

7

Nó không phải là làm việc vì bạn phải làm

$query = $query->extend('PagerDefault')->limit(2); 
+0

Đó là nó! Cảm ơn! –

+0

Điều này thực sự đã giúp tôi !! : D – DarkteK

Các vấn đề liên quan