Tạo phân trang trong chủ đề ('bảng') khi không sử dụng truy vấn SQL


8

Tôi muốn tạo một máy nhắn tin trong bảng khi có số lượng hàng cố định.

Phương thức được đề xuất trên internet tạo bảng và nó tìm nạp dữ liệu bằng cách sử dụng truy vấn sql, nhưng tôi muốn tạo một bảng từ dữ liệu từ mảng.

visitedgroups = array('1','2','3','4');//It is an array of node id which are group entity
$header = array(
                array('data' => t('Group Name')),
                array('data' => t('Group Since')),
                array('data' => t('Join')),
            );
            $rows = array();
            foreach ($visitedgroups as $groupid) {
                $groupnode = node_load($groupid);
                $createdtime = format_interval((time() - $groupnode->created) , 2) . t(' ago');
                $joinlink = l('Join Group', 'group/node/'. $groupnode->nid.'/subscribe');
                $rows[] = array( l($groupnode->title, 'node/'. $groupnode->nid),
                                                t($createdtime),
                                                $joinlink,
                                    );
            }
            $output .= t('Recently visited groups by you, in which you are not member.');
            $output .= theme('table', array('header' => $header, 'rows' => $rows, array('class' => array('group-visited-table')))).theme('pager');

Các mã trên tạo ra bảng và làm việc tốt. Nhưng tôi muốn thêm máy nhắn tin vào bảng. Từ các tài liệu tham khảo trên internet tôi thấy rằng mọi người thêm vào,

$ query = $ query-> extend ('TableSort') -> extend ('PagerDefault') -> giới hạn (10);

trước $ query-> exec (), nhưng tôi không có truy vấn.

Vì vậy, làm thế nào tôi có thể áp dụng máy nhắn tin trong kịch bản này ..

Câu trả lời:


7

Hãy thử chức năng sau:

/**
 * An generic array pager for Drupal.
 * For Drupal 5 and 6, the default limit is 10. For Drupal 7 it is 9.
 */
function pager_array_splice($data, $limit = 9, $element = 0) {
  global $pager_page_array, $pager_total, $pager_total_items;
  $page = isset($_GET['page']) ? $_GET['page'] : '';

  // Convert comma-separated $page to an array, used by other functions.
  $pager_page_array = explode(',', $page);

  // We calculate the total of pages as ceil(items / limit).
  $pager_total_items[$element] = count($data);
  $pager_total[$element] = ceil($pager_total_items[$element] / $limit);
  $pager_page_array[$element] = max(0, min((int)$pager_page_array[$element], ((int)$pager_total[$element]) - 1));
  return array_slice($data, $pager_page_array[$element] * $limit, $limit, TRUE);
}

$output = pager_array_splice($yourarray, 5);  // 5 is per page values

Xem dữ liệu phân trang không phải SQL để biết thêm chi tiết.


2
Điều này thật hữu ích, tìm kiếm tuyệt vời :) Tôi đã thêm mã vào vì tôi có cảm giác rất nhiều người sẽ muốn điều này
Clive

@RavindraSingh bạn có thể cho tôi biết tôi nên đính kèm mã này ở đâu không..như tôi hơi bối rối ..
mohit_rocks

pager_array_slice () là hàm cốt lõi bạn chỉ cần sử dụng $ output = pager_array_splice ($ yourarray, 5); // 5 là trên mỗi giá trị trang trong chức năng của bạn
Ravindra Singh
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.