Comment créer des tableaux triables avec un pager avec les données d'une table personnalisée?


19

Pour Drupal 6, vous pouvez faire quelque chose comme ceci:

$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);
...

J'ai jeté un coup d'oeil et pour drupal 7 et les deux pager_queryet tablesort_sqlest maintenant parti. Il semble qu'au lieu de cela, la PagerDefaultclasse puisse être utilisée pour créer une requête de pageur à l'aide de DBTNG. Je n'ai pas pu trouver d'indices sur une API simple pour attacher une table triable à la requête comme cela se fait dans Drupal 6.

Alors, comment créez-vous une table triable avec un pager tirant des données d'une table personnalisée?

Réponses:


8

Vous utilisez les extensions dites. Dans votre cas, le code serait similaire au suivant.

$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();

Voir HowTo: convertir un module en DBTNG , requêtes dynamiques: tri de table et extensions .


N'oubliez pas d'ajouter le pager réel dans votre sortie: // Build table. $ output = theme ('table', array ('header' => $ header, 'rows' => $ rows, 'empty' => t ('No strings available.'))); // Ajoutez le pager. $ output. = theme ('pager');
— kbrinner

6

Utilisez les extensions TableSortet 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

Utilisez le module DataTables .

Le module DataTables intègre le plugin jQuery DataTables dans Drupal en tant que style de vues et fonction de thème appelable. DataTables vous permet d'ajouter des fonctionnalités dynamiques aux tables, notamment:

  • Pagination de longueur variable
  • Filtrage à la volée
  • Tri avec détection de type de données
  • Gestion intelligente des largeurs de colonne
  • Themeable par CSS
  • Et plus à venir ...

Je déconseille d'ajouter un module pour faire quelque chose qui fait partie de l'API DB et peut être fait avec environ 50 lignes ou moins de code personnalisé.
— Agi Hammerthief

0

Vous pouvez simplement inclure le même Drupal 6 tablesort_sql dans votre code et cela fonctionne très bien.

Pour pager:

$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;
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.