Jak tworzyć sortowalne tabele za pomocą pagera z danymi z niestandardowej tabeli?

19

W przypadku Drupala 6 możesz zrobić coś takiego:

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

Spojrzałem na Drupala 7 i oba pager_queryi tablesort_sqljuż go nie ma. Wydaje się, że zamiast tego PagerDefaultmożna użyć klasy do utworzenia zapytania pagera za pomocą DBTNG. Nie byłem w stanie znaleźć żadnych wskazówek na temat prostego interfejsu API do dołączania tabeli sortowalnej do zapytania, tak jak ma to miejsce w Drupal 6.

Jak więc utworzyć sortowalną tabelę z pageriem pobierającym dane z niestandardowej tabeli?

googletorp
źródło

Odpowiedzi:

8

Używasz tak zwanych przedłużaczy. W twoim przypadku kod byłby podobny do następującego.

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

Zobacz : Jak przekonwertować moduł na DBTNG , Zapytania dynamiczne: Sortowanie tabel i ekstendery .

kiamlaluno
źródło
Nie zapomnij dodać rzeczywistego pagera do danych wyjściowych: // Tabela budowania. $ output = motyw („tabela”, tablica („nagłówek” => $ nagłówek, „wiersze” => $ wiersze, „pusty” => t („Brak ciągów znaków.”))); // Dodaj pager. $ output. = theme ('pager');
kbrinner,
6

Użyj TableSorti PagerDefaultprzedłużaczy.

$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
źródło
2

Użyj modułu DataTables .

Moduł DataTables integruje wtyczkę jQuery DataTables do Drupala jako styl widoków i funkcję motywu na żądanie. DataTables pozwala dodawać dynamiczne funkcje do tabel, w tym:

  • Podział na strony o zmiennej długości
  • Filtrowanie w locie
  • Sortowanie z wykrywaniem typu danych
  • Inteligentna obsługa szerokości kolumn
  • Themeable by CSS
  • I jeszcze więcej ...
Satya
źródło
Odradzam dodawanie modułu do robienia czegoś, co jest częścią DB API i może być wykonane przy użyciu około 50 lub mniej wierszy niestandardowego kodu.
Agi Hammerthief
0

Możesz po prostu dołączyć ten sam Drupal 6 tablesort_sql do swojego kodu i działa dobrze.

W przypadku pagera:

$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
źródło