2010-11-05 20 views
0

Je viens de créer une table de données basée sur une requête et l'ai affichée avec succès en utilisant theme_table().Filtrage theme_table dans Drupal

Maintenant, je voudrais ajouter quelques filtres à la table, mais je n'ai aucune idée de la façon de procéder.

Y at-il une fonctionnalité intégrée qui me permet de le faire facilement, ou devrais-je ajouter manuellement un formulaire et mettre à jour la requête/réafficher les résultats chaque fois que l'utilisateur sélectionne quelque chose?

Merci pour votre aide!

Répondre

2

Je pense que vous voulez utiliser pager_query et tablesort_sq l: il est spécialement conçu pour la création de tableaux de données avec des capacités de pagination et de tri (et les thèmes sont généralement très bien faits).

Exemple:

<?php 
    // The regular query without sorting or pagination parameters 
    $sql = 'SELECT cid, first_name, last_name, company, city FROM {clients}'; 

    // Number of rows per page 
    $limit = 20; 

    // List of table columns ("field" is the matching database column from the sql query) 
    $header = array(
     array('data' => t('Name'), 'field' => 'last_name', 'sort' => 'asc'), 
     array('data' => t('Company'), 'field' => 'company'), 
     array('data' => t('City'), 'field' => 'city') 
    ); 

    // Calculates how to modify the SQL query according to the current pagination and sorting settings 
    // Then performs the database query 
    $tablesort = tablesort_sql($header); 
    $result = pager_query($sql . $tablesort, $limit); 
    $rows = array(); 
    while ($client = db_fetch_object($result)) { 
     $rows[] = array(l($client->last_name.', '.$client->first_name, 'client/'.$client->cid), $client->company, $client->city); 
    } 

    // A message in case no results were found 
    if (!$rows) { 
     $rows[] = array(array('data' => t('No client accounts created yet.'), 'colspan' => 3)); 
    } 

    // Then you can pass the data to the theme functions 
    $output .= theme('table', $header, $rows); 
    $output .= theme('pager', NULL, $limit, 0); 

    // And return the HTML output 
    print $output; 
?> 

(I ont ajouté des commentaires, mais la version originale de l'exemple vient de this page)


Sinon, peut-être vous n'avez pas besoin de faire un module tout Si vous essayez simplement de créer une page qui affiche une liste de données, vous pouvez utiliser le Views module.

+0

Merci beaucoup pour les commentaires, super article. En ce moment, je suis vraiment aux prises avec la partie filtrage. Je voudrais reproduire quelque chose comme les filtres exposés des Vues, ​​mais avec du code à la place. La raison en est que je suis un débutant avec un délai serré et n'ai toujours pas compris comment utiliser hook_views_data = ( –

+0

Les vues peuvent être difficiles sur des délais serrés en effet: D – wildpeaks

+0

note rapide par le chemin: assurez-vous de ne pas avoir un WHERE clause dans la requête SQL que vous utilisez pour la requête pager ou vous pouvez obtenir des résultats indésirables – wildpeaks