Buat pagination di theme ('table') saat tidak menggunakan query SQL


8

Saya ingin membuat pager di tabel ketika ada jumlah baris tetap.

Metode yang disarankan di internet membuat tabel, dan mengambil data dengan menggunakan kueri sql, tetapi saya ingin membuat tabel dari data dari array.

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');

Kode di atas menghasilkan tabel dan berfungsi dengan baik. Tetapi saya ingin menambahkan pager di tabel. Dari referensi di internet saya menemukan bahwa orang menambahkan,

$ query = $ query-> extended ('TableSort') -> extended ('PagerDefault') -> limit (10);

di depan $ query-> execute (), tetapi saya tidak punya pertanyaan

Jadi bagaimana saya bisa menerapkan pager dalam skenario ini ..

Jawaban:


7

Coba fungsi berikut:

/**
 * 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

Lihat Paging data non-SQL untuk lebih jelasnya.


2
Ini sangat berguna, sangat baik menemukan :) Saya telah menambahkan kode karena saya punya perasaan banyak orang akan menginginkan ini
Clive

@RavindraSingh dapatkah Anda memberi tahu saya di mana saya harus melampirkan kode ini..saya sedikit bingung ..
mohit_rocks

pager_array_slice () adalah fungsi inti yang baru saja Anda butuhkan untuk menggunakan $ output = pager_array_splice ($ yourarray, 5); // 5 adalah nilai per halaman pada fungsi Anda
Ravindra Singh
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.