MODX Revo - дельные советы. Условие в чанке modx
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> Я начал изучать возможность отключения ссылки на этот документ. С виду просто, но уродовлася несколько часов.Попробовал использовать встроенные условия 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" отсутствует. Что позволяет не беспокоиться о том куда щелкнет пользователь. Такова прелюбопытнейшая история решения этого неказистого с виду вопроса.Как правильно использовать чанки с параметрами и новый 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`}}В шаблоне 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