Суперменю для магазина

#
Суперменю для магазина
Предлагаю к использованию многофункциональное меню для магазина, которое показывает группы магазина, товары, убирает и выделяет в меню ссылку со страницы товара (т.к. никчему для оптимизации находясь на странице иметь ссылку на неё же), выделяет и раскрывает раздел в котором находтся пользователь. Может разворачивать и сворачивать разделы...

Работает даже в IE 5.5

Пример в моём магазине: http://www.altay-magazin.ru/%CF%F0%EE%E4%F3%EA%F6%E8%FF_%C3%EE%F0%ED%EE%E3%EE_%C0%EB%F2%E0%FF/

Может показывать разделы и элементы инфосистемы.
Может показывать структуры

Ну вобщем пробуем и высказываемся.
1) качаем и распаковываем на свой сервер архив со скриптами: http://www.altay-magazin.ru/gm_map.rar (с директорией как оно есть в корень)
2) в макете для магазина показываем эти скрипты и дописывае скриптец:

<LINK rel=stylesheet type=text/css href="/gm_map/style.css">
<SCRIPT language=JavaScript src="/gm_map/script.php"></SCRIPT>
<LINK rel=stylesheet href="/gm_map/treeview.css">
<SCRIPT type=text/javascript src="/gm_map/jquery.js"></SCRIPT>
<SCRIPT type=text/javascript src="/gm_map/treeview.js"></SCRIPT>
<script type="text/javascript">
   $(document).ready(function(){
      $("#browser").treeview({
         toggle: function() {
            console.log("%s was toggled.", $(this).find(">span").text());
         }
      });

      $("#add").click(function() {
         var branches = $("<li><span class='folder'>New Sublist</span><ul>" +
            "<li><span class='file'>Item1</span></li>" +
            "<li><span class='file'>Item2</span></li></ul></li>").appendTo("#browser");
         $("#browser").treeview({
            add: branches
         });
      });
   });
   </script>

3) Создаём 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:key name='menu-curr' match="*[@href = $request-uri]" use='ancestor::group / link / @href'/>
   
   <xsl:template match="/document">
      <div id='main' style="padding-top: -100px"><!-- Выбираем узлы структуры -->
         <ul id="browser" class="filetree treeview-famfamfam"><xsl:apply-templates select="structure[show=1]"/>
      </ul></div>
   </xsl:template>
   
   <xsl:template match="structure">
      
<!-- этот код и в конце темплейта (закрывающий) убираем если хотим увидеть структуры которые находятся внутри выбранной структуры -->
      <xsl:if test="contains(@id, 'item_') = 'True' or contains(@id, 'group_') = 'True'">
         
         <xsl:variable name="current_structure_id">
            <xsl:choose>
               <xsl:when test="/document/item/node()">item_<xsl:value-of select="/document/item"/></xsl:when>
               <xsl:when test="/document/group/node()">group_<xsl:value-of select="/document/group"/></xsl:when>
               <xsl:otherwise>
                  <xsl:value-of select="/document/structure/current_structure_id"/>
               </xsl:otherwise>
            </xsl:choose>
         </xsl:variable>
         
         <li >
            <xsl:if test="not($current_structure_id = @id or count(.//structure[@id=$current_structure_id]) = 1)">
               <xsl:attribute name="class">closed</xsl:attribute>
            </xsl:if>
            
            <!-- Расчитываем размер отступа -->
            <xsl:variable name="padding" select="level * 0"/>
            
            <!-- Показывать ссылку, или нет -->
            <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:when test="current_structure_id=1"></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:when test="@id=$current_structure_id">font-weight: bold</xsl:when>
                     
                     <!-- Иначе обычный вывод с пустым стилем -->
                     <xsl:otherwise></xsl:otherwise>
                  </xsl:choose>
               </xsl:variable>
               
      <!-- Выводим ссылку убираем class="folder" и class="file" если не нужны украшательства -->
               <xsl:choose>
                  <xsl:when test="count(structure) > 0">
               <span class="folder"  style="{$link_style}"><a href='{$link}' ><xsl:value-of disable-output-escaping="yes" select="name"/><font color="#009933">(<xsl:value-of select="count(.//structure[starts-with(@id, 'item_') = 'True'])"/>)</font></a></span>
                  </xsl:when>
<xsl:when test="@id=$current_structure_id">
                  <span class="file" style="{$link_style}"><xsl:value-of disable-output-escaping="yes" select="name"/></span>
               </xsl:when>
                  <xsl:otherwise>
                  <a href="{$link}"><span class="file" ><xsl:value-of disable-output-escaping="yes" select="name"/></span></a>
                  </xsl:otherwise>
               </xsl:choose>
            </xsl:if>
            
            
            <xsl:if test="count(structure[show=1]) &gt; 0">
               <ul>
                  <!-- Выбираем узлы структуры -->
                  <xsl:apply-templates select="structure[show=1]"/>
               </ul>
            </xsl:if>
         </li>
      </xsl:if>
   </xsl:template>
   
</xsl:stylesheet>

4) ну и наконец показываем меню в шаблоне страницы для магазина (не забудьте указать свой идентефикатор узла структуры магазина!!!):
<?php
$Structure = & singleton('Structure');
$xsl = "МенюМагазина";
$param = array();

/* Показывать группы информационных систем в карте сайта если указанная ниже структура позволяет */
$param['show_groups'] = false;
/* Показывать элементы информационных систем в карте сайта */
$param['show_items'] = false;
/* Показывать группы магазина в карте сайта */
$param['show_shop_groups'] = true;
/* Показывать товары магазина в карте сайта */
$param['show_shop_items'] =  true;

$structure_parent_id = 330; // Здесь идентификатор узла структуры магазина если поставить ноль то будет для всего сайта
$param['parent_id'] = $structure_parent_id;
$external_propertys = array();
   if (class_exists('shop'))
   {
      $shop = & singleton('shop');
      $shop_row = $shop->GetShopWhithStructureId(CURRENT_STRUCTURE_ID, CURRENT_SITE);
  
      if ($shop_row)
      {
         $result = $shop->GetItemPath($shop_row['shop_shops_id'], '', false);
         if ($result['item'])
         {
            $item_id = $result['item'];
            if ($item_id != 0)
            {
               $external_propertys['item'] = $item_id;
            }
         }
         else
         {
            $item_id = false;
         }
         if (is_array($result) && $result['group'] > 0)
         {
            $external_propertys['group'] = $result['group'];  
         }
      }
   }
$Structure->ShowStructure(false, $xsl, $param, $external_propertys);
?>
Особые благодарности "h4mpy - http://www.hostcms.ru/users/info/h4mpy/ " Антону Сергеевичу за помощь в доработке
#
Re: Суперменю для магазина
в XSL фрагмент вывода ссылки надо заменить на:
<!-- Выводим ссылку -->
               <xsl:choose>
                  <!-- ГРУППА -->
                  <xsl:when test="count(structure) > 0">
                     
                     <span class="folder"  style="{$link_style}"><xsl:choose>
                           <!-- без ссылки на страницу (если в ней находимся) -->
                        <xsl:when test="@id=$current_structure_id"><xsl:value-of disable-output-escaping="yes" select="name"/><font color="#009933">(<xsl:value-of select="count(.//structure[starts-with(@id, 'item_') = 'True'])"/>)</font></xsl:when>
                           <!--иначе просто ссылка на группу -->
                     <xsl:otherwise><a href='{$link}' ><xsl:value-of disable-output-escaping="yes" select="name"/><font color="#009933">(<xsl:value-of select="count(.//structure[starts-with(@id, 'item_') = 'True'])"/>)</font></a></xsl:otherwise>
                     </xsl:choose></span>
                     
                  </xsl:when>
                  
                  <!-- ТОВАР -->
                  <xsl:otherwise>
                     <xsl:choose>
                        <!-- без ссылки на страницу товара (если в ней находимся) -->
                     <xsl:when test="@id=$current_structure_id"><span class="file" style="{$link_style}"><xsl:value-of disable-output-escaping="yes" select="name"/></span></xsl:when>
                        <!-- иначе просто ссылка на страницу товара -->
                  <xsl:otherwise><a href="{$link}"><span class="file"><xsl:value-of disable-output-escaping="yes" select="name"/></span></a></xsl:otherwise>
                     </xsl:choose>
                  </xsl:otherwise>
                  
               </xsl:choose>

тогда ещё и ссылка со страницы группы будет убираться если на ней находимся.
#
Re: Суперменю для магазина
kvasiliy писал(а):
1) качаем и распаковываем на свой сервер архив со скриптами: http://www.altay-magazin.ru/gm_map.rar (с директорией как оно есть в корень)


Не работает ссылка на скачивание
#
Re: Суперменю для магазина
Zaktus писал(а):
Не работает ссылка на скачивание

у меня все скачалось
пока еще не пробовал поставить меню, но заранее выражаю благодарность создателям суперменю
Vladimir-SEO.ru
#
Re: Суперменю для магазина
seoigor писал(а):
у меня все скачалось

Я просто с неделю назад чистил сервер и видимо по "девичьей памяти" снёс этот архив...

Вроде-бы скомпоновал опять архивчик... пробуйте, если не получится то пишите...
#
Re: Суперменю для магазина
Ссылка http://www.altay-magazin.ru/gm_map.rar не работает
Если вы не ставите перед собой цели, вы гарантируете свою неспособность добится чего либо в жизни. *Йоги Бера
#
Re: Суперменю для магазина
Киньте архивчик если не трудно на myportatorТУЗИКgmail.com
Заранее благодарен.
Если вы не ставите перед собой цели, вы гарантируете свою неспособность добится чего либо в жизни. *Йоги Бера
#
Re: Суперменю для магазина
#
Re: Суперменю для магазина
Не отображается меню:
ПРЕДУПРЕЖДЕНИЕ: DOMDocument::loadXML() [domdocument.loadxml]: attributes construct error in Entity, line: 155 в файле /home/u48637/public_html/art-futuro.ru/modules/Xsl/Xsl.class.php (строка 252)
ПРЕДУПРЕЖДЕНИЕ: DOMDocument::loadXML() [domdocument.loadxml]: Couldn't find end of Start Tag span line 155 in Entity, line: 155 в файле /home/u48637/public_html/art-futuro.ru/modules/Xsl/Xsl.class.php (строка 252)
ПРЕДУПРЕЖДЕНИЕ: DOMDocument::loadXML() [domdocument.loadxml]: Opening and ending tag mismatch: when line 153 and span in Entity, line: 160 в файле /home/u48637/public_html/art-futuro.ru/modules/Xsl/Xsl.class.php (строка 252)
ПРЕДУПРЕЖДЕНИЕ: DOMDocument::loadXML() [domdocument.loadxml]: Opening and ending tag mismatch: choose line 151 and when in Entity, line: 162 в файле /home/u48637/public_html/art-futuro.ru/modules/Xsl/Xsl.class.php (строка 252)
ПРЕДУПРЕЖДЕНИЕ: DOMDocument::loadXML() [domdocument.loadxml]: Opening and ending tag mismatch: if line 81 and choose in Entity, line: 180 в файле /home/u48637/public_html/art-futuro.ru/modules/Xsl/Xsl.class.php (строка 252)
ПРЕДУПРЕЖДЕНИЕ: DOMDocument::loadXML() [domdocument.loadxml]: Opening and ending tag mismatch: li line 63 and xsl:if in Entity, line: 182 в файле /home/u48637/public_html/art-futuro.ru/modules/Xsl/Xsl.class.php (строка 252)
ПРЕДУПРЕЖДЕНИЕ: DOMDocument::loadXML() [domdocument.loadxml]: Opening and ending tag mismatch: if line 37 and li in Entity, line: 200 в файле /home/u48637/public_html/hydrotera.ru/modules/Xsl/Xsl.class.php (строка 252)
ПРЕДУПРЕЖДЕНИЕ: DOMDocument::loadXML() [domdocument.loadxml]: Opening and ending tag mismatch: template line 30 and if in Entity, line: 202 в файле /home/u48637/public_html/art-futuro.ru/modules/Xsl/Xsl.class.php (строка 252)
ПРЕДУПРЕЖДЕНИЕ: DOMDocument::loadXML() [domdocument.loadxml]: Opening and ending tag mismatch: stylesheet line 5 and template in Entity, line: 204 в файле /home/u48637/public_html/art-futuro.ru/modules/Xsl/Xsl.class.php (строка 252)
ПРЕДУПРЕЖДЕНИЕ: DOMDocument::loadXML() [domdocument.loadxml]: Extra content at the end of the document in Entity, line: 208 в файле /home/u48637/public_html/art-futuro.ru/modules/Xsl/Xsl.class.php (строка 252)
#
Re: Суперменю для магазина
Похожая проблема

Цитата:
Предупреждение: DOMDocument::loadXML() [domdocument.loadxml]: input conversion failed due to input error, bytes 0x98 0xD0 0xBD 0xD0 в файле /home/newud/public_html/baraholka-cool.com.ua/modules/Xsl/Xsl.class.php (строка 299)
Предупреждение: DOMDocument::loadXML() [domdocument.loadxml]: input conversion failed due to input error, bytes 0x98 0xD0 0xBD 0xD0 в файле /home/newud/public_html/baraholka-cool.com.ua/modules/Xsl/Xsl.class.php (строка 299)
Предупреждение: DOMDocument::loadXML() [domdocument.loadxml]: encoder errorComment not terminated in Entity, line: 48 в файле /home/newud/public_html/baraholka-cool.com.ua/modules/Xsl/Xsl.class.php (строка 299)
Предупреждение: DOMDocument::loadXML() [domdocument.loadxml]: Premature end of data in tag choose line 42 in Entity, line: 48 в файле /home/newud/public_html/baraholka-cool.com.ua/modules/Xsl/Xsl.class.php (строка 299)
Предупреждение: DOMDocument::loadXML() [domdocument.loadxml]: Premature end of data in tag variable line 41 in Entity, line: 48 в файле /home/newud/public_html/baraholka-cool.com.ua/modules/Xsl/Xsl.class.php (строка 299)
Предупреждение: DOMDocument::loadXML() [domdocument.loadxml]: Premature end of data in tag if line 38 in Entity, line: 48 в файле /home/newud/public_html/baraholka-cool.com.ua/modules/Xsl/Xsl.class.php (строка 299)
Предупреждение: DOMDocument::loadXML() [domdocument.loadxml]: Premature end of data in tag li line 29 in Entity, line: 48 в файле /home/newud/public_html/baraholka-cool.com.ua/modules/Xsl/Xsl.class.php (строка 299)
Предупреждение: DOMDocument::loadXML() [domdocument.loadxml]: Premature end of data in tag if line 17 in Entity, line: 48 в файле /home/newud/public_html/baraholka-cool.com.ua/modules/Xsl/Xsl.class.php (строка 299)
Предупреждение: DOMDocument::loadXML() [domdocument.loadxml]: Premature end of data in tag template line 14 in Entity, line: 48 в файле /home/newud/public_html/baraholka-cool.com.ua/modules/Xsl/Xsl.class.php (строка 299)
Предупреждение: DOMDocument::loadXML() [domdocument.loadxml]: Premature end of data in tag stylesheet line 3 in Entity, line: 48 в файле /home/newud/public_html/baraholka-cool.com.ua/modules/Xsl/Xsl.class.php (строка 299)
С уважением, Команда Isv7! тел-1: +38098-5520233 Viber тел-2: +38050-5765376 skyp: newudx icq: 460923525 email: info@isv7.com http://www.isv7.com
Авторизация