Wie erstellt man mit einem Pager sortierbare Tabellen mit Daten aus einer benutzerdefinierten Tabelle?

19

Für Drupal 6 könnten Sie so etwas tun:

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

Ich habe einen Blick und für Drupal 7 und beide pager_queryund tablesort_sqlist jetzt weg. Es scheint, dass stattdessen die PagerDefaultKlasse verwendet werden kann, um eine Pager-Abfrage mit DBTNG zu erstellen. Ich konnte in einer einfachen API keine Hinweise finden, um eine sortierbare Tabelle an die Abfrage anzuhängen, wie dies in Drupal 6 der Fall ist.

Wie erstellen Sie eine sortierbare Tabelle mit einem Pager, der Daten aus einer benutzerdefinierten Tabelle abruft?

googletorp
quelle

Antworten:

8

Sie verwenden die sogenannten Extender. In Ihrem Fall ähnelt der Code dem folgenden.

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

Siehe HowTo: Konvertieren eines Moduls in DBTNG , Dynamische Abfragen: Tabellensortierung und Extender .

kiamlaluno
quelle
Vergessen Sie nicht, den eigentlichen Pager in Ihre Ausgabe aufzunehmen: // Build table. $ output = theme ('table', array ('header' => $ header, 'rows' => $ rows, 'empty' => t ('Keine Zeichenketten verfügbar.'))); // Füge den Pager hinzu. $ output. = theme ('pager');
kbrinner
6

Verwenden Sie die TableSortund PagerDefaultExtender.

$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
quelle
2

Verwenden Sie das DataTables- Modul.

Das DataTables-Modul integriert das jQuery-Plugin DataTables in Drupal als Ansichtsstil und als aufrufbare Designfunktion. Mit DataTables können Sie Tabellen dynamische Features hinzufügen, darunter:

  • Paginierung mit variabler Länge
  • On-the-Fly-Filterung
  • Sortieren mit Datentyperkennung
  • Intelligentes Handling von Spaltenbreiten
  • Mit CSS thematisierbar
  • Und noch mehr ...
Satya
quelle
Ich rate davon ab, ein Modul hinzuzufügen, um etwas zu tun, das Teil der DB-API ist und mit etwa 50 oder weniger Zeilen benutzerdefinierten Codes ausgeführt werden kann.
Agi Hammerthief
0

Sie können einfach das gleiche Drupal 6 tablesort_sql in Ihren Code einfügen und es funktioniert einwandfrei .

Für 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
quelle