MODX Revo - дельные советы. Условие в чанке modx


 MODX Revo - дельные советы: Условия в чанке Wayfinder MODX Revo.

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

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

Wayfinder в меню выводит все три элемента, но так как "Мультимедиа" не имеет ценности как документ, то ссылка на нее не нужна. Она только мешает. Пользователь сайта может щелкнуть по ней и перейти в пустой документ. Это никому не нужно. В формате HTML неподобство выглядело так:<li><a href="index.php?id=13">Мультимедиа</a> <ul> <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 (Мультимедиа), то ссылку внутри тега нужно убрать.

Попробовал использовать встроенные условия 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> <li><a href="index.php?id=2">Аудио</a></li> <li><a href="index.php?id=7">Видео</a></li> </ul> </li> Как видите внутри тега ссылки параметр "href" отсутствует. Что позволяет не беспокоиться о том куда щелкнет пользователь. Такова прелюбопытнейшая история решения этого неказистого с виду вопроса.

modxrevolution.blogspot.com

Как правильно использовать чанки с параметрами и новый IF ? / Вопросы / MODX.im

Здравствуйте.

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

{{TOP_PART? &body_class=`mainpage` &leftcolumn=``}} В самом чанке TOP_PART, соответственно, выводим body_class и все хорошо.

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

Например, делаем вот такой тест и запихиваем в чанк TOP_PART:

leftcolumn без условий: [+leftcolumn+] [+leftcolumn:isnotempty:then=`не пусто из inline`:else=`пусто из inline`+] <@IF: [+leftcolumn:isnotempty+] > Не пусто из IF <@ELSE> Пусто из IF <@ENDIF> [[if? &is=`[+leftcolumn+]:!empty` &then=`не пусто из сниппета if ` &else=`пусто из сниппета if ` ]] <hr/> [+leftcolumn:is(`submenu`):then=`совпало из inline`:else=`не совпало из inline`+] <@IF: [+leftcolumn:is(`submenu`)+] > Совпало из IF <@ELSE> Не совпало из IF <@ENDIF> [[if? &is=`[+leftcolumn+]:eq:submenu` &then=`совпало из сниппета if ` &else=`не совпало из сниппета if ` ]]

И проверяем, что будет выведено. Делаем три шаблона с разным вызовом чанка. Шаблон 1:

{{TOP_PART? &leftcolumn=`submenu`}} Шаблон 2:{{TOP_PART? &leftcolumn=``}} Шаблон 3:{{TOP_PART}} Шаблон 4:{{TOP_PART? &leftcolumn=`newmenu`}}

В шаблоне 1 получаем все хорошо:

leftcolumn без условий: submenu не пусто из inline Не пусто из IF не пусто из сниппета if совпало из inline Совпало из IF совпало из сниппета if Хуже получается в шаблоне 2:leftcolumn без условий: пусто из inline Не пусто из IF не совпало из inline Совпало из IFВидим, что вообще проигнорировался вызов сниппета if, и неправильно прошла проверка «пустоты» в IF.

В шаблоне 3 вообще все плохо:

leftcolumn без условий:

Не пусто из IF не пусто из сниппета if

Совпало из IF

(хотя, скорее всего объясняется тем, что значение передается в конструкции в виде строки с плюсиками и скобочками, которая соответственно не пустая и не ноль, но при этом не понятно, почему тогда не вызвалась inline-проверка модификаторами).

Ну и вариант 4:

leftcolumn без условий: newmenu не пусто из inline Не пусто из IF не пусто из сниппета if не совпало из inline Совпало из IF Опять игнорирование второго вызова сниппета if, и ложное совпадение в IF.

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

(Версия modx EVO последняя на сегодняшний день, девелоперская. )

modx.im

Фриланс проекты › Вывод чанка MODX в зависимости от ширины монитора Вывод чанка MODX в зависимости от ширины монитора

Необходимо разработать сниппет, который будет выводить чанк в зависимости от ширины экрана. 

Например, есть сложный дизайнерский блок, пример http://prntscr.com/ketr19 или http://prntscr.com/ketspn, таких примеров сотни...  (выводится через отдельный чанк).  Очень часто, неудобно перестраивать такие блоки стилями при адаптации (очень затратно по времени, чтобы довести до адекватного вида http://prntscr.com/ketrqd). Или например нужно вывести блок с совершенно другой html структурой для определенных экранов (например экранов ниже 960 и т д). Или хедер для интернет магазина нужно вывести с другой структурой (где будет другой порядок колонок, не такой как для ПК). На практике, ситуаций очень много, где было бы идеально выводить чанк с отдельной упрощенной структурой, а не играться со стилями и переставлять колонки местами через скрипты...

PS Через CSS (@media screen) просьба не предлагать в стиле напишите для блока display: none; - этот вариант категорически не подходит, так как нужно не просто скрыть содержимое через стиль, а полностью убрать из исходного кода + очень пагубно для продвигаемого сайта скрыть содержимое через display: none, даже сказал бы убийственно и недопустимо (скрывать разные тексты и содержимое и дублировать его другим блоком, который будет отображать это содержимое для меньших экранов). Так же не предлагать Бутстрап и различные скрипты для определения устройства (это все не то)

Нужно определение именно ширины (по такой логике как сейчас с CSS @media screen, точно определяет). Пример компонент MobileDetect для MODX (только он определяет устройство а не ширину экрана), нравится как тут условие задается http://prntscr.com/ketu3t (в таком плане хотелось бы через фильтр Fenom)

freelancehunt.com


Prostoy-Site | Все права защищены © 2018 |
Карта сайта