¿Cómo se hacen tablas ordenables con un buscapersonas con datos de una tabla personalizada?

19

Para Drupal 6 podrías hacer algo como esto:

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

Eché un vistazo y para drupal 7 y ambos pager_queryy tablesort_sqlahora se ha ido. Parece que, en cambio, la PagerDefaultclase se puede usar para crear una consulta de buscapersonas usando DBTNG. No pude encontrar ninguna pista en una API simple para adjuntar una tabla ordenable a la consulta como se hace en Drupal 6.

Entonces, ¿cómo se crea una tabla ordenable con un buscapersonas que extraiga datos de una tabla personalizada?

googletorp
fuente

Respuestas:

8

Usas los llamados extensores. En su caso, el código sería similar al siguiente.

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

Ver Cómo : Convertir un módulo a DBTNG , Consultas dinámicas: Clasificación de tablas y Extensores .

kiamlaluno
fuente
No olvide agregar el localizador real en su salida: // Construir tabla. $ output = theme ('table', array ('header' => $ header, 'rows' => $ rows, 'empty' => t ('No hay cadenas disponibles.'))); // Añadir el localizador. $ output. = theme ('localizador');
kbrinner
6

Usa los TableSorty PagerDefaultextensores.

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

Use el módulo DataTables .

El módulo DataTables integra el complemento jQuery DataTables en Drupal como un estilo de vistas y una función de tema invocable. DataTables le permite agregar características dinámicas a las tablas, que incluyen:

  • Paginación de longitud variable
  • Filtrado sobre la marcha
  • Ordenar con detección de tipo de datos
  • Manejo inteligente de anchos de columna
  • Themeable por CSS
  • Y más por venir ...
Satya
fuente
Aconsejaría no agregar un módulo para hacer algo que sea parte de la API de DB y que se pueda hacer con aproximadamente 50 líneas o menos de código personalizado.
Agi Hammerthief
0

Puede incluir el mismo Drupal 6 tablesort_sql en su código y funciona bien.

Para buscapersonas:

$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
fuente