Come si creano tabelle ordinabili con un cercapersone con i dati di una tabella personalizzata?


19

Per Drupal 6 potresti fare qualcosa del genere:

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

Ho dato un'occhiata a drupal 7 e ad entrambi pager_querye tablesort_sqlora non c'è più. Sembra invece che la PagerDefaultclasse possa essere utilizzata per creare una query di cercapersone tramite DBTNG. Non sono stato in grado di trovare indizi su una semplice API per allegare una tabella ordinabile alla query come avviene in Drupal 6.

Quindi, come si crea una tabella ordinabile con un cercapersone che estrae i dati da una tabella personalizzata?

Risposte:


8

Usi i cosiddetti extender. Nel tuo caso, il codice sarebbe simile al seguente.

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

Vedere HowTo: convertire un modulo in DBTNG , query dinamiche: ordinamento delle tabelle ed estensori .


Non dimenticare di aggiungere il cercapersone effettivo nel tuo output: // Build table. $ output = tema ('table', array ('header' => $ header, 'rows' => $ lines, 'empty' => t ('Nessuna stringa disponibile.'))); // Aggiungi il cercapersone. $ output. = tema ('cercapersone');
kbrinner,

6

Utilizzare gli estensori TableSorte 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

Utilizzare il modulo DataTables .

Il modulo DataTables integra il DataTables del plug-in jQuery in Drupal come stile di visualizzazione e funzione tema richiamabile. DataTables ti consente di aggiungere funzionalità dinamiche alle tabelle, tra cui:

  • Impaginazione a lunghezza variabile
  • Filtro al volo
  • Ordinamento con rilevamento del tipo di dati
  • Gestione intelligente delle larghezze delle colonne
  • Temabile da CSS
  • E molto altro ancora ...

Consiglio di non aggiungere un modulo per fare qualcosa che fa parte dell'API DB e che può essere fatto con circa 50 o meno righe di codice personalizzato.
Agi Hammerthief,

0

Puoi semplicemente includere lo stesso Drupal 6 tablesort_sql nel tuo codice e funziona benissimo.

Per cercapersone:

$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;
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.