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

#
Re: Реализация выпадающего меню на базе структуры сайта с помощью xsl-шаблона
Puma писал(а):
как проверить срабатывает JS или нет?
- проверить можно с помощью такого расширения для браузера как Firebug для Mozilla Firefox.
Puma писал(а):
ну может кто подскажет в чем может быть проблема?
- на вашем сайте JavaScript для меню работает корректно. А причина проблемы в классе стилей art-menu, используемом у вас для тега ul. Если вы временно уберете указание этого класса для вашего меню, то оно в итоге отобразится вертикально, но при этом при наведении на его пункты "Производители" и "Котята" из них будут выпадать подпункты. Что конкретно там не так с этими стилями, мне неизвестно, но причина проблемы в любом случае не в системе управления.
#
Re: Реализация выпадающего меню на базе структуры сайта с помощью xsl-шаблона
Ребята, нужно сделать пункт подменю на сайте zvk-market.ru .  Нужно, чтобы при наведении на пункт меню, вниз вылазило подменю. Пример: http://www.barberstudio.ru/    ICQ  599-360-699   Дмитрий
Создание сайтов под ключ, обслуживание и продвижение, доработка функционала
#
Re: Реализация выпадающего меню на базе структуры сайта с помощью xsl-шаблона
ребята перечитал весь форум попробывал так и сяк но ничего не выходит...Нужно выподающее меню как на сайте у разработчика www.hostcms.ru что я делаю не так? Помогите пожалуйста.... первый раз использую HOSTCMS

создал файл menu.js и поместил его в /images/
содержимое файла
function SlideLayer (Num)
    {
    var el = document.getElementById (Num);
    if (el.style.display=='none')
       {
          el.style.display='block';
          el.style.position='absolute';
       }
    }
          
function SlideLayerHide (Num)
    {
    var el = document.getElementById (Num);
    if (el.style.display=='block')
       {
          el.style.display='none';
          el.style.position='absolute';
       }
    }



Cоздал 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="utf-8" 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="/images/menu.js"></script>

а также исправил ссылку на меню:

      $Structure->ShowStructure(232, 'ВыпадающееМеню');

Вроде все сделал как у вас тут написано но увы.. на страницы вываливает вот такую клаку:
Предупреждение: DOMDocument::loadXML() [domdocument.loadxml]: input conversion failed due to input error, bytes 0x98 0xD0 0xBD 0xD0 в файле /home/................/Xsl.class.php (строка 267)
Предупреждение: DOMDocument::loadXML() [domdocument.loadxml]: input conversion failed due to input error, bytes 0x98 0xD0 0xBD 0xD0 в файле /home/.................../public_html/modules/Xsl/Xsl.class.php (строка 267)
........................... и так далее
#
Re: Реализация выпадающего меню на базе структуры сайта с помощью xsl-шаблона
Помогите пожалуйста усовершенствовать выпадающее меню.
Я сделал меню используя метод который предложила natalya. Все хорошо получилось. Но заказчик попросил меня изменить меню, чтобы было легче осуществлять навигацию по сайту.
На сайте очень сложная многоуровневая структура и много веток. Структура ветки следующая:
Информационная система >> Информационная группа >> Информационная группа >> Информационный элемент

Мне нужно чтобы в меню отображалась многоуровневая структура вплоть до второй вложенной информационной группы. (Я выделил жирным шрифтом)

Далее я приведу два рисунка:

1 рис. - то что у меня получилось



2 рис. - то чего нужно добиться



Надеюсь на вашу помощь. И вообще этот вариант меню наверное не мне одному может понадобиться. Так что это полезно для всех.
#
Re: Реализация выпадающего меню на базе структуры сайта с помощью xsl-шаблона
Зашел в тупик. Подскажите как выбраться.
Попытался реализовать выпадающее многоуровневое меню меню использовав xsl шаблон карты сайта.
Нашел сначала джава скрипт меню
Вот его пример
А это его файлы

Я начал изменять шаблон под данное меню. И до конца не могу довести, не могу сообразить как присвоить другой стиль подгруппе, так как в карте сайта происходит своего рода зацикливание  и в результате все меню сваливается в кучу.

Вот  создал на сайте страничку для экспериментов, где можете увидеть то что получилось

Привожу xsl шаблон меню что  наделал:

<?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">
    <span class="preload1"></span>
    <span class="preload2"></span>
    <ul id="nav" >
      
      <!-- Выбираем узлы структуры -->
      <xsl:apply-templates select="structure[show=1]"/>
    </ul>
  </xsl:template>
  <xsl:template match="structure">
    <li >
      <!-- Запишем в константу ID структуры, данные для которой будут выводиться пользователю -->
      <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>
        <a class="top_link" href="{$link}">
          <span class="down">
            <xsl:value-of disable-output-escaping="yes" select="name"/>
          </span>
        </a>
      </xsl:if>
      
      <!-- Если не показывать ссылку - выводим просто имя ссылки -->
      <xsl:if test="show_link=0">
        <!-- <img border="0" src="/images/menu_point.gif" class="menu_point" width="4" height="7" /> -->
        <xsl:value-of disable-output-escaping="yes" select="name"/>
      </xsl:if>
      
      <!-- Выбираем подузлы структуры -->
      <xsl:if test="count(structure[show=1]) &gt; 0">
        <ul class="sub " >
          <!-- Выбираем узлы структуры -->
          <xsl:apply-templates select="structure [show=1]"/>
        </ul>
      </xsl:if>
    </li>
  </xsl:template>
</xsl:stylesheet>



А это фрагмент  html кода меню которое я хочу реализовать

<ul id="nav">
   <li class="top"><a href="#nogo2" id="products" class="top_link"><span class="down">Products</span></a>
      <ul class="sub">
         <li><a href="#nogo3" class="fly">Cameras</a>
               <ul>
                  <li><a href="#nogo4">Nikon</a></li>
                  
               </ul>
         </li>
         
      </ul>
   </li>
   
</ul>


Подскажите что делать?
#
Re: Реализация выпадающего меню на базе структуры сайта с помощью xsl-шаблона
Написал этот пост и через час нашел другое решение.
Просто взял другой скрипт
Там не требуется такого умопомрачения с css. Там достаточно назначить 2 стиля. Один на меню другой на субменю.
Так что вопрос снят. Извините за беспокойство
#
Re: Реализация выпадающего меню на базе структуры сайта с помощью xsl-шаблона
Попробовал реализовать пример lozoffoy по инфосистемам, и не работает...
Непонятно, что делаю не так.
Создал шаблон со всеми оговорками вроде тега SCRIPT и т.п.
Назначаю элементу структуры сайта, связанному с инфосистемой, новую закладку, а в макете сайта вызываю ее с созданным макетом, например:
           <?php
                $Structure = & singleton('Structure');      
                $Structure->ShowStructure('4', 'ВыпадающееМенюИС');
                ?>

И ничего...
Не выводится эта закладка...
#
Re: Реализация выпадающего меню на базе структуры сайта с помощью xsl-шаблона
Помогите разобраться с выпадающим меню, пытаюсь вставить это меню в сайт: http://www.egrappler.com/jqsimplemenu/index.html
XLS
<?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">
    <ul class="menu-top">
      <!-- Выбираем узлы структуры первого уровня -->
      <xsl:apply-templates select="structure[show=1]"/>
    </ul>
  </xsl:template>
  <xsl:template match="structure">
    <li>
      
      <!-- Показывать ссылку, или нет -->
      <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>
      <xsl:if test="count(structure) > 0">
        <ul>
          <!-- Выбираем узлы структуры -->
          <xsl:apply-templates select="structure"/>
        </ul>
      </xsl:if>
    </li>
  </xsl:template>
</xsl:stylesheet>


Все скрипты подключены, но увы не работает выпадающее меню, пунктам меню, где имеется подменю, должен присваиваться класс: pull-down, а при наведении еще класс: selected, но этого не происходит.
В чем загвоздка?
#
Re: Реализация выпадающего меню на базе структуры сайта с помощью xsl-шаблона
Вышеприведенный вопрос решен, кому интересно в icq...
Однако появилась еще 1-а проблема, как сделать в меню чтобы 1-ый пункт меню не был ссылкой, т.е.:
<ul>
<li>Дрова
<ul>
<li><a>Береза</a></li>
</ul>
</li>
</ul>
Вот мой код XSL:
<?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="/">
      <xsl:apply-templates select="/shop"/>
   </xsl:template>
   
   <!-- Шаблон для магазина -->
   <xsl:template match="/shop">
      
      <ul id="catalog">
         <xsl:apply-templates select="group"/>
      </ul>
   </xsl:template>
   
   <!-- Шаблон для групп товара -->
   <xsl:template match="group">
      <li>
         
         <a href="{/shop/path}{fullpath}" onClick="return show_hide_menu('{@id}');">
            <xsl:value-of disable-output-escaping="yes" select="name"/>
         </a>
         
         <!-- Если есть подгруппы -->
         <xsl:if test="group">
            <ul>
               <xsl:apply-templates select="group"/>
            </ul>
         </xsl:if>
      </li>
   </xsl:template>
</xsl:stylesheet>
#
Re: Re: Реализация выпадающего меню на базе структуры сайта с помощью xsl-шаблона
Pain4ik, вот мне помогли с такой же проблемой в другом топике
http://www.hostcms.ru/forums/2/7611/
Авторизация