Меню:(

Модератор
#
Re: Меню:(
У Вас там много <li>, а условие добавлено было только для первого. Я <li> вынес за все условия и под ним сразу добавлена проверка на последний.

<?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">
      <ul>
         <xsl:apply-templates select="structure[show=1]" />
      </ul>
   </xsl:template>
   <xsl:template match="structure">
      <xsl:param name="posit" select="1" />
      <xsl:variable name="current_structure_id"
         select="/document/structure/current_structure_id" />
      <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>
         <li>
            <xsl:if test="position() = last()">
               <xsl:attribute name="class">last</xsl:attribute>
            </xsl:if>
            <xsl:choose>
               <xsl:when test="level=0">
                  <xsl:choose>
                     <xsl:when test="count(structure[show=1]) > 0">
                        <xsl:if test="position() = 1">
                           <a href="{$link}" title="Перейти в раздел" id="menu{position()}"
                              onmouseover="menushow('{position()}');" onmouseout="menuhide('{position()}');">
                              <span class="part"></span>
                              <xsl:value-of select="name" />
                           </a>
                           <br />
                           <ul id="smenu{position()}" onmouseover="menushow('{position()}');"
                              onmouseout="menuhide('{position()}');">
                              <xsl:variable name="posit_var" select="position()" />
                              <xsl:apply-templates select="structure[show=1]">
                                 <xsl:with-param name="posit" select="$posit_var" />
                              </xsl:apply-templates>
                           </ul>
                        </xsl:if>
                        <xsl:if test="position() = last()">
                           <a href="{$link}" title="Перейти в раздел" id="menu{position()}"
                              onmouseover="menushow('{position()}');" onmouseout="menuhide('{position()}');">
                              <span class="part"></span>
                              <xsl:value-of select="name" />
                           </a>
                           <br />
                           <ul id="smenu{position()}" onmouseover="menushow('{position()}');"
                              onmouseout="menuhide('{position()}');">
                              <xsl:variable name="posit_var" select="position()" />
                              <xsl:apply-templates select="structure[show=1]">
                                 <xsl:with-param name="posit" select="$posit_var" />
                              </xsl:apply-templates>
                           </ul>
                        </xsl:if>
                        <a href="{$link}" title="Перейти в раздел" id="menu{position()}"
                           onmouseover="menushow('{position()}');" onmouseout="menuhide('{position()}');">
                           <xsl:value-of select="name" />
                        </a>
                        <br />
                        <ul id="smenu{position()}" onmouseover="menushow('{position()}');"
                           onmouseout="menuhide('{position()}');">
                           <xsl:variable name="posit_var" select="position()" />
                           <xsl:apply-templates select="structure[show=1]">
                              <xsl:with-param name="posit" select="$posit_var" />
                           </xsl:apply-templates>
                        </ul>
                     </xsl:when>
                     <xsl:otherwise>
                        <a href="{$link}" title="Перейти в раздел">
                           <xsl:value-of select="name" />
                        </a>
                     </xsl:otherwise>
                  </xsl:choose>
               </xsl:when>
               <xsl:otherwise>
                  <a href="{$link}">
                     <xsl:value-of select="name" />
                  </a>
               </xsl:otherwise>
            </xsl:choose>
            </li>
      </xsl:if>
   </xsl:template>
</xsl:stylesheet>
#
Re: Меню:(
Вы меня не совсем правильно поняли сейчас каждому последнему пункту в выпадающем меню задается <li class="last">
а мне необходимо что бы <li class="last"> выдавал для последнего элемента в горизонтальном меню..
Модератор
#
Re: Меню:(
Dr_Veter,
тогда по другому стройте логику, не один template, а несколько, при этом используйте mode (тема совсем недавно была от Varkolak-а)

В данной логике не будет работать, т.к. выбирается вся ось, и последний элемент - он  реально последний, а не тот, что проверяется в choose
#
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="no" method="html" omit-xml-declaration="no" version="1.0" media-type="text/xml" />

<xsl:template match="/document">
<ul>
      <xsl:apply-templates select="structure[show=1]"/>
</ul>
</xsl:template>

<xsl:template match="structure">

<xsl:param name="posit" select="1" />


<xsl:variable name="current_structure_id" select="/document/structure/current_structure_id"/>
<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>
        
   <xsl:choose>
      <xsl:when test="level=0">
         <xsl:choose>
            <xsl:when test="count(structure[show=1]) > 0">
              <li>
<xsl:if test="position() = last()">
<xsl:attribute name="class">last</xsl:attribute>
</xsl:if>
<xsl:choose>
<xsl:when test="position() = 1">
<a href="{$link}" title="Перейти в раздел" id="menu{position()}" onmouseover="menushow('{position()}');" onmouseout="menuhide('{position()}');"><span class="part"></span><xsl:value-of select="name"/></a><br />          
            <ul id="smenu{position()}" onmouseover="menushow('{position()}');" onmouseout="menuhide('{position()}');">
                    <xsl:variable name="posit_var" select="position()"/>
                    <xsl:apply-templates select="structure[show=1]">
                    <xsl:with-param name="posit" select="$posit_var"/>
                    </xsl:apply-templates>
                </ul>
</xsl:when>
<xsl:when test="position() = last()">
<a href="{$link}" title="Перейти в раздел" id="menu{position()}" onmouseover="menushow('{position()}');" onmouseout="menuhide('{position()}');"><span class="part"></span><xsl:value-of select="name"/></a><br />          
            <ul id="smenu{position()}" onmouseover="menushow('{position()}');" onmouseout="menuhide('{position()}');">
                    <xsl:variable name="posit_var" select="position()"/>
                    <xsl:apply-templates select="structure[show=1]">
                    <xsl:with-param name="posit" select="$posit_var"/>
                    </xsl:apply-templates>
                </ul>
</xsl:when>
<xsl:otherwise>
<a href="{$link}" title="Перейти в раздел" id="menu{position()}" onmouseover="menushow('{position()}');" onmouseout="menuhide('{position()}');"><xsl:value-of select="name"/></a><br />          
            <ul id="smenu{position()}" onmouseover="menushow('{position()}');" onmouseout="menuhide('{position()}');">
                    <xsl:variable name="posit_var" select="position()"/>
                    <xsl:apply-templates select="structure[show=1]">
                    <xsl:with-param name="posit" select="$posit_var"/>
                    </xsl:apply-templates>
                </ul>
</xsl:otherwise>
</xsl:choose>
         </li>            
            </xsl:when>
            <xsl:otherwise>
                <li>
               <a href="{$link}" title="Перейти в раздел"><xsl:value-of select="name"/></a>
            </li>            
            </xsl:otherwise>            
         </xsl:choose>    
</xsl:when>
      <xsl:otherwise>
         <li><a href="{$link}"><xsl:value-of select="name"/></a></li>
      </xsl:otherwise>
   </xsl:choose>
  
</xsl:if>
</xsl:template>
</xsl:stylesheet>



но у меня еще один вопросик появился, как мне теперь выяснить в xsl в каком из основных пунктов меню я сейчас нахожусь так как в зависимости от активности мне необходимо менять стили
Модератор
#
Re: Меню:(
Dr_Veter писал(а):
но у меня еще один вопросик появился, как мне теперь выяснить в xsl в каком из основных пунктов меню я сейчас нахожусь так как в зависимости от активности мне необходимо менять стили

Поясните, в зависимости от активности или в зависимости от того, где находитесь?

Активность можно проверить следующим образом:
<!-- Определяем стиль вывода ссылки -->
            <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>
#
Re: Меню:(
В зависимости от того в каком пункте находишься
Модератор
#
Re: Меню:(
Dr_Veter,
Поясните, пожалуйста. Мне не понятно, что подразумевается по "В зависимости от того в каком пункте находишься".
Имеется ввиду номер пункта, уровень вложенности или что?
#
Re: Меню:(
Вот смотри те есть например меню:

Компания
   -Компания1
   -Компания2
   -Компания3
Образование
   -Образование1
   -Образование2
   -Образование3
Контакты
   -Контакты1
   -Контакты2
   -Контакты3

Так вот, если на ходимся например в любом пункте меню
Контакты
   -Контакты1
   -Контакты2
   -Контакты3

То для плашки Контакты мне надо свой класс подгрузить....
#
Re: Меню:(
Может кто нибудь поможет?
Авторизация