Что бы увидеть email и телефон, включите JavaScript.

Сниппет вперед, назад для MODX Revolution


Потребовалось в проекте на MODX Revolution сделать на странице материала навигацию, вида следующий материал и предыдущий материал. Облазил самые потаённые закоулки Интернета, для MODX Revo, ничего не нашел. Привлекать сюда разные тяжеловесные сниппеты желания не было, зачем. Поэтому написал небольшой сниппет, возможно кому-то будет полезен.

Сннипет генерирует два плэйсхолдера в виде готовых ссылок:

  • [[+prev]] – предыдущая статья;
  • [[+next]] – следующая статья.

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

В сниппете в параметр title, тега ссылки прописывается поле longtitle, при необходимости можете поменять его на pagetitle.

Вот код сниппета:

 
    $id = $modx->resource->get('id');
    $parentId = $modx->resource->get('parent');
    $children = $modx->getChildIds($parentId);
    $prevtxt = ($prev)? $prev : "предыдущая статья";
    $nexttxt = ($next)? $next : "следующая статья";
    if(!$showDel) $showDel = 0;
    else $showDel = 1;
    if(!$showUnpub) $showUnpub = 0;
    else $showUnpub = 1;
    $key = -1;
    while($key == -1){
        $key = array_search($id,$children);
    }
    $out = '';
    if(count($children) > 1 && isset($children[$key])){
        $out = '
'; if(isset($children[$key-1])){ $object = $modx->getObject('modResource', $children[$key-1]); if($object->get('deleted') == 0 && $object->get('published') == 1) $out .= ''; elseif($showDel == 1 || $showUnpub == 1) $out .= ''; } else { $object = $modx->getObject('modResource', $children[count($children)-1]); if($object->get('deleted') == 0 && $object->get('published') == 1) $out .= ''; elseif($showDel == 1 || $showUnpub == 1) $out .= ''; } $out .= '
'; if(isset($children[$key+1])){ $object = $modx->getObject('modResource', $children[$key+1]); if($object->get('deleted') == 0 && $object->get('published') == 1) $out .= ''; elseif($showDel == 1 || $showUnpub == 1) $out .= ''; } else { $object = $modx->getObject('modResource', $children[0]); if($object->get('deleted') == 0 && $object->get('published') == 1) $out .= ''; elseif($showDel == 1 || $showUnpub == 1) $out .= ''; } $out .= '
'; return $out; } return $out;

П.С. от 20.08.2016: Усовершенствовал, теперь при вызове сниппета, можно задавать параметры: next и prev. Соответственно это текст ссылок на следующий материал и предыдущий. По умолчанию стоят, значения: "следующая статья" и "предыдущая статья".

П.С. от 16.12.2016: Усовершенствовал, теперь можно указывать, публиковать удалённые ресурсы или неопубликованные.

Список параметров, сниппета:

  • prev - текст ссылки для предыдущей статьи (умолчание: предыдущая статья);
  • next - текст ссылки для следующей статьи (умолчание: следующая статья);
  • showDel - показывать удалённые статьи (1 - показать, 0 - непоказывать; умолчание: 0);
  • showUnpub - показывать неопубликованные статьи (1 - показать, 0 - непоказывать; умолчание: 0);

Добра Вам и успеха в делах!

Теги материала: MODX Revolution Дополнения
Понравилась статья, поделитесь ей с друзьями!
RSS подписка по электронной почте


коммент.

avatar

Роман

- 03 декабря 2014, 22:10
Немного доработал сниппет, чтобы можно было сделать круговую связь статей. Изменение в саму статью внёс.
avatar

Slava

- 22 ноября 2015, 13:40
Спасибо!!!
avatar

Роман

- 23 ноября 2015, 20:06
Пожалуйста :)
avatar

Дима

- 07 декабря 2015, 00:20
спасибо
avatar

Роман

- 18 июля 2016, 18:42
Пожалуйста :)
avatar

Павел

- 04 декабря 2016, 15:06
Классно.

НО показывает неопубликованные ресурсы, и удаленные.

Было бы интересно добавить параметры.
showHidden
showUnpublished
avatar

Роман

- 16 декабря 2016, 16:18
Доработал :)
avatar

Леша

- 14 июля 2017, 18:53
Благодарю, все работает!
avatar

Максим

- 12 января 2018, 02:22
Приветствую!
Всё круто работает! Но не могу понять как разделить в дизайне на предыдущий и следующий, у меня всё в одном блоке выводится. [[PrevNext?]] — это я вызвал сниппет, а как ему свойства прописать, чтобы только показывал предыдущий или следующий? СПАСИБО ЗА ПОМОЩЬ!
avatar

Роман

- 12 января 2018, 11:24
Доброго времени суток, Максим!
Немного не понял, вопроса. То есть Вы хотите, что бы была возможность отображать навигацию только в одну сторону?
avatar

Максим

- 12 января 2018, 12:06
Роман, добрый день! Он у меня выводит его в одном блоке, сразу предыдущая и следующая, а я разделить хочу, в разные блоки, плейсхолдерами не получается, он их не видит, а вызываю сниппет, он мне их в одном месте выводит, а я в одном диве хочу предыдущие сделать, в другом следующие. Но в итоге я реализовал это с помощью pdoTools. Роман, пример подключения и настройки не помешал бы! А так спасибо за труд!
avatar

игорь

- 18 января 2018, 15:18
не знаешь css верстку что ли?)
avatar

Максим

- 18 января 2018, 17:54
Понятно. Ты меня не понял… Тут не в вёрстке вопрос, это первое и второе, я тебе вопрос задал, и как не вопрос от тебя услышать хотелось, а ты умничаешь! Удачи ;) И посмотри, что у тебя проверкой суммы в комментариях, по два раза вводить результат приходится, знаток css ;)
avatar

Роман

- 19 января 2018, 00:05
Максим, Игорь это не я, если что :) Про сумму знаю, руки всё не доходят исправить. По сниппету понял, доработаю, но попозже. Сейчас, что-то все как с цепи сорвались, всем надо и быстро рвут на части :)
avatar

Татьяна

- 14 марта 2018, 15:01
Спасибо, очень выручил ваш сниппет!
avatar

Александр

- 30 марта 2018, 11:46
Добрый день.
Спасибо за сниппет)
Только для меня не совсем подошел, потому что надо было чтоб он не только на следующую статью переводил, но и на следующую категорию после последней статьи.
avatar

Алейсей

- 13 марта 2019, 21:24
Спасибо огромное за сниппет, всё отлично работает!
avatar

Роман

- 07 апреля 2019, 23:39
Дружище, БЛАГО ДАРЮ ТЕБЕ от всей души за сие чудо!

Написать комментарий

Ваш email не будет опубликован. Обязательные поля отмечени символом *