it-swarm.com.de

So passen Sie den Pager an

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 in diesen Thread geschaut: https://www.drupal.org/node/387786 , eine Funktion erstellt bartik_preprocess_custom_pager und eine Datei custom-pager.tpl.php in meinen Bartic-Themenvorlagen, aber ich kann es 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?

7
user4035

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 Theme-Funktionen (), 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 lohnen könnte, dies nur mit CSS zu tun, aber falls dies nicht der Fall ist, können Sie möglicherweise nur Teile des Arrays $variables In der Vorverarbeitungsfunktion überschreiben, die den Pager enthält (ich weiß es nicht oben auf meinem Kopf, wenn es preprocess_page oder preprocess_node ist oder wenn es überhaupt über eine der Vorverarbeitungsfunktionen zugänglich ist).

6
bhotel

Dies ist meine Antwort aus einem früheren Beitrag .

Wenn Sie theme_pager implementieren, wird erwartet, dass Sie das gesamte Pager-Render-Array mit mehreren Designfunktionen von Grund auf neu 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 hook_preprocess_HOOK verwenden, um das Pager-Render-Array vor drupal rendert es in 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';
    }
  }
}

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

[~ # ~] update [~ # ~] : finde den ersten li.pager-item:

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