So passen Sie den Pager an

7

Ich habe einen Code, der einen Standard-Pager ausgibt:

print theme('pager');

es gibt dies aus:

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

Wie kann ich den HTML-Code in etwa so ändern:

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

Ich habe mir diesen Thread angesehen: https://www.drupal.org/node/387786 , eine Funktion bartik_preprocess_custom_pagerund eine Datei custom-pager.tpl.phpin meinen Bartic-Designvorlagen erstellt, aber ich kann sie nicht zum Laufen bringen.

print theme('custom_pager');

gibt nichts aus. Weiß jemand, wie ich die HTML-Ausgabe für einen Pager anpassen und eine für nur eine Seite erstellen kann?

user4035
quelle
2
Sie müssen auch die neue Themenfunktion in deklarieren hook_theme(), sonst weiß Drupal nicht, dass es eine neue Themenfunktion gibt. Leeren Sie den Cache, nachdem Sie ein Thema geändert haben.
Kiamlaluno
@kiamlaluno Ich habe die Pager-Vorlage in die Funktion eingefügt und sie wird aufgerufen. Aber wie kann ich die entsprechenden Variablen an den Pager übergeben? Sie wurden automatisch übergeben, als ich anrief theme('pager');. Jetzt verstehe ich sie nicht.
user4035
@kiamlaluno Hallo. Ist es möglich, einen Pager innerhalb eines Moduls anzupassen? Durch Erstellen einer Funktion mymodule_pager ($ variables)?
user4035
Sie können dies auch von einem Modul aus tun, aber in diesem Fall müssen Sie auch einen anderen Hook implementieren.
Kiamlaluno
1
Themenfunktionen werden $variablesautomatisch abgerufen. Sie müssen nur hook_theme()richtig implementieren . Zum Ändern einer Themenfunktion aus einem Modul ist der zu implementierende Hook hook_theme_registry_alter().
Kiamlaluno

Antworten:

6

Wie in meinem obigen Kommentar ausgeführt, sind die meisten Details in Ihrer obigen Implementierung falsch. Glücklicherweise gibt es in Drupal 7 sechs Themenfunktionen für den Pager:

Diese sollten es Ihnen ermöglichen, die meisten Anpassungen vorzunehmen, die Sie benötigen. Es gibt eine gute Stapelaustausch-Antwort zum Überschreiben von Drupal-Designfunktionen (), auf die Sie für Details verweisen können .

Schließlich haben Sie erwähnt, dass Sie den Pager nur für eine Seite überschreiben möchten. Ich denke immer noch, dass es sich lohnt, dies nur mit CSS zu tun, aber falls dies nicht der Fall ist, können Sie möglicherweise nur Teile des $variablesArrays überschreiben, je nachdem, welche Vorverarbeitungsfunktion den Pager enthält (ich weiß nicht genau, ob dies der Fall ist) preprocess_pageoder preprocess_nodeoder wenn es über eine der Vorverarbeitungsfunktionen überhaupt zugänglich ist).

bhotel
quelle
2

Dies ist meine Antwort aus einem früheren Beitrag .

Wenn Sie theme_pager implementieren , wird erwartet, dass Sie das gesamte Pager-Render-Array von Grund auf mit mehreren Designfunktionen erstellen - theme_pager_first , theme_pager_previous , theme_pager_next und theme_pager_last . Das scheint viel zu viel Arbeit zu sein, um eine Klasse hinzuzufügen.

Da theme_pager ganz am Ende theme_item_list aufruft , um das endgültige Render-Array zu erstellen, können Sie mit hook_preprocess_HOOK das Pager-Render-Array ändern, bevor Drupal es in HTML rendert.

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';
    }
  }
}

Leeren Sie den Cache, nachdem Sie diesen Hook hinzugefügt haben.

UPDATE : Finde den ersten li.pager-Artikel:

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 : Erstes und letztes li.pager-Element finden:

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';
    }
  }
}
Scott Joudry
quelle