Урок 8. Вывод меню с помощью Wayfinder
Начинаем 8 урок MODx Revolution для новичков. Напоминаю мы делаем сайт для изучения MODx Revolution. На последнем уроке мы рассмотрели концепцию сниппетов, которые являются кусками PHP кода, который позволяет добавить функциональности в наш вебсайт. В этом уроке мы рассмотрим особенный сниппет – Wayfinder, и будем использовать его для создания динамического меню нашего сайта.
Что такое Wayfinder?
Wayfinder– это сниппет, который выводит неотсортированный список ссылок на ресурсы в вашем дереве сайта, тип вывода списка зависит от вызова сниппета и параметров данного вызова. В общих словах это значит, что когда вы помещаете вызов Wayfinder‘а в вашем шаблоне, он начинает искать ресурсы, которые отвечают заданным в нём параметрам и возращает список ссылок к этим ресурсам в формате неотсортированного списка либо в определенном вами формате.
Для чего использовать Wayfinder?
Обычно Wayfinder использую для создания динамической навигации по сайту, то бишь меню. Так как большинство HTML шаблонов используют неупорядочненные списки для создания меню, то Wayfinder является идеальным инструментом для этих целей. При создании сайта вы можете кропотливо вставлять ваши урлы в меню навигации, так как вы делали до этого в статическом HTML сайте. В то же время, каждый раз, когда необходимо удалить или создать страницу, то вам необходимо внести соответствующие изменения в вашем меню, поменять урлы. Использование сниппета Wayfinder для динамического генерирования ваших менюшек позволяют избежать этой головной боли, так как он автоматически определяет изменения и соответственно меняет ваше меню.
Wayfinder довольно-таки гибкий инструмент и позволяет определить, какие ресурсы включить или исключить из меню, каков шаблон меню, как глубина меню вашего сайта. Граница ваших возможностей определяется вашим HTML/CSS кодом.
Как использовать Wayfinder?
Как мы уже упомянули в предыдущем уроке, синтаксис вызова сниппетов выглядит так: [[!somesnippet]]
Это всего лишь базовый вызов и его не достаточно, кроме этого мы должны определить некоторые свойства данного вызова. В случае с Wayfinder`ом самый минимум, который необходимо определить в свойствах: где в дереве ресурсов Wayfinder должен начинать строить список ресурсов. Таким образом в вызове сниппета Wayfinder необходимо задать по крайней мере один параметр – начальный ID. Базовый вызов сниппета Wayfinder в таком случае будет выглядеть вот так:
Этот вызов говорит Wayfinder‘у начинать с корня дерева (ID 0 значит корень сайта) и показывает все ресурсы, которые опубликованы и у которых не стоит галочка в чекбоксе Hide from Menus (Спрятать от Меню).
Если мы взлянем на используемый нами шаблон, то мы можем увидеть верхнее меню с несколькими пунктами и выпадающими списками.
Давайте взглянем на шаблон и код, который выводит данное меню:
Как вы видите, это вложенный неупорядочненный список. Давайте заменим этот код базовым вызовом Wayfinder и увидим, что у нас получится. Удалите код приведенный вверху и вставте вместо него:
Если вы используете тот же шаблон, что и я, то ваш код будет выглядет приблизительно вот так:
Сохраните шаблон и посмотрите на домашнюю страницу, она должна выглядет следующий вид:
Фантастика! Вы видите, что наше предыдущее меню, которое имело несколько пунктов, теперь заменено простым меню с одним лишь пунтктом – Home. Это говорит нам, что Wayfinder работает так как нужно и берет одну страницу из нашего сайта и выводит ее название в виде пункта меню.
Давайте создадим еще парочку ресурсов. Я собираюсь добавить страницу About с 3 дочерними страницами (MODx, страницы Tutorials, Contact и FAQ). Вы можете создать какие угодно ресурсы или страницы для вашего сайта. Цель этого упражнения – создать несколько ресурсов, чтобы Wayfinder‘у было что отображать.
Замечание:
Для быстрого создания дочернего ресурса нажмите правой кнопкой мыши на ресурс, который вы берете в роли родителя и дальше выберите Create Document Here.
Я закончил с созданием страниц и мое дерево ресурсов сайта выглядит вот так:
Теперь у нас есть несколько страниц, посмотрим как вызов Wayfinder‘а сгенерирует меню для нашего сайта:
Хорошей новостью является то, что все наши страницы появились в меню и нажимая на каждый пункт меню мы попадаем на соответствующую страницу. (Для тестирования этого элемента добавте какой-нибудь текст в каждую страницу, например на страницу About можете добавить “Это страница About” и эта сообщение появится при открытии страницы. Помните, что нам необходимо определять шаблон для каждой страницы, но в данный момент я не собираюсь об этом беспокоится).
Плохой новостью является та, что нарушилось форматирование меню, но мы можем это починить. Нажмите правой кнопкой мыши на вебстраницу и посмотрите исходный код (либо используйте для этого firebug), вы увидите что сейчас Wayfinder генерирует HTML следующего вида:
Как вы видите это выглядит очень похоже на наш начальный статичный код за некоторым исключением. Во-первых, Wayfinder сгенерировал <ul> пункт без класса sf-menu который применялся в нашем статичном коде. Шаблону необходим этот класс для работы с CSS. Также видно, что <li> пункты имеют параметр span, который относится к элементам текста ссылки в оригинальном статическом коде и его нет в сгенерированом Wayfinder‘ом коде. В дополнение, наш статический HTML код имеет класс acurrent-page-item, который не представлен в нашем коде сниппета Wayfinder. Все эти пропавшие куски делают вид нашего меню неприглядным.
Как настроить стиль вывода сниппета Wayfinder
Смотря на то, как Wayfinder генерирует код, у нас возникает вполне естественный вопрос: «Как нам добавить недостающие куски кода, чтобы мы хотели вывести меню в нужном для нас виде?» Ответ – очень легко, мы используем чанки шаблона для форматирования вывода сниппета Wayfinder.
Wayfinder гибкий инструмент и при помощи параметров можно определить внешний вид вывода. Некоторые общие параметры позволяют вам определить с какого уровня начинать построение меню, какие пункты не включать в меню и т.д. Другие параметры – это параметры шаблона, которые позволяют вам задать html код шаблона для вашего меню и др. Описания последних можно найти в официальной документации –http://rtfm.modx.com/display/ADDON/Wayfinder.
Возьмите на заметку: некоторые параметры Wayfinder имеют значение по умолчанию.
Это объясняет, например, почему в сгенерированном Wayfinder меню, пункт страницы Home имеет название класса “first active”. Это класс по-умолчанию, но мы можем перезаписать его обозначив собственные классы в чанках шаблона.
Мы будем использовать несколько параметров Wayfinder в этом уроке, но я советую вам изучить их все и поупражнятся в их использовании как можно больше, чтобы понять все их возможности. Так как параметры по-умолчанию Wayfinder чётко задокументированы на официальном сайте, было бы глупо рассказывать о них здесь. Мы будем использовать больше и всё больше из них, когда будем работать с различными меню.
Для начала работы над шаблоном меню давайте создадим несколько минишаблонов и сохраним их в чанках. Вы увидите, что в этих чанках мы используем код HTML, но заменяем динамические элементы заполнителями (или плейсхолдерами как их еще называют) синтаксис которых выглядит так:[[+placeholder]]. Заполнители, которые мы используем являются особенными в сниппете Wayfinder и их определение очевидно из названия, но вы всегда можете обратиться в документацию MODx за более полной справкой.
Вот чанки, которые я буду использовать для создания нашего шаблона:
7in1menuOuter – будет содержать HTML код для нашего внешнего ul контейнера.
Вы видите, что я добавил класс для внешнего ul. Альтернативным способом сделать это является использование wf.classes заполнителя и далее добавить имя класса к текущему вызову wayfinder используя параметр outerClass. Но для простоты давайте будем использовать первый способ, но оба из них будут работать нормально…
7in1menuRow – будет содержать HTML код пунктов меню первого уровня
Главной мыслью тут является та, что я добавил тег <span> к тексту ссылки меню как в оригинальном статичном HTML коде. Я также включил wf.classes заполнитель и это позволит мне определить класс для текущей страницы, который перезапишет класс “active”, который стоит у нас по-умолчанию.
7in1menuInner – будет содержать HTML код внутренних ul контейнеров
7in1menuInnerRow – будет содержать HTML код для строчек пунктов внутренних уровней
Снова я добавил тег <span> и включил заполнитель wf.classes.
Всё, теперь наши чанки шаблона на месте, как вы видите (для порядка, я поместил их в отдельную категорию) :
Теперь мы можем изменить вызов Wayfinder, таким образом мы можем использовать эти мини шаблоны для вывода Wayfinder. Если вы взгляните на список параметров шаблонизации (было бы полезно иметь перед глазами http://rtfm.modx.com/display/ADDON/Wayfinder открытым либо же распечатать и держать возле экрана), вы увидите, что я называл мои чанки похожими на соответсвующие параметры вызова сниппета. Это я сделал для удобства, это помогает мне отслеживать что к чему, когда я начинаю конструировать мой вызов. Давайте добавим параметры и вызовем наши чанки. Вызов Wayfinder теперь будет иметь вид:
Замечание!
Значение параметров помещается в апострофы (`), а не в одинарные кавычки (’).Отлично, давайте взглянем на этот вызов. Вы видите, что мы используем параметры шаблонизации для вызова наших чанков так, что Wayfinder выводит нужный нам HTML с корректными классами. Я определил вызываемый hereClass параметр и дал ему значение current_page_item, чтобы он соответствовал статическому HTML шаблону. Можно заметить, что я оставил параметры firstClass и lastClass пустыми. Причиной этого является то, что мой HTML шаблон не устанавливает класс для первого и последнего пункта меню, поэтому чтобы избежать накладок я перезаписал в них пустые строки.
Давайте пройдем дальше и сохраним измененный Wayfinder вызов и обновим страницу и увидим, как изменился вид нашего меню:
Видно, что наше меню выглядит именно так, как мы хотели. Правильные стили используются в выпадающем меню. Если вы посмотрите на исходный код, то увидите, что сгенерированный Wayfinder‘ом HTML код изменился до неузнаваемости:
Этот код соответствует оригинальному статичному коду нашего шаблона, но он был сгенерирован вызовом Wayfinder.
Существует много других параметров, которые вы можете использовать вместе с Wayfinder для построение ваших меню. В следующих уроках мы рассмотрим сложные меню и как их интегрировать в Wayfinder. Подведем итог: сейчас наш сайт приобрел некоторую форму и у нас есть функциональное и динамичное меню.
Oct 23 2011 уроки MODx Revolution сниппеты Wayfinder Виктор Матушевский
Alex
27.11.2011 00:25В статье отсутствует текст после двоеточия - "(или плейсхолдерами как их еще называют) синтаксис которых выглядит так: ."
Плейсхолдер выводится [[+плейсхолдер]]
Lola
05.12.2011 13:40Виктор! Из вашего урока не ясно как сделать так, чтобы классы для строк: first active, first и last вообще не выводились? Ниже привед код. который генерирует Wayfinder. Мне кажется, что это типовая ситуация. /* ваш код не прошёл через парсер модекса */
Viktorminator
05.12.2011 14:35http://rtfm.modx.com/display/ADDON/Wayfinder+Introductory+Examples#WayfinderIntroductoryExamples-Settingclasses
&firstClass=`` &lastClass=`` &hereClass =``
creativecult.org
24.01.2012 15:55Мдя Круто
Илья
05.02.2012 11:52Добрый день.
Вызываю "хлебные крошки" следующим образом из чанка:
[[Breadcrumbs?
&homeCrumbTitle = `Главная`
&homeCrumbDescription = `Главная`
& currentAsLink = `0`
&crumbSeparator = ` `
&bcTplCrumbCurrent = `[[+text]]`
&bcTplCrumbCurrentLink = `[[+text]]`
&bcTplCrumbFirst = `[[+text]]`
&bcTplCrumbHome = `[[+text]]`
&bcTplCrumbLast = `[[+text]]`
&bcTplCrumbMax = `[[+text]]`
&bcTplCrumbLink = `[[+text]]`
&bcTplCrumbOuter = `[[+text]]`
&bcTplCrumb = `[[+text]]`
]]
Все работает, кроме ссылок на промежуточные страницы, т.е. в код сайта выводится выводится ...href=""...
На сколько понимаю все дело в [[~[[+resource]]]] но чем его заменить?
Если меняю шаблон вывода напрямую в коде сниппета, то все работает, но это же не очень хороший метод.
Илья
05.02.2012 11:57¤tAsLink = `0` - это почему-то так отобразился currentAsLink = `0`
С амперсендом почему-то слово съедается
Docs
06.02.2012 22:45Не смог разобраться, есть ли возможность сделать ограничение на количество данных субменю, что-то вроде пагинации для wayfinder?
Viktorminator
06.02.2012 23:15Вместо "пагинации" для вейфайндера, что я не встречал, может стоит посмотреть в сторону css3 и сделать большое меню или придумать отображение в несколько рядов типа "Мегаменю" http://net.tutsplus.com/tutorials/html-css-techniques/how-to-build-a-kick-butt-css3-mega-drop-down-menu/
Alex
15.02.2012 05:25Вопрос не совсем по WayFinder, но рядом. Я сделал на сайте сайдбар, в котором при помощи Wayfinder'а отображаю подэлементы текущей страницы, если страница не контейнер (нет отображаемых детей), то отображаю тоже самое не для текущей страницы, а для родительской. Написал для этого сниппет, код сайдбара выглядит так:
[[!getResourceField? &id=`[[!mo_getIdOrParent]]` &field=`pagetitle`]]
[[!Wayfinder? &hereClass=`mm_active` &startId=`[[!mo_getIdOrParent]]` &level=`1`]]
Суть проблемы такова, что если отображается элемент первого уровня без детей, то выводится дубликат основных пунктов главного меню, но проблема в том, что этот блок не имеет заголовка. Можно как-то отлавливать такую ситуацию без написания сниппета? Ну и второй вопрос - может есть штатные средства вместо самописного сниппета, решающие такую же задачу?
Alex
15.02.2012 05:33И вопрос не по теме данной статьи - вы не планируете рассмотреть бабеля? А то куча вопросов по нему, а ответов что-то не найти ;)
Alex
15.02.2012 06:54И еще вопрос, в этот раз вроде бы по WayFinder.
При помощи WayFinder я делаю главное меню. Есть корень сайта, есть страница (первая, home), которая имеет pagetitle=`description`, longtitle=`long description`, menutitle=`home`. Я все делаю при помощи WayFinder'а, главное меню меня устраивает - там отображается 'home'. Так же при помощи WayFinder я строю карту сайта (не sitemap.xml, а для людей), и, к моей досаде, там так же отображается 'home', а хотелось бы pagetitle (`description`). Как это поправить?
Наверно, готового рецепта нет (хотя почему? у меня вполне здравые пожелания), очень буду признателен за советы, как, что и с помощью чего можно реализовать.
PS плс увеличьте высоту textarea ввода, как-то не удобно ;)
Viktorminator
15.02.2012 08:12Для вывода нужных дочерних элементов для текущего попробуйте это: [[!Wayfinder? &startId=`[[*id]]`]]
Бабель - да.
Вот мой вызов для формирования карты сайта [[wayfinder? &startId=`0` &excludeDocs=`7,2,49` &rowTpl=`sitemapTpl` &innerTpl=`sitemapInnerTpl` &innerClass=`list-type-1` &ignoreHidden=`TRUE` ]]
Используйте чанки для шаблонирования вывода карты сайта.
Для увеличения области комментирования справа внизу есть такой уголок - потяните за него...
Alex
15.02.2012 08:551) [[*id]] - это первое, что я пробовал. Не понравился результат для страниц, у которых нет дочерних элементов, вот и стал извращаться. Проблема в том, что я не знаю (не силен пока в modx), есть ли возможность проверить значение на пустоту и подствить что-то другое стандартными средствами, или надо писать сниппет на php. В принципе, второе не проблема, но если есть элегантное решение штатными средствами, то это было бы здорово.
2) Бабель - да - это как? "да, бабель это гемор", или "да, планирую разобрать его использование"? ;) Или "да, проблема есть, и она (пока не) решаема штатными средствами"
3) Карта сайта - не совсем понял, как чанки могут мне помочь. Я хочу в одном случае использовать все штатные возможности, во втором - принудительно НЕ использовать [[*menutitle]], а всегда использовать [[*pagetitle]]
PS Уголок - работает замечательно, сразу не заметил, правда ;)
Антон
15.02.2012 19:22Здравствуйте!
Мне нужно чтобы пункты меню ссылались абсолютными ссылками (/catalog/), а не относительными (catalog/).
Все сделал как сказано:
- .htaccess поправил
- В Настройки системы -> Дружественный URL установил (friendly_urls - Yes, use_alias_path - Yes).
В use_alias_path сказано в подсказке, что будет генериться абсолютный путь, но он не генериться.
В чем еще может быть проблема?
Viktorminator
15.02.2012 20:20Выставьте параметр &scheme равным abs или full в вызове Wayfinder
Антон
15.02.2012 20:31Спасибо за помощь.
Феоффан
27.02.2012 14:37доброго времени суток
сделал всё как сказано но он не добавляет ul class="sf-menu"
в чём может быть проблема?
Феоффан
27.02.2012 15:09и li class="current_page_item" он вставляет со второго эллемента меню
т.е.
ul
li href=sitename span /span /li
li class="current_page_item"
Феоффан
27.02.2012 15:13извеняюсь всё работает
была элементарная опечатка в имени чанка
вместо 7inmenuOuter было7inmenuOuRet
kabudasay
27.03.2012 19:52меня всегда беспокоил вопрос а еслу у меня меню начинается с ul
что мне делать и как это будет в modx revo подскажите плз
kabudasay
27.03.2012 19:55ul id="nav" li class="current"
Viktorminator
27.03.2012 19:56воспользуйтесь параметрами &innerTpl &rowTpl
kabudasay
27.03.2012 20:12а не подскажешь на примере у меня тока два этажа т.е при наведении выпадает тока одна ветка
kabudasay
27.03.2012 20:18вот сайт dreamok . ru там пример меню
Viktorminator
27.03.2012 20:20улови разницу между class="nav" & id="nav"
kabudasay
27.03.2012 20:26а ты можешь мне объяснить что к чему !?
плииииз я просто голову сломал уже с этим wayfinder в старом модексе он проще был
- читай http://rtfm.modx.com
Andrey
12.04.2012 09:17Помогите с этим wayfinder. Вызываю [[!Wayfinder? &startId=`0`]] а на сайте появляется ссылка только на главную стараницу. Сколько бы я не создавал в ресурсах документов, не один не появляется в меню. Что я делаю не правильно?
Viktorminator
12.04.2012 09:20Опубликуйте создаваемые ресурсы. Чекбокс "Скрыть от меню" оставляйте пустым.
Andrey
12.04.2012 09:36http://s2.ipicture.ru/uploads/20120412/DVqjRXdx.jpg
Если так? То я это сделал сразу. Но никакого эфекта.
Viktorminator
12.04.2012 09:471.Почистите кеш. 2.Потом посмотрите в код в браузере, то есть может он меню выводит, только не показывает.
Andrey
12.04.2012 09:58Спасибо за помощь. Кеш чистил не однократно. В коде меню не появляется.
Михаил
30.04.2012 17:09Если вы используете новую версию modx то заместо [[!Wayfinder? &startId=`0`]] поставте [[Wayfinder? &startId=`0`]] то есть уберите !. Мне помогло
Eduard
06.06.2012 18:47Здравствуйте! Все так хорошо начиналось.. Сниппет встал, странички создаю, в меню выводит, а вот по клику не находит их.. Пишет (Вы ошиблись при наборе URL в браузере. Вероятнее всего, сервер пытается найти файл Z:/home/cms7/www/pro-nas.html, которого не существует.) Все это находится на Денвере, локалхост.. Заранее благодарен.
Viktorminator
06.06.2012 18:49про base href не забыли случайно?
Eduard
06.06.2012 19:36Да я вот только подумал о базе даных. Сравниваю код с сайтом который сделал на эволюшин, все генерит, странички, обращение, короче вроде бы как и должно быть. Зашел в базу данных, там тоже вроде бы нормально, создана, подвязана... Прям не знаю на что грешить.. Я ведь в теме совсем недавно.. Спасайте!!!
Eduard
06.06.2012 20:16Вот! Стоит.. Может что те так?
Viktorminator
06.06.2012 20:56я имел в виду <base href="[[++site_url]]"/>
Жанат
14.06.2012 14:31Доброго времени суток! Для начала хочу вас поблагодарить за ваш замечательный сайт. И хочу уточнить как выводить пункты меню в теге потому что просто выводить в [[!Wayfinder? &startId=`0` ]] у меня теряются свойства горизонтального меню. Пытался понять на этом примере [+wf.linktext+] [+wf.wrapper+] но не понимаю куда вставлять значения и не могли бы выложить содержимое чанков урока "Вывод меню сайт с помощью Wayfinder".
Viktorminator
14.06.2012 14:38Добрый день. Пожалуйста. Используйте в плейсхолдерах синтактис Revolution:
[[+wf.linktext]]
[[+wf.wrapper]] и т.д.
Вставлять эти значения нужно в шаблонирующие чанки, а названия чанков указывать в параметрах вывода: Детально здесь - http://rtfm.modx.com/display/ADDON/Wayfinder#Wayfinder-TemplateParameters
Сергій Сидоренко
07.07.2012 17:08Спасибо за сайт, как новичек много полезного взял для себя.
Вот не могу понять как задать стиль для первого пункта меню. Суть в том что для тега a первого пункта меню нужно задать определенный стиль. При инициализации сниппета пишу [[!Wayfinder?
&startId=`0`
&outerTpl=`menuOuter`
&rowTpl=`menuRow`
&innerTpl=`menuInner`
&firstClass=`active`
]]
Класс active в стилях задан
Viktor Minator
07.07.2012 17:19Используйте CSS-селекторы http://net.tutsplus.com/tutorials/html-css-techniques/the-30-css-selectors-you-must-memorize/
Сергій Сидоренко
07.07.2012 18:34Дело в том что при формировании меню и ссылки класс вообще не устанавливается в исходном коде
Дмитрий Куликов
26.09.2012 20:52скорее всего нет строчки [[+wf.classes]] в нужной ссылке или пункте меню. Пропишите чанк для &rowTpl=`rowTpl`
Содержимое чанка rowTpl [[+wf.linktext]] - [[+wf.description]] [[+wf.wrapper]]
Лазуренко Евгений
21.10.2012 15:11Доброго времени суток! У меня такая вот проблема! Вывожу меню с такими параметрами
[[!Wayfinder?
&startId=`0`
&outerTpl=`wrapper_menu`
&rowTpl=`level_1`
&rowIdPrefix=`item`
&firstClass=``
&lastClass=``
]]
А проблема в том что не выводятся заголовки пунктов меню второго уровня!
July T.
05.12.2012 20:34Что-то никак не соображу как приваивать класс для элемента меню у которого есть подменю. т.е. структура такая:
ляляля
ляляля
мимими
мимими
т.е. если у элемента меню есть подменю, то ему надо присваивать класс sublink
не подскажете?
July T.
05.12.2012 20:36никак не соображу как присвоить класс элементу меню, у которого имеется подменю. тоесть если подменю есть - есть класс у элемента li, если нет, то нет. не подскажете?
Viktor Minator
06.12.2012 01:34&parentClass=...
July T.
06.12.2012 11:48большое спасибо!
Scoop
31.12.2012 04:17Привет, с уроком в большей части разобрался, но остался ряд "идеологических" вопросов.
[[+wf.wrapper]] - когда его необходимо вставлять и куда? На данный момент я этот плейсхолдер понимаю, как здесь "вставлять ВЕСЬ код, который вложен внутри", т.е. если у есть свои , то их код будет вставляться именно по этому плейсхолдеру.
[[+wf.attributes]] - по этому плейсхолдеру больше вопросов, чем ответов. Когда его вставлять? Какие атрибуты от определяет и определяет ли вообще?
[[+wf.classes]] - понятно, что он определяет класс. Но какой класс? Например, если &hereClass задает определенный класс, то он будет вставлен на месте плейсхолдера. Но если я ничего явно не задаю, например не указываю hereClass. Как тогда будет восприниматься данный плейсхолдер?
Viktor Minator
31.12.2012 12:07wrapper - это содержимое подменю

attributes - это аттрибуты, которые вы прописываете в ресурсе, например data-id="5" и оно же выведется через Wayfinder
classes - это классы, назначаемые через параметры в вызове сниппета Wayfinder, будут использованы ВСЕ передаваемые парамеры классов.
Scoop
01.01.2013 19:07Спасибо за быстрый и развернутый ответ!
Максим Кутузов
19.02.2013 07:40Подскажите, как быть, если определяющие классы относятся не к тегу постороения списка 'ul', а к контейнеру 'div'
как показано в примере ниже:
(div id="templatemo_menu" class="ddsmoothmenu")
(ul)
(li)(a href="index.html" class="selected")Home(/a)(/li)
(li)(a href="products.html">Products(/a)
(ul)
(li)(a href="#")Sub menu 1(/a)(/li)
(/ul)
....
перепробовал много вариантов - не получается выстроить правильно меню.?
Viktor Minator
19.02.2013 10:19сделайте так: https://gist.github.com/modxws/4983983
Максим Кутузов
19.02.2013 12:19Виктор, спасибо! Подскажите еще как в этом случае в том же меню подсвечивать активную страницу?
Viktor Minator
19.02.2013 12:24Обновил https://gist.github.com/modxws/4983983
Максим Кутузов
19.02.2013 22:20не могу понять в чем ошибка. все сделал по Вашему совету. вот ссылка на код https://gist.github.com/anonymous/4989354
Но активная страница все равно не подсвечивается.
и плюнуть бы но у этих авторов неплохие шаблоны, а меню ко всем выполнено в этом ключе.
Viktor Minator
20.02.2013 02:40На сайт можно глянуть?
Максим Кутузов
20.02.2013 07:38Наброски сайта подняты локально. Как показать полностью или фрагмент какого чанка или шаблона выложить на гистхаб?
Viktor Minator
20.02.2013 08:30Покажите код страницы, которую выводите.
Максим Кутузов
20.02.2013 09:14шаблон страницы - https://gist.github.com/anonymous/4993575
чанк HEADER - https://gist.github.com/anonymous/4993586
чанк FOOTER - https://gist.github.com/anonymous/4993587
Viktor Minator
20.02.2013 09:26хтмл-код выводимой страницы (той, что у вас в браузере выдаётся)
Максим Кутузов
20.02.2013 11:25https://gist.github.com/anonymous/4994231
Viktor Minator
21.02.2013 10:14ну. всё ж правильно выводится...
Alex ak
11.03.2013 11:13Уважаемые знатоки!
Помогите с менюхой.
Нужно wayfinder-ом сделать вот такую менюху чтобы попасть в дизайн:
-Пункт меню (класс first)
---Пункт подменю
---Пункт подменю (класс last1)
-Пункт меню
-Пункт меню (класс last1)
-Пункт меню (класс first1)
-Пункт меню
---Пункт подменю
---Пункт подменю (класс last1)
-Пункт меню (класс last)
Т.е. пункты верхнего уровня разделены на две части: посередине надо назначить пунктам классы last1 и first1
Сергей-Добродей Павлов
19.03.2013 13:45Можно ли восстановить удаленные чанки в MODx revolution?
Сергей-Добродей Павлов
19.03.2013 14:54как избавиться от всплывающей подсказки в виде маленького желтого прямоугольника(виден на вашей картинки с на нем еще текст The Coding Pad)?
http://fotki.yandex.ru/users/sergeydobradey/view/777878/">
Ведь это параметр title а он обязателен для указания при использовании Wayfinder
Viktor Minator
19.03.2013 19:00это title в строке меню. Удалите его в вашем чанке для вейфайндера и исчезнет подсказка.
Максим Афанасьев
30.03.2013 13:15Ребят, это реально очень сложная штука, чтобы в ней разобраться))). Подскажите мне по такому вопросу. У меня элементы li ссылки активных страниц присваивается class="active", а как сделать чтобы этот класс присваивался не li, а элементу ???
Viktor Minator
30.03.2013 14:12&rowTpl в чанке задайте +wf.classnames
Максим Афанасьев
30.03.2013 14:39Извиняюсь, но не совсем понял что нужно сделать. Можете расписать подробно?
Viktor Minator
30.03.2013 14:40http://rtfm.modx.com/display/ADDON/Wayfinder#Wayfinder-TemplateParameters ищите тут &rowTpl
Максим Афанасьев
30.03.2013 15:28Спасибо, с этой штукой разобрался, ток вот не понял как [+wf.classnames+] работает...
Viktor Minator
30.03.2013 15:31чуть ниже глаза опустите и там для версии Рево есть.
Максим Афанасьев
30.03.2013 13:23И вот ещё вопрос, как мне в wayfinder'e задать вывод id с помощью диапазона? Например, мне нужно вывести пункты меню с 1 по 5, а в другом меню вывести пункты с 6 по 10. Как это лучше сделать?
Максим Афанасьев
30.03.2013 15:38На счет диапазона меню никто так и не подскажет ? :( Как мне сделать 2-3 меню на сайте? И плюс когда начинают стартовать с айди неравного 0 меню вообще не выводится...
Елена Агеева
30.05.2013 06:58Виктор, если не затруднит, помогите, пожалуйста, мне с одной проблемой. У меня в меню два этажа, (т.е. есть пункты Контакты,..., Новости -...ру.news.хтмл, и подменю,например, Первая новость -...ру.news.news-1.хтмл).
И вот как раз с подменю выводится косяк: когда я нахожусь на нижнем меню (например, Первая новость), и нажимаю на пункт верхнего меню (например, Контакты), то происходит ошибка и вместо ...ру.contacts.хтмл в строке адреса показывает ...ру.news.contacts.хтмл и,соответственно, страницу Контакты не открывает. Думаю, что проблема с Wayfinder, хотя всё делала, руководствуясь материалами урока.
Viktor Minator
30.05.2013 07:08посмотрите выше мой комментарий по base href
Елена Агеева
31.05.2013 08:47Спасибо, Виктор, помогло
Aleksandra
09.07.2013 23:31Виктор, здравствуйте! Спасибо за уроки!
Вопрос по работе параметра Wayfinder - "hideSubMenus" (Скрывать подменю и выводить для активного пункта) или возможно по его аналогам.
На modx evo "hideSubMenus" действительно скрывал только подменю и выводил его для активного пункта. А вот при применении его на revo и при выводе Wayfinder на соседних (относительно startId) ресурсах меню скрывается полностью. Могли бы подсказать, возможно ли при помощи стандартных настроек добиться от Wayfinder на revo тех же результатов, что при использовании "hideSubMenus" на evo? Заранее спасибо за ответ :)
Viktorminator
10.08.2013 02:57Решал такие задачи в виде костыля - вызов getResources для формирования подменю в активном меню.
Gougar35
23.07.2013 12:06День добрый! Спасибо за уроки, очень помогли) Небольшая проблема возникла при отображении меню на планшетах. Если на стационарном компе, ведёшь мышкой по дереву, оно просто открывается, но пока ты не нажмешь на нужный пункт перехода не происходит.... А на планшетнике при нажатии на первый пункт меню, сразу идёт переход и дерево просто не успевает раскрыться....я так понимаю нужно копать в сторону media="handheld" правильно я мыслю? Может более конкретно подскажете(что подправить в коде:)спасибо)
Viktorminator
10.08.2013 02:59В меню для мобильных устройств не разбираюсь. Вы используете бутстреп, другой фреймворк (css) или речь идёт о менеджере? Если о менеджере, то Handyman в помощь.
Дмитрий Туроверов
13.08.2013 13:02Спасибо! Доступно, понятно, всё работает!
alistan xXx
18.09.2013 13:52добрый день, не подскажете в чем моя ошибка:
все сделал и работает на ура, но вот только при генерации html выводимой страницы не сохраняет
отступы в исходниках верстки. меня это жутко бесит. пробовал и так и этак в шаблонах &outerTpl и rowTpl, но все одно лепит коряво при выводе. что не так делаю?
Віктор Матушевський
14.10.2013 18:37Без примеров кода трудно ответить.
Павел Мерзляков
14.10.2013 18:17Извините за глупые вопросы, но на офф. сайтах MODx ничего не на рыл! Подскажите пожалуйста, как создать несколько меню на сайте, например: Главное меню (Ну там ссылки главная, контакты и тд), Дополнительное меню(Администрация сайта, информация для пользователей и тд)? Вот как это реализовать, я примерно догадываюсь, но все же у меня не получается свои догатки реализовать, заранее спасибо за ответ!)
Віктор Матушевський
14.10.2013 18:38несколько вызовов Wayfinder + структура ресурсов должна быть соответствующая...
Павел Мерзляков
15.10.2013 12:34Напишите пожалуйста любой код для Wayfinder, который мне должен помочь в этом, я постараюсь самостоятельно в нем разобраться! Заранее спасибо!
Віктор Матушевський
15.10.2013 12:44[[Wayfinder? &startId=`0`]]
[[Wayfinder? &startId=`10`]]
0 - это наше стандартное дерево ресурсов, ресурс 10 делаем скрытый от меню.
10 - это родительский ресурс для нашего второго меню.
Алех Хела
16.10.2013 19:43Народ, всем доброго времени суток!
Как реализовать wayfinder'ом такое меню http://tavportal.ru/demo/index.html, чтобы програмно задать каждому коревому пункту свой шаблон вывода подменю?
Хотя бы основное направление укажите. :) Только без посыланий в известные туры :)
Viktor Matushevskyi
16.10.2013 21:22не понятен вопрос... нужно каждый пункт меню выводился по-своему? или же каждый ресурс со своим шаблоном?
Если первое, то выводить с помощью getResources
Алех Хела
17.10.2013 20:09Ща, объясню. :)
Пример:
1-й пункт меню "Главная", при наведении краткое описание сайта.
2-й пункт меню "Статьи", при наведении открывается менюшка, в которой есть строки заглавные, которые говорят о темах статей и столбцы, в которых перечисляются сами статьи в этих темах (по типу пункта меню - 4 Columns).
3-й пункт меню, такой как 1 Columns, он для остальных типов ресурсов: "Семинары", "Контакты", и т.д.
Алех Хела
17.10.2013 20:09Ща, объясню. :)
Пример:
1-й пункт меню "Главная", при наведении краткое описание сайта.
2-й пункт меню "Статьи", при наведении открывается менюшка, в которой есть строки заглавные, которые говорят о темах статей и столбцы, в которых перечисляются сами статьи в этих темах (по типу пункта меню - 4 Columns).
3-й пункт меню, такой как 1 Columns, он для остальных типов ресурсов: "Семинары", "Контакты", и т.д.
Алексей Земсков
18.10.2013 15:19Уважаемые, подскажите, необходимо вывести такого вида меню
проблема в том что у меня присутствует Название верхнего уровня между блоками, а с генерировать его не могу, может кто в курсе как подобную вещь сделать, не менять же макет полностью.
&innerTpl=``
Тест1
Тест1
блабла
блабла
блабла
блабла
Тест2
Тест2
блабла
блабла
блабла
блабла
Алех Хела
18.10.2013 19:16В комментарии Viktor Minator от 31.12.2012 12:07, есть картинка, которая наглядно показывает структуру вывода меню Wayfinder'ом. Я уверен, что для твоего подменю нужно сделать отдельный шаблон, и пользовать его при выводе. В шаблоне указать title ресурса-родителя.
Viktor Matushevskyi
19.10.2013 00:42Дайте ссылку на макет, поглядим.
Алех Хела
19.10.2013 08:17Спит, наверно :)
lady-reynard
20.12.2013 09:48Помогите плиз кто-нибудь, у меня какая-то кракозябрая с меню..
В начале выводилась, месяц простояло.. Потом ошибку писать стало..
]: Wrong datatype for second argument in /home/www/z79009/***/core/components/wayfinder/wayfinder.class.php on line 235
Потом белый экран.. Сейчас вообще не выводится..
Константин Ерохов
22.12.2013 19:58Добрый день! Спасибо за уроки - разобрался очень быстро. Но возникла проблема и не могу решить вторую неделю - wayfinder обрезает тег span, причем обрезает когда ресурс не является контейнером для других документов. У меня шаблон в css прописан на этот тег.. Теперь подробнее
В чанке прописано: ... span /span /a.... , а вот в коде этот span загадочным образом исчезает, появляется только в ресурсах-контейнерах. В чем может быть проблема?
Константин Ерохов
22.12.2013 19:59между span и /span чанк +textlink
Viktor Matushevskyi
22.12.2013 20:35rowTpl попробуйте отредактировать
Константин Ерохов
23.12.2013 16:46Пробовал - не помогает(. Чтоб было понятнее добавлю код:
Код вызова
!Wayfinder? &startId=`0`
&outerTpl=`shablonulfirst`
&innerTpl=`shablonmenuInner`
&parentRowTpl=`shablonmenuRow`
&innerRowTpl=`shablonmenuinnerRow`
&hereClass=`current-menu-item`
&rowClass=`menu-parent menu- +wf. docid `
&firstClass=``
&lastClass =``
Код чанка shablonmenuRow - li +wf. classes a href=" +wf. link " span +wf. linktext /span /a +wf. wrapper /li
P.S. скобки убрал...
Константин Ерохов
23.12.2013 16:48Здесь можно посмотреть на код. andrey. krylo. ua - (убрать пробелы)
Viktor Matushevskyi
23.12.2013 17:441) воспользуйтесь pastebin для показа кода
2) у вас span теги там и там есть, вам что нужно? убрать в родительских span или дочерних?
Viktor Matushevskyi
23.12.2013 17:46тут вы явно какое-то ноу-хау использовали http://andrey.krylo.ua/assets/components/templates/light.andkrylo/index.html
Константин Ерохов
23.12.2013 20:031)Мда.. бывает.. )
2) Мне не нужно убирать, а наоборот - чтобы были. И не везде они есть:
Главная - здесь нет
Обо мне - здесь тоже нет
Услуги-Анкетирование -- а вот тут появляются, как и должно быть.
Viktor Matushevskyi
23.12.2013 20:07rowTpl назначьте
Константин Ерохов
23.12.2013 20:22Получилось. Спасибо!
Виталий
29.12.2013 09:53Здравствуйте!
Есть 2 меню на сайте: горизонтальное с подменю и вертикальное без подменю используя &hideSubMenus. Но на страницах ресурсов, которые имеют дочерние ресурсы (подменю), в вертикальном меню отображается с подменю. Как это можно исправить?
Заранее спасибо.
Руслан Юнусов
04.01.2014 22:06Часа 3 не мог понять почему не отображаются вновь созданные страницы.Оказывается в корневом каталоге файл ht.access надо было переименовать в .htaccess и всё)Такие заморочки встречаются что если и делать в дальнейшем другой сайт на модиксе то переносить готовую сборку со всеми правками и плагинами туда.Иначе на начальную настройку можно опять пару дней убить
Илья Буксиров
03.03.2014 09:33Подскажите, возможно использование wayfinder для графического меню?
Для каждого пункта меню соответствует своя картинка, которая и является ссылкой.
Меню в стиле плиток Windows 8
Viktor Matushevskyi
03.03.2014 13:59можно, но лучше использовать getResources
Илья Буксиров
04.03.2014 13:31Как с помощью getResources организовать меню в стиле Metro, имея шаблон в блочной верстке.
В шаблоне, каждая плитка имеет следующие свойства:
размер (двойной, ординарный)
цвет
картинка
Может посоветуете другой сниппет для вывода меню.
Алексей Чернов
07.04.2014 17:11Здравствуйте. Возникла проблема, помогите решить пожалуйста. Установил modx revo 2.2.* на лакальную машину. Адрес сайта получился следующий http://localhost/modx/ после установил дружественные урлы, и модуль для формерования динамического меню. Переименовал .htaccess в нем ничего не правил. Сервер настроил согласна инструкциям. mod_rewrite включил. Ошибка возникла следующая. При клике на любой пунк меню выводиться страница 404 ошибки. Мои подозрения на то, что нужно все же настроить что-то в .htaccess и еще одно подозрение с base_url. Подскажите пожалуйста в кокую сторону рыть.
Алексей Чернов
08.04.2014 08:01Решение было найдено. В .htaccess нужно было прописать rewritebase /site_name/.
Линар
03.05.2014 15:48Добрый день всем.
Сделал всё по инструкции, но почему то работает не как положено, всё что есть в ресурсах были расписаны на половину страницы что бы стало как прежде пришлось изменить &startId=`1`
&level=`1` .
Хотел просто сделать подпункт меню, вот сайт perfettopizza . ru помогите решить проблему плиз
Андрей Ананьев
10.05.2014 01:47Ох! Уже несколько дней воюю, никак не получается чтобы полное меню отображалось. только пункт "home" и все. да и тут &startId красным цветом подсвечен. я перепробовал все что тут предлагалось.
Владимир Алехин
11.07.2014 14:39Ребят, подскажите пожалуйста. Вывод меню через Wayfinder
меню: Главная, Новости, Еще_какое_то_меню, Личный кабинет, Авторизация
Как спрятать от авторизованных пункт меню Авторизация, а неавторизованым спрятать пункт Личный кабинет?
Данияр Фаррахов
13.07.2014 11:17Добрый день все сделал согласно вашей статье но почему то выпадающие списки прозрачные а у вас в статье все нормально ? Не подскажите где искать проблему .
Julia Romanovskaya
16.09.2014 21:26Подскажите, как сделать, чтобы верхние пункт меню были ссылками, если ничего не содержат
Julia Romanovskaya
16.09.2014 21:39И может кто знает- версия 2.2.9 пишу
, но меню не вовыдиться
Антон Щёлкин
26.09.2014 12:56Добрый день. Вот какой вопрос возник на стадии назначения своих пунктов меню вместо тех, которые были в шаблоне (для проверки работы Wayfinder'а). Я создал несколько пунктов, аналогичных приведенным в статье. Но при просмотре превью сайта, если кликнуть на любой из пунктов (за исключением Home), выводится страница с текстом "Object not found" и ошибка 404. Т.е., при кликании по ссылкам меню не отображаются соответствующие страницы. В чем может быть проблема? При этом сами ссылки в коде, сгенерированном Wayfinder (href'ы) имеют вид, отличный от того, который представлен в статье. Например, для страницы About генерируется код "index/about/", для страницы MODx CMS генерируется код "about/modx-cms.html", для страницы Contacts генерируется код "contacts.html", но самих этих страниц нет. Это происходит из-за использования транслита?
Viktor Matushevskyi
26.09.2014 22:19Нет, это не из-за транслита
Антон Щёлкин
02.10.2014 20:34Может быть, это просто потому что у меня нет этих страничек? Но в статье про создание страниц вроде ничего не сказано...
Антон Щёлкин
02.10.2014 22:14Отчасти разобрался в чем проблема, но пока не знаю как ее решить...Проблема заключается в том, что в теге почему-то генерируется не верный код. Вместо http://127.0.0.1/Work/public_html/MODXRev/assets/templates/7in1 генерируется http://127.0.0.1/Work/public_html/MODXRev/. Поэтому и Wayfinder не правильно отрабатывает. Подскажите, пожалуйста, как это можно исправить.
Антон Щёлкин
10.10.2014 21:37...Вроде как дошел до корня проблемы, но не знаю как ее исправить. Все страницы нормально открываются, если отключить в настройках чпу и не открываются, когда настройки включены. Подскажите, пожалуйста, в чем тут может быть дело.
Viktor Matushevskyi
11.10.2014 11:46Переименуйте ht.access v .htaccess
Антон Щёлкин
11.10.2014 16:14Фалй переименован. ЧПУ настроены. Все вроде бы на своих местах, но с включенными чпу страницы не открываются - выдается ошибка "Object not found. Error 404." Может быть дело в xampp'e? Я использую эту сборку.
Антон Щёлкин
11.10.2014 17:51...Причем, если отключить в MODX настройки, связанные с чпу, страницы открываются нормально..Из-за чего такое может быть и как это исправить?
Julia Romanovskaya
11.10.2014 15:26MODX 2 2.7 . Вложенность меню три уровня
При вызове второго меню в шаблоне через несколько дней выдает ошибку. До этого работала целый месяц, а потом все полетело..
[error] PHP Warning: ksort() expects parameter 1 to be array, integer given in .../public_html/core/components/wayfinder/wayfinder.class.php on line 121
[error] PHP Warning: Invalid argument supplied for foreach() in .../public_html/core/components/wayfinder/wayfinder.class.php on line 190
Советуют обновить MODX или pdoMenu поставить вместе Wayfinder'а.
Может кто-то встречался с этой проблемой?