Drupal: Навигация вперед/назад

Задача: добавить кнопки "Вперед" и "Назад" в некоторые представления на сайте на движке Drupal

Для решения этой задачи подходит модуль "Previous/Next API" для Drupal. После его установки необходимо активировать 2 модуля:

  • Prev/Next
  • Prev/Next for Views

В настройках этого модуля необходимо выбрать нужные типы материалов, для которых будем добавлять навигацию и критерии их фильтрации. Необходимо также отметить флажок "Only nodes with same content type".

Настройки модуля Prev/Next для Drupal

Этот модуль создает свой индекс иерархии материалов, из которой он запрашивает информацию. После установки, для того чтобы модуль заработал, необходимо вручную запустить cron (или дождаться пока он запуститься автоматически):

Модуль обновил индекс материалов после запуска cron

После установки в файл template.php используемой темы нужно добавить функцию:

function pn_node($node, $mode = 'n') {

  if (!function_exists('prev_next_nid')) {
    return NULL;
  }

  switch($mode) {
    case 'p':
      $n_nid = prev_next_nid($node->nid, 'prev');
      $link_text = 'Назад';
      break;

    case 'n':
      $n_nid = prev_next_nid($node->nid, 'next');
      $link_text = 'Вперед';
      break;

    default:
      return NULL;
  }

  if ($n_nid) {
    $n_node = node_load($n_nid);

    $options = array(
      'attributes' => array('class' => 'thumbnail'),
      'html'  => TRUE,
    );

    switch($n_node->type) {
      // For image nodes only
      case 'article':
        $html = l($link_text, "node/$n_nid", array('html' => TRUE));
        return $html;

      // For video nodes only
      case 'video':
        foreach ($n_node->files as $fid => $file) {
          $html  = '<img src="' . base_path() . $file->filepath;
          $html .= '" alt="' . $n_node->title;
          $html .= '" title="' . $n_node->title;
          $html .= '" class="image image-thumbnail" />';
          $img_html = l($html, "node/$n_nid", $options);
          $text_html = l($link_text, "node/$n_nid", array('html' => TRUE));
          return $img_html . $text_html;
        }
      default:
        $html = l($link_text, "node/$n_nid", array('html' => TRUE));
        return $html;
    }
  }
}

В последнем блоке switch мы задаем оформление элемента в зависимости от типа ноды. Например, для ноды типа видео можно вместо текста возвращать предпросмотр.

Вызов этой функции осуществляется непосредственно из шаблона материала, например, node--article.tpl.php :

  <ul id="view-navigation">
    <li class="next"><?php print pn_node($node, 'n'); ?></li>
    <li class="prev"><?php print pn_node($node, 'p'); ?></li>
  </ul>

Оформив кнопки с помощью CSS получаем симпатичную и удобную навигацию по сайту:

Готовые кнопки назад и вперед


Похожие материалы

Комментарии