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="#"><</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="#">></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?
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).
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';
}
}
}