SQLクエリを使用しない場合は、theme( 'table')にページネーションを作成します


8

行数が決まっている場合にテーブルにページャーを作成したい。

インターネットで提案された方法はテーブルを作成し、SQLクエリを使用してデータをフェッチしますが、配列のデータからテーブルを作成したいと思います。

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

上記のコードはテーブルを生成し、正常に動作します。しかし、私はテーブルにポケットベルを追加したいと思います。インターネット上の参考文献から、人々が付け加えたことがわかりました、

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

$ query-> execute()の前に、クエリがありません。

このシナリオでポケットベルを適用するにはどうすればよいですか。

回答:


7

次の関数を試してください。

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

詳細については、非SQLデータのページングを参照してください。


2
これは便利ですばらしい発見を超えています:)多くの人がこれを望んでいると感じているので、コードを追加しました
Clive

@RavindraSinghは、このコードをどこに添付すればよいか教えてくれます。少し混乱しているので..
mohit_rocks

pager_array_slice()は、$ output = pager_array_splice($ yourarray、5);を使用するために必要なコア関数です。// 5は関数のページごとの値です
Ravindra Singh
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.