Вставка разрыва между элементами меню

#
Вставка разрыва между элементами меню
Добрый день. Есть меню из 6 пунктов вида:

Главная   Пункт 1   Пункт 2   Пункт 3   Пункт 4   Пункт 5   Пункт 6


При нахождении на главной ее мы в меню не отображаем, при нахождении в разделе Пункт 1 его не отображаем и т.д. по аналогии.

Мне необходимо после 3-го пункта делать отступ, чтобы получалось нечто вида

Пункт 1   Пункт 2   Пункт 3                           Пункт 4   Пункт 5   Пункт 6
Главная   Пункт 2   Пункт 3                           Пункт 4   Пункт 5   Пункт 6
и т.д.


В структуре сайта нумерация проставлена.
если использовать position() = 3, то находясь в Пункте 3 отступа нет, т.к. он не отображается. Я так понял, что position() берет номер из структуры.

Чем можно заменить position()? Пробовал count() чтобы считать элементы, но так у меня и не получилось.

<?xml version="1.0" encoding="utf-8"?>
<!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="utf-8" indent="yes" method="html" omit-xml-declaration="no" version="1.0" media-type="text/xml"/>
   
   <xsl:template match="/document">
      <!-- Выбираем узлы структуры первого уровня -->
      <xsl:apply-templates select="structure[show=1]"/>
   </xsl:template>
   
   <xsl:template match="structure">
      <!-- Запишем в константу ID структуры, данные для которой будут выводиться пользователю -->
      <xsl:variable name="current_structure_id" select="/document/structure/current_structure_id"/>
      
      <!-- Показывать ссылку, или нет -->
      <xsl:choose>
         <xsl:when 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="current_structure_id = 1 and link != '/'">
               <span>
                  <img src="{propertys/property[@name='menu_icon']/small_image/property_file_path}" />
                  <!-- Ссылка на пункт меню -->
                  <a href="{$link}" title="{name}"><xsl:value-of disable-output-escaping="yes" select="name"/></a>
               </span>
            </xsl:if>
            <xsl:if test="current_structure_id != 1 and $current_structure_id != @id">
               <span>
<xsl:if test="position()=3">
<xsl:attribute name="style">margin-right: 170px</xsl:attribute>
</xsl:if>
                  <img src="{propertys/property[@name='menu_icon']/small_image/property_file_path}" />
                  <!-- Ссылка на пункт меню -->
                  <a href="{$link}" title="{name}"><xsl:value-of disable-output-escaping="yes" select="name"/></a>
               </span>
            </xsl:if>
            
         </xsl:when>
         <!-- Если не показывать ссылку - выводим просто имя ссылки -->
         <xsl:otherwise>
            <xsl:if test="current_structure_id = 1 and link != '/'">
               <span>
                  <img src="{propertys/property[@name='menu_icon']/small_image/property_file_path}" />
                  <xsl:value-of disable-output-escaping="yes" select="name"/>
               </span>
            </xsl:if>
            
            <xsl:if test="current_structure_id != 1 and $current_structure_id != @id">
               <span>

                  <img src="{propertys/property[@name='menu_icon']/small_image/property_file_path}" />
                  <xsl:value-of disable-output-escaping="yes" select="name"/>
               </span>
            </xsl:if>
         </xsl:otherwise>
      </xsl:choose>
   </xsl:template>
</xsl:stylesheet>
#
Re: Вставка разрыва между элементами меню
по сути интересует как посчитать кол-во отображаемых элементов меню.
position() срабатывает на номер, указанный в структуре сайта, не совсем подходит по описанным выше причинам.
#
Re: Вставка разрыва между элементами меню
onlinestudio писал(а):
Я так понял, что position() берет номер из структуры.

неверно,

position() отображает нумерацию вхождения в шаблон,

соотвественно, вам нужно переписать XSLT таким образом, чтобы неактивные пункты меню не показывались в вызове шаблона <xsl:template match="structure">
таким образом, position покажет правильный порядок входа

например

   <xsl:template match="/document">
<xsl:variable name="current_structure_id" select="/document/structure/current_structure_id"/>
      <!-- Выбираем узлы структуры первого уровня -->
      <xsl:apply-templates select="structure[show=1 and @id!=$current_structure_id]"/>
   </xsl:template>
разработка сайтов, фирменных стилей, интерфейсов
#
Re: Вставка разрыва между элементами меню
toasterec, БОЛЬШОЕ спасибо!!!
Авторизация