web-dev-qa-db-fra.com

Comment personnaliser le téléavertisseur

J'ai un code qui génère un pager standard:

print theme('pager');

il produit ceci:

<h2 class="element-invisible">Pages</h2>
<div class="item-list">
<ul class="pager"><li class="pager-current first">1</li>
<li class="pager-item"><a title="Go to page 2" href="/drupal/node?page=1">2</a></li>
<li class="pager-item"><a title="Go to page 3" href="/drupal/node?page=2">3</a></li>
<li class="pager-next"><a title="Go to next page" href="/drupal/node?page=1">next ›</a></li>
<li class="pager-last last"><a title="Go to last page" href="/drupal/node?page=5">last »</a></li>
</ul>

Comment puis-je changer le HTML en quelque chose comme ceci:

<ul class="pagination">
    <li><a href="#">&lt;</a></li>
    <li><a href="#">1</a></li>
    <li><a href="#" class="active">2</a></li>
    <li><a href="#">3</a></li>
    <li><a href="#">&gt;</a></li>
</ul>

J'ai regardé dans ce fil: https://www.drupal.org/node/387786 , créé une fonction bartik_preprocess_custom_pager et un fichier custom-pager.tpl.php dans mes modèles de thèmes Bartic, mais je ne peux pas le faire fonctionner.

print theme('custom_pager');

ne produit rien. Est-ce que quelqu'un sait, comment puis-je personnaliser la sortie HTML d'un pager, en en créant une juste pour 1 page?

7
user4035

Comme indiqué dans mon commentaire ci-dessus, la plupart des détails sont erronés dans votre implémentation ci-dessus. Heureusement dans Drupal 7, il y a six fonctions de thème pour le pager:

Ceux-ci devraient vous permettre d'effectuer la plupart des personnalisations dont vous avez besoin. Il existe une bonne réponse stackexchange sur la façon de remplacer Drupal () que vous pouvez consulter pour plus de détails .

Enfin, vous avez mentionné que vous souhaitez remplacer le pageur juste pour une page. Je pense toujours que cela vaut la peine de le faire avec CSS seul, mais dans le cas contraire, vous pourrez peut-être simplement remplacer certaines parties du $variables tableau dans la fonction de prétraitement qui contient le pager (je ne sais pas du haut de ma tête si c'est preprocess_page ou preprocess_node ou s'il est accessible à partir de l'une des fonctions de prétraitement).

6
bhotel

Ceci est ma réponse d'un article précédent .

Si vous implémentez theme_pager vous devrez créer l'intégralité du tableau de rendu du pageur à partir de zéro en utilisant plusieurs fonctions de thème - theme_pager_first , theme_pager_previous , - theme_pager_next et theme_pager_last . Cela semble être trop de travail pour ajouter une classe.

Puisque theme_pager appelle theme_item_list à la toute fin pour construire le tableau de rendu final, vous pouvez utiliser hook_preprocess_HOOK pour modifier le tableau de rendu du pageur avant drupal le rend en HTML.

function THEME_preprocess_item_list(&$vars) {
  // make sure we're dealing with a pager item list
  if (isset($vars['attributes']['class']) && in_array('pager', $vars['attributes']['class'])) {
    // make sure there are items
    if (count($vars['items'])) {
      $vars['items'][0]['class'][] = 'test';
    }
  }
}

Videz le cache après avoir ajouté ce crochet.

[~ # ~] mise à jour [~ # ~] : trouvez le premier élément li.pager:

function THEME_preprocess_item_list(&$vars) {
  // make sure we're dealing with a pager item list
  if (isset($vars['attributes']['class']) && in_array('pager', $vars['attributes']['class'])) {
    // loop the items and find the first .pager-item
    foreach ($vars['items'] as $index => $item) {
      if (in_array('pager-item', $item['class'])) {
        $vars['items'][$index]['class'][] = 'test';
        break;
      }
    }
  }
}

UPDATE2 : recherche le premier et le dernier élément li.pager:

function THEME_preprocess_item_list(&$vars) {
  // make sure we're dealing with a pager item list
  if (isset($vars['attributes']['class']) && in_array('pager', $vars['attributes']['class'])) {

    // loop the items and find the first and last .pager-item
    $first = FALSE;
    $last = NULL;
    foreach ($vars['items'] as $index => $item) {
      if (in_array('pager-item', $item['class'])) {

        // first
        if (!$first) {
          $vars['items'][$index]['class'][] = 'test';
          $first = TRUE;
        }

        // last
        $last = $index;
      }
    }

    if (!empty($last)) {
      $vars['items'][$last]['class'][] = 'test2';
    }
  }
}
2
Scott Joudry