Реализация выпадающего меню на базе структуры сайта с помощью xsl-шаблона

#
Re: Реализация выпадающего меню на базе структуры сайта с помощью xsl-шаблона
adver2008, полный код XSL-шаблона приведите.
#
Re: Реализация выпадающего меню на базе структуры сайта с помощью xsl-шаблона
Реализовал выпадающее меню на основе инструкций от модератора natalya, что в 1 сообщении данной темы, за что ей огромное спасибо! Но столкнулся с двумя проблемами:

1) фон меню почему-то выдается под меню, а не в качестве подложки;

2) в IE 7 подпункты меню появляются справа от наведенного пункта, а в Opera 9.50 - внизу, как и нужно - как привести все к единому решению?

Сайт: http://dkb-dv.ru , xsl и java полностью повторяют образец в первом сообщении.
#
Re: Реализация выпадающего меню на базе структуры сайта с помощью xsl-шаблона
dkbdv:
1. приведите код того, как устанавливаете цвет фона.

2. если вносили изменения в исходный XSL-шаблон, то приведите его код полностью.
Модератор
#
Re: Реализация выпадающего меню на базе структуры сайта с помощью xsl-шаблона
dkbdv,
Вопросы консультирования по JS и HTML не входят в задачи поддержки.
Посмотреть выпадающее меню можно на нашем демо-сайте: http://demo.hostcms.ru
#
Re: Реализация выпадающего меню на базе структуры сайта с помощью xsl-шаблона
natalya писал(а):
1. приведите код того, как устанавливаете цвет фона.


Фон устанавливал так (в коде):


<a href="{$link}" class="menu_center"><xsl:value-of select="name"/></a>
<div style="margin-top: 0px; display: none;" id="id_{@id}">
<table border="0" cellpadding="0" cellspacing="5" background="images/background.jpg">


Наверное, что-то у меня неправильно.

natalya писал(а):

2. если вносили изменения в исходный XSL-шаблон, то приведите его код полностью.


Полный текст шаблона привожу ниже:

<?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">
<table border="0" cellpadding="0" cellspacing="0" width="100%" style="margin-top: 2px; margin-left: 5px;">
   <tr>
      <xsl:apply-templates select="structure[show=1]"/>
   </tr>
</table>
</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">
              
              
               <td valign="top" OnMouseOver="JavaScript:SlideLayer('id_{@id}');" OnMouseOut="JavaScript:SlideLayerHide('id_{@id}');">
                  <a href="{$link}" class="menu_center"><xsl:value-of select="name"/></a>
                  
                  
                  <div style="margin-top: 0px; display: none;" id="id_{@id}">
                    
                       <table border="0" cellpadding="0" cellspacing="5" background="images/background.jpg">
              
                        <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>                  
                    
                     <tr>
                        <td height="4">
                        <div class="div_menu_bottom">
                        <div style="position: relative; background-color: #990000; z-index: 10; margin-right: 30px;" >
                                 <img scr="/images/spaser.gif" border="0" height="4" width="1"/>
                                 </div>
                     </div>
                        </td>
                        
                        </tr>
                     </table>
                  </div>                  
               </td>
              
                  
            </xsl:when>
            <xsl:otherwise>
               <td  valign="top" align="center">                  
                    
                        <a href="{$link}" class="menu_center"><xsl:value-of select="name"/></a>
                              
               </td>            
            </xsl:otherwise>            
         </xsl:choose>
      
      
      </xsl:when>
      <xsl:otherwise>
      <div align="left">
        
         <tr>
            
            <a href="{$link}" class="menu_link_no_bold"><xsl:value-of select="name"/></a>
            
         </tr>
      </div>  
      </xsl:otherwise>
   </xsl:choose>
  
</xsl:if>
</xsl:template>
</xsl:stylesheet>


HostCMS писал(а):
Вопросы консультирования по JS и HTML не входят в задачи поддержки.

Да я понимаю. Так, надеюсь на доброту душевную уважаемой Натальи На обязательный ответ и не претендую, если появится свободная минутка, прошу посмотреть только.

HostCMS писал(а):
Посмотреть выпадающее меню можно на нашем демо-сайте: http://demo.hostcms.ru

Такая реализация мне очень нравится, но из исходного кода прочитать не могу, где я ошибаюсь.
#
Re: Реализация выпадающего меню на базе структуры сайта с помощью xsl-шаблона
dkbdv, по поводу фона таблицы: при указании пути к изображению фона вместо background="images/background.jpg" используйте background="/images/background.jpg".
По поводу неверного отображения: в XSL-шаблон внесены небольшие изменения. Вот код:
<?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">
<table border="0" cellpadding="0" cellspacing="0" width="100%" style="margin-top: 2px; margin-left: 0px;">
   <tr>
      <xsl:apply-templates select="structure[show=1]"/>
   </tr>
</table>
</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">
              
              
               <td valign="top" OnMouseOver="JavaScript:SlideLayer('id_{@id}');" OnMouseOut="JavaScript:SlideLayerHide('id_{@id}');">

<div>                  
<a href="{$link}" class="menu_center"><xsl:value-of select="name"/></a>
</div>
                  
                  
                  <div style="display: none; z-index: 10; padding-right: 0; margin-top: 1px; margin-left: 0px; margin-right: 0px;" id="id_{@id}">
                    
                     <table border="0" cellpadding="0" cellspacing="0">
                  
                        <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>                  
                    
                     </table>
                  </div>                  
               </td>
              
                  
            </xsl:when>
            <xsl:otherwise>
               <td  valign="top" align="center">                  
                    
                        <a href="{$link}" class="menu_center"><xsl:value-of select="name"/></a>
                              
               </td>            
            </xsl:otherwise>            
         </xsl:choose>
      
      
      </xsl:when>
      <xsl:otherwise>
    
        
         <tr>
            
            <td><a href="{$link}" class="menu_link_no_bold"><xsl:value-of select="name"/></a>
</td>
            
         </tr>
    
      </xsl:otherwise>
   </xsl:choose>
  
</xsl:if>
</xsl:template>
</xsl:stylesheet>
#
Re: Реализация выпадающего меню на базе структуры сайта с помощью xsl-шаблона
Наталья, спасибо большое, все получилось просто отлично! Только с изменением кода появилась маленькая проблема - теперь меню надо "ловить", при наведении на подпукты меню скрывается. Сложно объяснить на словах, но на сайте (http://dkb-dv.ru) это видно наглядно.
#
Re: Реализация выпадающего меню на базе структуры сайта с помощью xsl-шаблона
Все, перестаю надоедать своими вопросами В итоге, переставили скрипт с 4.1 до 5 версии, там выпадающее меню уже отшлифовано "на ура". Еще раз огромное спасибо команде HostCMS за поддержку!
#
Re: Реализация выпадающего меню на базе структуры сайта с помощью xsl-шаблона
Сделал все как было сказано в первом примере....и получилось следующее:
У меня идет вертикальное статичное меню.
у пунктов меню есть динамические подпункты.
После добавления макета вместо подпунктов у меня просто дублируются главные пункты.....как xsl поправить надо?
#
Re: Реализация выпадающего меню на базе структуры сайта с помощью xsl-шаблона
Не могу реализовать выпадающее верхнее меню. Взят XSL шаблон ВерхнееМеню с демо сайта. Подуровни не отображаются. Помогите, пожалуйста!
Авторизация