Блог/phx в навигации

Про использование PHx в навигации

Автор: Кудашев Сергей

Как обещал раньше подробнее коснусь моментов использования встроенного расширения в ModX PHx в навигации по сайту. Но прежде чем перейти к вопросу использования PHx в навигации коснемся немного вопроса, что такое PHx вообще.

PHx, аббревиатура, которая расшифровывается как PlaceHolder Xtended, то есть плейсхолдеры расширенные. Исходя из названия становится понятно, что это расширение, которое предоставляет возможности по расширению вывода плейсхолдеров. Помимо плейсхолдеров данное расширение может применяться почти ко всем тегам ModX, включая теги содержимого документа, TV, теги системных настроек и многое другое.

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

Так вот, в предыдущем примере я использовал пример, который позволял применять какой-то класс к родителю и потомкам данного родителя:

[*phx:if=`[*id*]`:is=`5`:or:if=`[*parent*]`:is=`5`:then=`class="about"`*]

Не самый гибкий пример, однако из данного примера видно, что при правильном использовании мы можем проверять множественные значения (в нашем случае это и id и parent), и просто и наглядно влиять на вывод информации. Покажу еще несколько примеров использования PHx в чанках WayFinder, которыми я пользуюсь при формировании навигации.

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

[*phx:if=`[*parent*]`:is=`5`:then=``:else=`<li><a href="[+wf.link+]"[+wf.classes+]>[+wf.linktext+]</a>[+wf.wrapper+]</li>`*]

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

[*phx:input=`[+wf.attributes+]`:has=`estyle`:then=`
	<li><strong><a href="[+wf.link+]"[+wf.classes+]>[+wf.linktext+]</a></strong>[+wf.wrapper+]</li>
`:else=`
	<li><a href="[+wf.link+]"[+wf.classes+]>[+wf.linktext+]</a>[+wf.wrapper+]`*]</li>
`*]

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

<a href="[+wf.link+]"[+wf.classes+][*phx:input=`[+wf.attributes+]`:has=`blank`:then=` target="_blank"`*]>[+ wf.linktext +]</a>

Все, теперь в поля атрибут ссылки нужного нам документа вписываем blank и ссылка на него будет всегда открываться в новом окне.
Этими примерами я хотел показать, что при помощи PHx можно делать с навигацией практически все что угодно. Вскоре планирую еще написать про то, как писать собственные модификаторы, что дает вообще неограниченный контроль над выводимой информацией.

Комментарии (0)