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?

googletorp
la source

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 .

kiamlaluno
la source
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();
Serjas
la source
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 ...
Satya
la source
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;
Paulraj
la source