Drupal 7 добавление ссылок "предыдущая" и "следующая" запись (как в WordPress)

Категория: Drupal
Дата публикации: 12 марта, 2015 - 19:03
Последнее изменение: 11 апреля, 2015 - 20:11

Попалась мне интересная задачка - нужно было добавить в ноды ссылки на предыдущую и следующую записи. Но с нюансами, поэтому все оказалось не так просто :).

Добавление ссылок "prev", "next" в представлениях

Решается модулем Views Simple Pager. Получается так (скриншот со страницы модуля).
views_simple_pager.png

Ссылки на обычных страницах (нодах)

Решается модулем Previous/Next API (Внимание! Стабильной версии модуля нет, только DEV-версии, так что глюки скорее всего будут).
Можно настроить вывод для отдельных типов материалов, причем выоводить ссылкой на выбор - заголовок (title) ноды, ее NID, дату публикации или дату обновления.
Выводится все это блоком, все настройки в админке.

У модуля свой индекс нод, который по крону обновляется. Так же можно вручную пересоздать его, например, если сразу добавилось много новых.

Выглядят ссылки так:
previous-next_api.png

Flippy (мой выбор)

Тоже самое может сделать модуль Flippy.
В отличие от предыдущего модуля Previous/Next API - этот стабильный, и используется почти на 6000 сайтах.
Включение/выключение ссылок происходит на странице настройки типа материала. Очень круто, что модуль поддерживает токены, то есть ввыводить в виде ссылки можно что-угодно, хоть титл, хоть автора, хоть все вместе.
flippy-next-prev.png

При помощи этого модуля так же реализовать пролистывание контента в модальном окне.
Даже проще, чем вариант, описанный чуть ниже, так как не нужно использовать Views и "кодинга" почти не нужно.
1. Из папки flippy нужно скопировать файл flippy.tpl.php к себе в папку тему.
2. Исправить в нем кусочек, который дописывает к ссылкам для пролистывания класс "colorbox-node". Полная строчка с добавленным классом:

<?php print l($link['title'], $link['href'], array('html' => TRUE, 'attributes' => array('title' => $link['title'], 'class' => 'colorbox-node'))); ?>

Вывод ссылок на предыдущую и следующую записи, чтобы ссылкой выводился заголовок ноды, и все это перелистывалось в модальном окне, и с подгрузкой аяксом.

Для модального окна я использовал связку Colorbox+Colorbox Node.

Будет использоваться тоже Previous/Next API.
1. Выводится все это через Views.
В настройках представления нужно активировать Ajax и стиль вывода поменять на "Контент", "полная нода".
views-prev-nav.png настройки

2. Вывод в нодах ссылок. Для примера выводится списком - код помещается в node.tpl.php.

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

3. В 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');
     
      if($n_nid == 0){
          break;
      }else{
          $n_title = node_load($n_nid)->title;
          $link_text = $n_title;
          break; 
      }

    case 'n':
      $n_nid = prev_next_nid($node->nid, 'next');
     
      if($n_nid == 0){
          break;
      }else{
          $n_title = node_load($n_nid)->title;
          $link_text = $n_title;
          break; 
      }

    default:
      return NULL;
  }

  if ($n_nid) {
    $n_node = node_load($n_nid);
    $html = l($link_text, "node/$n_nid", array('html' => TRUE, 'attributes' => array('class' => 'colorbox-node'),));
    return $html;
  }
}

Класс "colorbox-node" добавляется к ссылкам внизу. При желании можно поменять на что-то другое.

В итоге вот как это будет работать:

Используемые материалы - http://eureka.ykyuen.info/2012/09/27/drupal-7-get-the-prev-and-next-node...

Комментарии

1) что то у меня не так пошло

1) что то у меня не так пошло с пролистыванием контента в модальном окне с помощью flippy
2) а как в темизации flippy сделать что бы title был полным, а не обрезанным? я в настройках обрезал до 30 символов, но вот когда наводишь на ссылки хотелось бы что бы были не обрезанными.
3) случайно не знаете как вставить маленькие превью картинок к наименованиям статей которые предыдущие и следующие?

p.s. плохо что нет отметки подписаться на уведомления. Факт что мне ответят на вопросы низок, а заходить и проверять постоянно не получится. К тому же если ответ будет через время когда я уже перестану проверять то я так и не уззнаю об этом...

2 - по-умолчанию они не

2 - по-умолчанию они не обрезаются
3 - предполагаю, что темизацией. В коде брать картнку из ноды и выводить ее с нужным стилем.

дополнение по пункту

дополнение по пункту модального окна... с первого раза не заметил что надо ставить еще и Colorbox Node.
поставил, теперь окно модальное всплывает, но оно пустое.
+ возник вопрос а как же перейти на статью из этого модального окна...

Добавить комментарий