カスタムテーブルのデータを使用してページャーでソート可能なテーブルを作成するにはどうすればよいですか?


19

Drupal 6の場合、次のようなことができます。

$header = array(
  array('data' => t('Order id'), 'field' => 'order_id'),
  ...
  array('data' => t('Transaction time'), 'field' => 'payment_time', 'sort' => 'desc'),
);
$sql = "...";
$sql .= tablesort_sql($header);
$limit = 25;
$result = pager_query($sql, $limit);
...

私は見て、drupal 7とその両方pager_queryを探しましたが、tablesort_sql現在はなくなっています。代わりに、PagerDefaultクラスを使用して、DBTNGを使用してページャークエリを作成できるようです。Drupal 6で行われたように、ソート可能なテーブルをクエリにアタッチするためのシンプルなAPIの手がかりを見つけることができませんでした。

それでは、カスタムテーブルからデータを取得するページャーを使用して、ソート可能なテーブルをどのように作成しますか?

回答:


8

いわゆるエクステンダーを使用します。あなたの場合、コードは次のようになります。

$header = array(
  array('data' => t('Order id'), 'field' => 'order_id'),
  // ...
  array('data' => t('Transaction time'), 'field' => 'payment_time', 'sort' => 'desc'),
);

// Initialize $query with db_select().
$query = db_select('your table name');

// Add the fields you need to query.
// ... 

// Add the table sort extender.
$query = $query->extend('TableSort')->orderByHeader($header);

// Add the pager.
$query = $query->extend('PagerDefault')->limit(25);
$result = $query->execute();

HowTo:モジュールをDBTNGに変換する動的クエリ:テーブルの並べ替えエクステンダーをご覧ください。


出力に実際のページャーを追加することを忘れないでください://ビルドテーブル。$ output = theme( 'table'、array( 'header' => $ header、 'rows' => $ rows、 'empty' => t( 'No string available。'))); //ページャーを追加します。$ output。= theme( 'pager');
kbrinner

6

TableSortおよびPagerDefaultエクステンダーを使用します。

$query = db_select('node', 'n');
$query->fields('n', array('nid', 'title', 'status'));

$table_sort = $query->extend('TableSort') // Add table sort extender.
  ->orderByHeader($header); // Add order by headers.

$pager = $table_sort->extend('PagerDefault')
  ->limit(5); // 5 rows per page.

$result = $pager->execute();

2

DataTablesモジュールを使用します

DataTablesモジュールは、jQueryプラグインDataTablesをビュースタイルおよび呼び出し可能なテーマ関数としてDrupalに統合します。DataTablesを使用すると、次のような動的機能をテーブルに追加できます。

  • 可変長ページネーション
  • オンザフライフィルタリング
  • データ型検出によるソート
  • 列幅のスマートな処理
  • CSSでテーマ化可能
  • その他にも...

DB APIの一部であり、約50行以下のカスタムコードで実行できるモジュールを追加しないことをお勧めします。
アギハマーシーフ

0

コードに同じDrupal 6 tablesort_sqlを含めるだけで問題なく動作します。

ページャーの場合:

$count = <Total No. of Table rows>

$sql = "...";
$sql .= tablesort_sql($header);
$limit = 25; //Pager limit

$results = db_query( $sql );
$rows = array();
//Loop through the result.
while ( $row = $results->fetchAssoc() ) {
$rows = <Get your array values for Table row>
}
$current_page = pager_default_initialize($count, $limit);
$chunks = array_chunk($rows,$limit, TRUE);
$output = theme( 'table', array( 'header' => $headers, 'rows' => $chunks[$current_page] ) );
$output .= theme( 'pager', array('quantity',$count ) );
print $output;
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.