Сегодня я буду рассказывать, как вывести многоуровневое меню средствами usel протокола на примере и tpl, и xslt шаблонизатора.
Как вывести меню, используя usel протокол, вы можете почитать на wiki.umisoft в статье Меню с помощью Usel (для tpl-шаблонизатора)
Видеокаст прикреплен снизу.
Вся задумка состоит в том, чтобы обращаться через usel протокол только к одному уровню и, при выводе каждого найденного пункта, пытаться вывести через usel протокол подпункты. Поэтому мы создаем, также как и в статье на wiki, новое поле типа "кнопка-галочка" с именем "Новое меню" (вы можете назвать поле как угодно, главное, правильно написать латинский вариант в usel файле, см.ниже). Затем отмечаем некоторые страницы этой галочкой, создаем файл usel выборки и файлы вывода результата.
А теперь по пунктам с приведенным кодом.
<?xml version="1.0" encoding="utf-8"?> <selection> <target result="pages"> <type id="10" /> <category depth="1">{1}</category> </target> <property name="novoe_menyu" value="1" /> </selection>
<?php $FORMS = Array(); $FORMS['elements_block'] = <<<END <ul> %items% </ul> END; $FORMS['elements_block_line'] = <<<END <li><a href="%link%">%name%</a> %data doSelection(new_m,new_menu, 14 )% </li> END; $FORMS['elements_block_empty'] = <<<END END; $FORMS['separator'] = <<<END | END; $FORMS['separator_last'] = <<<END ! END; ?>
<xsl:template match="udata" mode="new_menu" /> <xsl:template match="udata[page]" mode="new_menu"> <ul> <xsl:apply-templates select="page" mode="new_menu" /> </ul> </xsl:template> <xsl:template match="page" mode="new_menu"> <li><a href="{@link}"><xsl:value-of select="name" /></a> <xsl:apply-templates select="document(concat('usel://new_menu/',@id))/udata" mode="new_menu" /> </li> </xsl:template>
<xsl:apply-templates select="document('usel://new_menu/0')/udata" mode="new_menu" />
%data doSelection(new_m,new_menu,0)%