пятница, 11 декабря 2015 г.

Условия в чанке Wayfinder MODX Revo.

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

Обьясню причину. Есть в дереве каталогов сайта папка "Мультимедиа", сама по себе абсолютно пустая. Как документ, она также не имеет никакой информации. У нее есть два дочерних элемента - "Аудио" и "Видео". Вся ее работа - отображать два входящих в нее подпункта при наведении стрелки мыши. Дело с подменю выглядит вот так:

Вид документов внутри дерева ресурсов

Wayfinder в меню выводит все три элемента, но так как "Мультимедиа" не имеет ценности как документ, то ссылка на нее не нужна. Она только мешает. Пользователь сайта может щелкнуть по ней и перейти в пустой документ. Это никому не нужно. В формате HTML неподобство выглядело так:
<li><a href="index.php?id=13">Мультимедиа</a>
 <ul class="inner-mmenu">
  <li><a href="index.php?id=2">Аудио</a></li>
  <li><a href="index.php?id=7">Видео</a></li>
 </ul>
</li>
Я начал изучать возможность отключения ссылки на этот документ. С виду просто, но уродовлася несколько часов.

Wayfinder Revo выводит каждый документ последовательно согласно чанка:
<li><a href="[[+wf.link]]">[[+wf.linktext]]</a>[[+wf.wrapper]]</li>
В нашем случае, когда сниппет доходит до документа с id = 13 (Мультимедиа), то ссылку внутри тега <a> нужно убрать.

Попробовал использовать встроенные условия MODX Revo. Использование конструкции
[[+id:is=`13`:then=``:else=`href="[[+wf.link]]"`]]
ни к чему не привело. Плейсхолдер +wf.link сниппета Wayfinder не работал внутри кавычек условия. А всевозможные стандартные плейсхолдеры самого MODX Revo работали.
Поэтому было принято решение попробовать использовать вместо одного родного плейсхолдера +wf.link другой - [[~[[+id]]]]
<li><a [[+id:is=`13`:then=``:else=`href="[[~[[+id]]]]"`]]>[[+wf.linktext]]</a>[[+wf.wrapper]]</li>
В результате произошло чудо) Сниппет заработал так как это от него требовалось! Почему стандартный плейсхолдер не хочет работать внутри условия я так и не понял, перелопаченные страницы форумов, блогов (к слову, крайне немногочисленные), инструкций и Wayfinder параметры не дали ответа.
Итоговый вид элементы меню в форме HTML имели такой:
<li><a>Мультимедиа</a>
 <ul class="inner-mmenu">
  <li><a href="index.php?id=2">Аудио</a></li>
  <li><a href="index.php?id=7">Видео</a></li>
 </ul>
</li>
Как видите внутри тега ссылки <a> параметр "href" отсутствует. Что позволяет не беспокоиться о том куда щелкнет пользователь. Такова прелюбопытнейшая история решения этого неказистого с виду вопроса.

2 комментария: