Créer une pagination dans le thème («table») lorsque vous n'utilisez pas de requête SQL


8

Je voudrais créer un pager dans le tableau lorsqu'il y a un nombre fixe de lignes.

La méthode suggérée sur Internet crée une table et récupère les données à l'aide de la requête SQL, mais je veux créer une table à partir des données du tableau.

visitedgroups = array('1','2','3','4');//It is an array of node id which are group entity
$header = array(
                array('data' => t('Group Name')),
                array('data' => t('Group Since')),
                array('data' => t('Join')),
            );
            $rows = array();
            foreach ($visitedgroups as $groupid) {
                $groupnode = node_load($groupid);
                $createdtime = format_interval((time() - $groupnode->created) , 2) . t(' ago');
                $joinlink = l('Join Group', 'group/node/'. $groupnode->nid.'/subscribe');
                $rows[] = array( l($groupnode->title, 'node/'. $groupnode->nid),
                                                t($createdtime),
                                                $joinlink,
                                    );
            }
            $output .= t('Recently visited groups by you, in which you are not member.');
            $output .= theme('table', array('header' => $header, 'rows' => $rows, array('class' => array('group-visited-table')))).theme('pager');

Le code ci-dessus génère la table et fonctionne correctement. Mais je veux ajouter un téléavertisseur dans le tableau. D'après les références sur Internet, j'ai trouvé que les gens ajoutent,

$ query = $ query-> extend ('TableSort') -> extend ('PagerDefault') -> limit (10);

devant $ query-> execute (), mais je n'ai pas de requête.

Alors, comment puis-je appliquer un téléavertisseur dans ce scénario ..

Réponses:


7

Essayez la fonction suivante:

/**
 * An generic array pager for Drupal.
 * For Drupal 5 and 6, the default limit is 10. For Drupal 7 it is 9.
 */
function pager_array_splice($data, $limit = 9, $element = 0) {
  global $pager_page_array, $pager_total, $pager_total_items;
  $page = isset($_GET['page']) ? $_GET['page'] : '';

  // Convert comma-separated $page to an array, used by other functions.
  $pager_page_array = explode(',', $page);

  // We calculate the total of pages as ceil(items / limit).
  $pager_total_items[$element] = count($data);
  $pager_total[$element] = ceil($pager_total_items[$element] / $limit);
  $pager_page_array[$element] = max(0, min((int)$pager_page_array[$element], ((int)$pager_total[$element]) - 1));
  return array_slice($data, $pager_page_array[$element] * $limit, $limit, TRUE);
}

$output = pager_array_splice($yourarray, 5);  // 5 is per page values

Voir Paginer des données non SQL pour plus de détails.


2
C'est plus qu'utile, excellente trouvaille :) J'ai ajouté le code car j'ai le sentiment que beaucoup de gens le voudront
Clive

@RavindraSingh pouvez-vous me dire où dois-je attacher ce code .. comme je suis un peu confus ..
mohit_rocks

pager_array_slice () est la fonction principale que vous venez de définir pour utiliser $ output = pager_array_splice ($ yourarray, 5); // 5 correspond aux valeurs par page dans votre fonction
Ravindra Singh
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.