мне как то переделывали шаблон меню на сайте
теперь требуется его немного изменить чтоб показывались не только первый уровень в меню, но и второй тоже всегда был "открыт" (а не только когда выбираешь пункт в котором есть подменю, как здесь: )
Тк языка XSL не знаю, то прошу помощи у знающих
<!-- Выбираем узлы структуры -->
<xsl:apply-templates select="structure[show=1]"/>
</xsl:template>
<xsl:template match="structure">
<xsl:param name="light_this" />
<!-- Запишем в константу ID структуры, данные для которой будут выводиться пользователю -->
<xsl:variable name="current_structure_id" select="/document/structure/current_structure_id"/>
<!-- Шаблон для корневых элементов -->
<xsl:if test="level=0">
<tr>
<td width="221" height="40">
<!-- Показывать ссылку, или нет -->
<xsl:if test="show_link=1">
<!-- Определяем адрес ссылки -->
<xsl:variable name="link"><xsl:choose>
<!-- Если внешняя ссылка -->
<xsl:when test="is_external_link=1"><xsl:value-of disable-output-escaping="yes" select="external_link"/></xsl:when>
<!-- Иначе если внутренняя ссылка -->
<xsl:otherwise><xsl:value-of disable-output-escaping="yes" select="link"/></xsl:otherwise>
</xsl:choose></xsl:variable>
<!-- Если не показывать ссылку - выводим просто имя ссылки -->
<xsl:if test="show_link=0">
<xsl:value-of disable-output-escaping="yes" select="name"/>
</xsl:if>
</td>
</tr>
<!-- Определяем, нужно ли нам выводить дочернее меню для текущей структуры -->
<xsl:variable name="echo_submenu">
<xsl:for-each select="structure">
<!-- Для 1-го уровня подменю -->
<xsl:if test="($current_structure_id=@id) or (count(.//structure[@id=$current_structure_id])=1)">
<xsl:value-of disable-output-escaping="yes" select="@id"/>
</xsl:if>
</xsl:for-each>
</xsl:variable>
<!-- Вызываем шаблоны для дочерних элементов нашей структуры с картинкой -->
<xsl:if test="(($echo_submenu!='') or ($current_structure_id=@id)) and (structure/name!='')">
<tr>
<td width="221" background="/images/vip_menu00.gif">
<table>
<tr>
<td width="20"><img src="/images/vip_trans_1x1.gif" width="20"/></td>
<td width="191" align="left">
<xsl:apply-templates select="structure[show=1]">
<xsl:with-param name="light_this" select="$echo_submenu" />
</xsl:apply-templates>
<br/><br/></td>
<td width="10"><img src="/images/vip_trans_1x1.gif" width="10"/></td>
</tr>
</table>
</td>
</tr>
</xsl:if>
</xsl:if>
<!-- Шаблон для для дочерних элементов -->
<xsl:if test="level=1">
<li class="menu">
<!-- Определим стиль вывода ссылки -->
<!-- Показывать ссылку, или нет -->
<xsl:if test="show_link=1">
<!-- Определяем адрес ссылки -->
<xsl:variable name="link"><xsl:choose>
<!-- Если внешняя ссылка -->
<xsl:when test="is_external_link=1"><xsl:value-of disable-output-escaping="yes" select="external_link"/></xsl:when>
<!-- Иначе если внутренняя ссылка -->
<xsl:otherwise><xsl:value-of disable-output-escaping="yes" select="link"/></xsl:otherwise>
</xsl:choose></xsl:variable>
<!-- Определяем стиль вывода ссылки -->
<xsl:variable name="link_style"><xsl:choose>
<!-- Выделяем текущую страницу жирным (если это текущая страница, либо у нее есть ребенок с ID, равным текущей) -->
<xsl:when test="number($light_this)=number(@id)">menu_raz</xsl:when>
<!-- Иначе обычный вывод с пустым стилем -->
<xsl:otherwise>menu</xsl:otherwise>
</xsl:choose></xsl:variable>
<!-- Если не показывать ссылку - выводим просто имя ссылки -->
<xsl:if test="show_link=0">
<xsl:value-of disable-output-escaping="yes" select="name"/>
</xsl:if>
как еще сделвать чтоб второй уровень выводить?
0 уровень
*1уровень
-2уровень
-2уровень
*1уровень
-2уровень
-2уровень
0уровень
*уровень
-2уровень
-2уровень
<xsl:if test="level=1">
заменяем на
<xsl:if test="level=1 or level=2">
2. в самом конце:
<!-- Если не показывать ссылку - выводим просто имя ссылки -->
<xsl:if test="show_link=0">
<xsl:value-of disable-output-escaping="yes" select="name"/>
</xsl:if>
ПРЕДУПРЕЖЕДЕНИЕ: XSLTProcessor::transformToDoc() [function.XSLTProcessor-transformToDoc]: runtime error: file /home/v/vippetru/public_html/ line 124 element apply-templates в файле /home/v/vippetru/public_html/modules/Xsl/Xsl.class.php (строка 200)
ПРЕДУПРЕЖЕДЕНИЕ: XSLTProcessor::transformToDoc() [function.XSLTProcessor-transformToDoc]: Variable 'echo_submenu' has not been declared. в файле /home/v/vippetru/public_html/modules/Xsl/Xsl.class.php (строка 200)
ПРЕДУПРЕЖЕДЕНИЕ: XSLTProcessor::transformToDoc() [function.XSLTProcessor-transformToDoc]: xmlXPathCompiledEval: evaluation failed в файле /home/v/vippetru/public_html/modules/Xsl/Xsl.class.php (строка 200)
ПРЕДУПРЕЖЕДЕНИЕ: XSLTProcessor::transformToDoc() [function.XSLTProcessor-transformToDoc]: runtime error: file /home/v/vippetru/public_html/ line 125 element with-param в файле /home/v/vippetru/public_html/modules/Xsl/Xsl.class.php (строка 200)
ПРЕДУПРЕЖЕДЕНИЕ: XSLTProcessor::transformToDoc() [function.XSLTProcessor-transformToDoc]: Failed to evaluate the expression of variable 'light_this'. в файле /home/v/vippetru/public_html/modules/Xsl/Xsl.class.php (строка 200)
теперь заработало, но это немного не так как мне надо
1-ый и 2-ой уровень получается на одном уровне в меню выводится:
0 уровень
*1уровень
*2уровень
а мне надо на подуровне:
0 уровень
**1уровень
----2уровень