Drupal Pager - Anzahl der standardmäßig angezeigten Seiten ändern

Die Standard-Startseite von Drupal 7 zeigt eine Liste aller Inhalte an für die "auf der Startseite anzeigen" (promoted to front page) festgelegt wurde. Wenn die Liste nun viele Einträge umfasst generiert Drupal einen Pager. Wenn es so viele Elemente gibt dass mehr als 9 Seiten gefüllt werden, arbeitet der Pager mit "…" für weitere Seiten.

Die Anzahl der Beiträge pro Seite lässt sich über admin/config/system/site-information festlegen (Standard sind 10, weniger oder mehr sind möglich).

Die Anzal der maximal im Pager angezeigten Seiten lässt sich jedoch nicht so einfach ändern. Will man diese Einstellungen ändern muss man die Funktion in der template.php des verwendeten Theme überschreiben. Möchte man z. B. statt 9 Seiten nur 5 Seiten anzeigen, dann ändert man in Zeile 5

$quantity = 5;

Der Wert wird als hardcoded hinterlegt. Eine einfachere Variante zur Änderung habe ich bisher nicht ausmachen können.

Man überschreibt die Funktion in dem man sie in template.php im verwendeten Theme kopiert und die Funktion dann mytheme_pager nennt, wobei mytheme hier für den Namen (Maschinennamen) des verwendeten Theme steht

Mit dem Views-Modul lassen sich natürlich sehr einfach eigene Übersichtsseiten erstellen und ggf. lässt sich eine solche Übersichtsseite als Startseite für Drupal definieren. Mit Wiews lässt sich auch der Pager einfacher konfigurieren. Aber um die Standard-Auflistung zu verändern ist das beschriebene Vorgehen notwendig.

Kompletter Code:

function mytheme_pager($variables) {
  $tags = $variables['tags'];
  $element = $variables['element'];
  $parameters = $variables['parameters'];
  $quantity = 5; // Seitenanzal im Pager
  global $pager_page_array, $pager_total;

  // Calculate various markers within this pager piece:
  // Middle is used to "center" pages around the current page.
  $pager_middle = ceil($quantity / 2);
  // current is the page we are currently paged to
  $pager_current = $pager_page_array[$element] + 1;
  // first is the first page listed by this pager piece (re quantity)
  $pager_first = $pager_current - $pager_middle + 1;
  // last is the last page listed by this pager piece (re quantity)
  $pager_last = $pager_current + $quantity - $pager_middle;
  // max is the maximum page number
  $pager_max = $pager_total[$element];
  // End of marker calculations.

  // Prepare for generation loop.
  $i = $pager_first;
  if ($pager_last > $pager_max) {
    // Adjust "center" if at end of query.
    $i = $i + ($pager_max - $pager_last);
    $pager_last = $pager_max;
  }
  if ($i  (isset($tags[0]) ? $tags[0] : t('« first')), 'element' => $element, 'parameters' => $parameters));
  $li_previous = theme('pager_previous', array('text' => (isset($tags[1]) ? $tags[1] : t('‹ previous')), 'element' => $element, 'interval' => 1, 'parameters' => $parameters));
  $li_next = theme('pager_next', array('text' => (isset($tags[3]) ? $tags[3] : t('next ›')), 'element' => $element, 'interval' => 1, 'parameters' => $parameters));
  $li_last = theme('pager_last', array('text' => (isset($tags[4]) ? $tags[4] : t('last »')), 'element' => $element, 'parameters' => $parameters));

  if ($pager_total[$element] > 1) {
    if ($li_first) {
      $items[] = array(
        'class' => array('pager-first'),
        'data' => $li_first,
      );
    }
    if ($li_previous) {
      $items[] = array(
        'class' => array('pager-previous'),
        'data' => $li_previous,
      );
    }

    // When there is more than one page, create the pager list.
    if ($i != $pager_max) {
      if ($i > 1) {
        $items[] = array(
          'class' => array('pager-ellipsis'),
          'data' => '…',
        );
      }
      // Now generate the actual pager piece.
      for (; $i  array('pager-item'),
            'data' => theme('pager_previous', array('text' => $i, 'element' => $element, 'interval' => ($pager_current - $i), 'parameters' => $parameters)),
          );
        }
        if ($i == $pager_current) {
          $items[] = array(
            'class' => array('pager-current'),
            'data' => $i,
          );
        }
        if ($i > $pager_current) {
          $items[] = array(
            'class' => array('pager-item'),
            'data' => theme('pager_next', array('text' => $i, 'element' => $element, 'interval' => ($i - $pager_current), 'parameters' => $parameters)),
          );
        }
      }
      if ($i  array('pager-ellipsis'),
          'data' => '…',
        );
      }
    }
    // End generation.
    if ($li_next) {
      $items[] = array(
        'class' => array('pager-next'),
        'data' => $li_next,
      );
    }
    if ($li_last) {
      $items[] = array(
        'class' => array('pager-last'),
        'data' => $li_last,
      );
    }
    return '

' . t('Pages') . '

' . theme('item_list', array( 'items' => $items, 'attributes' => array('class' => array('pager')), )); } }
Tags: 

Neuen Kommentar schreiben

Filtered HTML

  • Internet- und E-Mail-Adressen werden automatisch umgewandelt.
  • Zulässige HTML-Tags: <a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • HTML - Zeilenumbrüche und Absätze werden automatisch erzeugt.
  • To post pieces of code, surround them with <code>...</code> tags. For PHP code, you can use <?php ... ?>, which will also colour it based on syntax.

Plain text

  • Keine HTML-Tags erlaubt.
  • Internet- und E-Mail-Adressen werden automatisch umgewandelt.
  • HTML - Zeilenumbrüche und Absätze werden automatisch erzeugt.