Как настроить пейджер

У меня есть код, который выводит стандартный пейджер:

print theme('pager');

он выводит это:

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

Как я могу изменить HTML на что-то вроде этого:

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

Я просмотрел эту тему: https://www.drupal.org/node/387786, создал функцию bartik_preprocess_custom_pager и файл custom-pager.tpl.php внутри моих шаблонов темы Bartic, но я не могу заставить их работать.

print theme('custom_pager');

ничего не выводит. Кто-нибудь знает, как я могу настроить вывод HTML для пейджера, создавая его только для 1 страницы?

7 голосов | спросил user4035 15 MonEurope/Moscow2014-12-15T16:33:30+03:00Europe/Moscow12bEurope/MoscowMon, 15 Dec 2014 16:33:30 +0300 2014, 16:33:30

1 ответ


2

Это мой ответ из предыдущего сообщения .

Если вы реализуете theme_pager , вы Ожидается, что весь массив рендеринга пейджера будет создан с нуля с помощью нескольких функций темы - theme_pager_first , theme_pager_previous , theme_pager_next и theme_pager_last . Это похоже на слишком большую работу для добавления одного класса.

Так как theme_pager вызывает theme_item_list в самом конце, чтобы построить окончательный рендер массив, вы можете использовать hook_preprocess_HOOK изменить массив рендеринга пейджера до того, как drupal отобразит его в 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';
    }
  }
}

Очистите кеш после добавления этого крюка.

UPDATE : найдите первый элемент 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 : найдите первый и последний элемент li.pager:

function azamara_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 18 Maypm15 2015, 15:05:43

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132