Хочу изменить меню

#
Хочу изменить меню
Добрый день, подскажите пожалуйста как я могу изменить менюшку?
мне бы хотелось чтобы она отображалась не как в стандартно предложеном виде:
пункт1
пункт2
пункт3
пункт4
пункт5

вот как бы ее сделать такой?
пункт1
пункт2
  подпункт2,1
  подпункт2,2
  подпункт2,3
       подпункт2,3,1
       подпункт2,3,2
пункт3
пункт4
пункт5

главное, чтобы все мои подпункты выползали при активации меню пункта (ну вот в данном случае я выделил жирным)
Модератор
#
Re: Хочу изменить меню
HasH,
очень просто, шаблон центрального меню с небольшим дополнением:
<?xml version="1.0" encoding="windows-1251"?>
<!DOCTYPE xsl:stylesheet>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output xmlns="http://www.w3.org/TR/xhtml1/strict" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
encoding="Windows-1251" indent="yes" method="html" omit-xml-declaration="no" version="1.0" media-type="text/xml" />

<xsl:template match="/document">

<table border="0" width="100%" height="200" cellspacing="0" cellpadding="0" style="margin-left:4px; margin-right:4px;">
<tr>
   <td width="100%" class="menu_line"></td>
</tr>
   <!-- Выбираем узлы структуры -->
   <xsl:apply-templates select="structure[show=1]"/>
</table>

</xsl:template>

<xsl:template match="structure">
   
   <!-- Запишем в константу ID структуры, данные для которой будут выводиться пользователю -->
   <xsl:variable name="current_structure_id" select="/document/structure/current_structure_id"/>
   
   <tr>
   <td width="100%">
   
   <!-- Расчитываем размер отступа -->
   <xsl:variable name="padding" select="level * 10"/>
   
   <div style="padding-left: {$padding}px;">
   
   <img border="0" src="/images/menu_point.gif" class="menu_point" width="4" height="7" />
   
      <!-- Показывать ссылку, или нет -->
      <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="current_structure_id=@id or count(.//structure[@id=$current_structure_id])=1">font-weight: bold</xsl:when>
         <!-- Иначе обычный вывод с пустым стилем -->
         <xsl:otherwise></xsl:otherwise>
         </xsl:choose></xsl:variable>

         <a href="{$link}"><span style="{$link_style}"><xsl:value-of disable-output-escaping="yes" select="name"/></span></a>
      </xsl:if>

      <!-- Если не показывать ссылку - выводим просто имя ссылки -->
      <xsl:if test="show_link=0">
         <xsl:value-of disable-output-escaping="yes" select="name"/>
      </xsl:if>
   </div>

   </td>
   </tr>
   <tr>
   <td width="100%" class="menu_line"></td>
   </tr>

<!-- Подпункты выводим для текущего узла и его подпунктов -->
<xsl:if test="@id = $current_structure_id or count(.//structure[@id=$current_structure_id])=1">
<xsl:apply-templates select="structure[show=1]"/>
</xsl:if>

</xsl:template>
</xsl:stylesheet>


само дополнение:
<!-- Подпункты выводим для текущего узла и его подпунктов -->
<xsl:if test="@id = $current_structure_id or count(.//structure[@id=$current_structure_id])=1">
<xsl:apply-templates select="structure[show=1]"/>
</xsl:if>
#
Re: Хочу изменить меню
Спасибо, все отлично работает
Модератор
#
Re: Хочу изменить меню
HasH,
пожалуйста
#
Re: Хочу изменить меню
Вот тоже решил поставить "такую меню".
Поставил дополнение
В "структуре сайта" указываю родительский раздел, согласно
пункт1
пункт2
  подпункт2,1
  подпункт2,2
  подпункт2,3
       подпункт2,3,1
       подпункт2,3,2
пункт3
пункт4
пункт5

И ничего.....
(меню без изменения)

Вопрос, а где задается это иерархия???
#
Re: Хочу изменить меню
тоже хотела попробовать такую менюшку. не работает. Отчего это может быть?
Модератор
#
Re: Хочу изменить меню
Вкусная витаминка,
не зная ошибки нельзя сказать. сделайте запрос в службу поддержки
#
Re: Хочу изменить меню
Тоже вот захотелось такое меню, По вашему методу не пошло, Пришлось искать и Нашел
Дополнение нужно вставлять после

<?xml version="1.0" encoding="windows-1251"?>
<!DOCTYPE xsl:stylesheet>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output xmlns="http://www.w3.org/TR/xhtml1/strict" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
encoding="Windows-1251" indent="yes" method="html" omit-xml-declaration="no" version="1.0" media-type="text/xml" />

<xsl:template match="/document">

<table border="0" width="100%" height="200" cellspacing="0" cellpadding="0" style="margin-left:4px; margin-right:4px;">
<tr>
   <td width="100%" class="menu_line"></td>
</tr>
   <!-- Выбираем узлы структуры -->
   <xsl:apply-templates select="structure[show=1]"/>
</table>

</xsl:template>

<xsl:template match="structure">
   
   <!-- Запишем в константу ID структуры, данные для которой будут выводиться пользователю -->
   <xsl:variable name="current_structure_id" select="/document/structure/current_structure_id"/>

   <!-- Подпункты выводим для текущего узла и его подпунктов -->
<xsl:if test="@id = $current_structure_id or count(.//structure[@id=$current_structure_id])=1">
<xsl:apply-templates select="structure[show=1]"/>
</xsl:if>
<!-- Подпункты выводим для текущего узла и его подпунктов -->
<xsl:if test="@id = $current_structure_id or count(.//structure[@id=$current_structure_id])=1">
<xsl:apply-templates select="structure[show=1]"/>
</xsl:if>
Василий Сергеевич Бархатов
Авторизация