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

#
Re: Реализация выпадающего меню на базе структуры сайта с помощью xsl-шаблона
natalya писал(а):
<?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>
это шаблон по которуму я делал но он выдает результат в пределах таблицы

вот как я его вставляю
<table id="header" width="999"  background="/images/index_03_1.jpg" height="40"  border="0" cellpadding="0" cellspacing="0" align="center">
   <tr>      
    <td width="4"><img src="/images/index_03_start.jpg" alt=""></td>
    <td height="40" width="100%"><?
$Structure = new Structure(); // Экземпляр класса Structure
$Structure->ShowStructure(0,'ВыпадающееМеню');
?></td>
<td ><img src="/images/index_03_3.jpg" width="207" height="40" alt=""></td>
    <td width="4"><img src="/images/index_03_end.jpg"  height="40" alt=""></td>
   </tr>
   </table>

получается что таблицу он расдвигает по своим размерам ссылку на сайт дать не могу он у меня локально
«И мне дороже боль и тлен, и редкий, горький миг блаженства, чем бесконечный рабский плен дарованого совершенства!» С. Лукьяненко «Чистовик».
Модератор
#
Re: Реализация выпадающего меню на базе структуры сайта с помощью xsl-шаблона
Очень пытался понять, что Вы написали, но не смог. Постарайтесь сформулировать вопрос так, чтобы читающему стала ясна его суть.
#
Re: Реализация выпадающего меню на базе структуры сайта с помощью xsl-шаблона
Меню выпадает неповерх элементов, а внутри элемента в который  его вставляю. Как это исправить?
«И мне дороже боль и тлен, и редкий, горький миг блаженства, чем бесконечный рабский плен дарованого совершенства!» С. Лукьяненко «Чистовик».
#
Re: Реализация выпадающего меню на базе структуры сайта с помощью 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">
         <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"><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; position: absolute" id="id_{@id}">
                           
                           <table border="0" cellpadding="0" cellspacing="0" background="/images/index_3_01.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>
                              
                           </table>
                        </div>
                     </td>
                     
                  </xsl:when>
                  <xsl:otherwise>
                     <td valign="top" align="center">
                        
                        <a href="{$link}" class="menu"><xsl:value-of select="name"/></a>
                        
                     </td>
                  </xsl:otherwise>
               </xsl:choose>
               
               
            </xsl:when>
            <xsl:otherwise>
               
               
               
               <td valign="top" ><a href="{$link}" class="menu"><xsl:value-of select="name"/></a>
               </td>
               
               
            </xsl:otherwise>
         </xsl:choose>
         
      </xsl:if>
   </xsl:template>
</xsl:stylesheet>


Вот его реализацияtest.7000000.ru как исправить чтоб меню так не прыгало и почему у меня не подставляется картинка? помоги плизз уже парюсь не одну неделю
«И мне дороже боль и тлен, и редкий, горький миг блаженства, чем бесконечный рабский плен дарованого совершенства!» С. Лукьяненко «Чистовик».
#
Re: Реализация выпадающего меню на базе структуры сайта с помощью xsl-шаблона
Ох, ksusha, ну кто же вас так меню делать научил?
Таблицы с вложенными блоками, в которых вложены еще таблицы с вложенными блоками, в которых...
А ведь проблема решается с помощью наборов <ul> - <li>, css и небольшого количества javascript для любого уровня вложенности меню!
И XSL-шаблон там получается совсем простой

Если хотите - могу вам помочь сделать нормальную менюшку.
Аська 103-три-девять-шесть-301
Заказов не беру. Консультирую редко.
#
Re: Реализация выпадающего меню на базе структуры сайта с помощью 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="yes" method="html" omit-xml-declaration="no" version="1.0" media-type="text/xml"/>
   
   <xsl:template match="/document">
      <ul class="top_menu gray_link">
         <!-- Выбираем узлы структуры первого уровня -->
         <xsl:apply-templates select="structure[show=1]"/>
      </ul>
   </xsl:template>
   
   <xsl:template match="structure">
      
      <!-- Запишем в константу ID структуры, данные для которой будут выводиться пользователю -->
      <xsl:variable name="current_structure_id" select="/document/structure/current_structure_id"/>
      
      <li>
         <!--
         Выделяем текущую страницу добавлением к li класса red_li,
         если это текущая страница, либо у нее есть ребенок с атрибутом id, равным текущей uheggt.
         -->
         <xsl:if test="current_structure_id = @id or count(.//structure[@id=$current_structure_id]) = 1">
            <xsl:attribute name="class">red_li</xsl:attribute>
         </xsl:if>
         
         <div>
            <div>
               <!-- Показывать ссылку, или нет -->
               <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>
                     <!-- Ссылка на пункт меню -->
                     <a href="{$link}" title="{name}"><xsl:value-of disable-output-escaping="yes" select="name"/></a>
                  </xsl:when>
                  <!-- Если не показывать ссылку - выводим просто имя ссылки -->
                  <xsl:otherwise>
                     <xsl:value-of disable-output-escaping="yes" select="name"/>
                  </xsl:otherwise>
               </xsl:choose>
            </div>
         </div>
      </li>
   </xsl:template>
</xsl:stylesheet>


в макете прописаны
   <script type="text/javascript" src="/templates/template1/hostcms.js"></script>
   <script type="text/javascript" src="/hostcmsfiles/ajax/JsHttpRequest.js"></script>
   <script type="text/javascript" src="/hostcmsfiles/ajax/ajax.js"></script>
   <script type="text/javascript" src="/hostcmsfiles/main.js"></script>

все файлы .js обновил с демо сайта...
#
Re: Реализация выпадающего меню на базе структуры сайта с помощью xsl-шаблона
подскажите пожалуйста, где ошибка. http://tehnopolic.ru/ верхнее меню делаю, как и описано. С помощью способа Натальи. Но при наведении мышки меню появляется, а когда опускаешь мышь меню исчезает. Уже сам экспериментировал, менял значения и ничего не помогает(

PS: Пробовал на только созданном сайте, тоже не работает.
PS2: Может с CSS где то пересекается?
#
Re: Реализация выпадающего меню на базе структуры сайта с помощью xsl-шаблона
Здравствуйте.
Подскажите как организовать выпадающее меню подобное на вашем сайте. Можно привести xsl шаблон. Испульзую приведенный метод на 1 странице и таже проблема, при наведении мышки меню появляется, а когда опускаешь мышь меню исчезает.
Только осваиваю систему, просьба не пинать ).
#
Re: Реализация выпадающего меню на базе структуры сайта с помощью xsl-шаблона
Спасибо уже нашел на форуме xsl файл "ВерхнееМеню" для выпадающего меню.
В demo версии упрощенный вариант без выпадающего меню.
#
Re: Реализация выпадающего меню на базе структуры сайта с помощью xsl-шаблона
>Спасибо уже нашел на форуме xsl файл «ВерхнееМеню» для выпадающего меню.

Подскажи, пожалуйста ссылку
Авторизация