Для начала пришлось разобраться с принципами создания шаблонов, проанализировать работу дефолтного шаблона, понять что такое сниппеты, чанки и прочие премудрости :)
В дефолтном шаблоне увидел что меню реализовано с помощью сниппета wayfinder. Далее дело техники, как говорится гугл в помощь )
Выяснилось следующее - интеграция меню происходит посредством нескольких действий:
- Вызов сниппета в шаблоне страницы, выглядит это примерно так:
[[Wayfinder?startId=`0` &outerTpl=`mam.OuterTpl`&rowTpl=`mam.RowTpl` &firstClass=`` &hereClass=`-hover`]]2. В случае одноуровневого меню нам необходимо настроить 2 шаблона в виде чанка, первый &outerTpl это шаблон контейнера меню
<div class="menuH">&rowTpl - шаблон пунктов меню верхнего уровня, может выглядеть таким образом:
[+wf.wrapper+]
</div>
<div class="img"><a href="[+wf.link+]"><img src="images/button-1.png" alt="[+wf.linktext+]" title="[+wf.linktext+]" height="24" /></a></div>но тут возникает трудность, т.к. в моем случае каждый пункт меню имеет свою уникальную иконку и картинки соответственно имена в виде button-1.png, button-1-hover.png, button-2.png, button-2-hover.png, есть специальный подстановщик [+wf.docid+], который подставляет id документа, но проблема в том что структура создавалась не последовательно и id разделов не совпали с индексами картинок. На странице редактирования есть поле Позиция в меню, в котором указывается id для сортировки вывода разделов в меню. Попробовал в лоб написать src="images/button-[+wf.menuindex+][+wf.classnames+].png" не сработало :( т.к. оказалось нет такого подстановочного шаблона. Но не беда, нагуглил хак вайфиндера
в wayfinder.inc.php изменить: строку 21
var $placeHolders = array(и в 181 (renderRow function)
'rowLevel' => array('[+wf.wrapper+]','[+wf.classes+]','[+wf.classnames+]','[+wf.link+]','[+wf.title+]','[+wf.linktext+]','[+wf.id+]','[+wf.attributes+]','[+wf.docid+]','[+wf.introtext+]','[+wf.description+]','[+wf.subitemcount+]','[+wf.menuindex+]'),
'wrapperLevel' => array('[+wf.wrapper+]','[+wf.classes+]','[+wf.classnames+]'),
'tvs' => array(),
);
$phArray = array($useSub,$useClass,$classNames,$resource['link'],$resource['title'],$resource['linktext'],$useId,$resource['link_attributes'],$resource['id'],$resource['introtext'],$resource['description'],$numChildren,$resource['menuindex']);теперь все пучком и наше меню работает как надо
До встречи ;)
Отличный способ подставить иконки или картинки вместо каждого пункта меню, а то простой текст уже надоел... Сейчас растолкую что написал автор:
ОтветитьУдалить1.Открывaем assets\snippets\wayfinder\wayfinder.inc
2. Делаем пару обновлений (описано автором)
3. Содержимое Чанка mh.RowTpl заменяем на: [+wf.wrapper+]
замени ЛИ=li ИМГ=img
(но прежде удостоверьтесь что шаблон Wayfinder действительно использует этот чанк, для этого в шаблоне сайта должно быть написано [[Wayfinder?startId=`0` &rowTpl=`mh.RowTpl`...)
4. если все ОК, то картинки меню закачиваем в папку images, например: images/button-2.png
POWERED BY TRINITRON (ICQ:251939070)
Начиная с версии 2.0.2 шаблоны Wayfinder поддерживают также TV-параметры, что позволяет подключать иконки таким образом: img src="[+tvName+]"
ОтветитьУдалить