Özel bir tablodaki verilerle bir çağrı cihazı ile sıralanabilir tablolar nasıl yapılır?


19

Drupal 6 için böyle bir şey yapabilirsiniz:

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

Bir baktım ve drupal 7 ve her ikisi için pager_queryve tablesort_sqlşimdi gitti. Bunun yerine PagerDefaultsınıfın DBTNG kullanarak bir çağrı cihazı sorgusu oluşturmak için kullanılabileceği görülmektedir. Drupal 6'da olduğu gibi sorguya sıralanabilir bir tablo eklemek için basit bir API üzerinde herhangi bir ipucu bulamadım.

Peki, özel bir tablodan veri çeken bir çağrı cihazıyla sıralanabilir bir tablo nasıl oluşturabilirsiniz?

Yanıtlar:


8

Sözde genişleticiler kullanırsınız. Sizin durumunuzda, kod aşağıdakine benzer olacaktır.

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

Bkz . Nasıl Yapılır: Modülü DBTNG'ye dönüştürme , Dinamik sorgular: Tablo sıralama ve Genişleticiler .


Çıktınıza gerçek çağrı cihazını eklemeyi unutmayın: // Build table. $ output = theme ('tablo', dizi ('header' => $ header, 'rows' => $ row, 'empty' => t ('Kullanılabilir dize yok.'))); // Çağrı cihazını ekleyin. $ output. = tema ('çağrı cihazı');
kbrinner

6

TableSortVe PagerDefaultgenişleticileri kullanın .

$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

DataTables modülünü kullanın .

DataTables modülü, jQuery eklentisi DataTables'ı görünüm stili ve çağrılabilir tema işlevi olarak Drupal'a entegre eder. DataTables, tablolara dinamik özellikler eklemenize izin verir, örneğin:

  • Değişken uzunluk sayfalaması
  • Anında filtreleme
  • Veri türü algılama ile sıralama
  • Sütun genişliklerinin akıllı kullanımı
  • CSS tarafından teması
  • Ve daha fazlası ...

Ben DB API parçası olan ve yaklaşık 50 veya daha az özel kod satırı ile yapılabilir bir şey yapmak için bir modül eklemeye karşı öneriyoruz.
Agi Hammerthief

0

Sadece aynı Drupal 6 tablesort_sql kodunu dahil edebilirsiniz ve iyi çalışıyor.

Çağrı cihazı için:

$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;
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.