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

#
Re: Суперменю для магазина
неужели афтор отвечать не хочет? извините еще вопросик: а где в параметрах вывода меню можно поставить условие чтобы выводились товары количество которых больше 0... что-то найти не могу.
Заранее спасибо
Программист без пива как шампанское без пробки- быстро выдыхается.
#
Re: Суперменю для магазина
НАРОД ну подскажите хоть кто нибудь.. как решить проблему с сортировкой меню из этого топика выводит все с сортировкой по id а нужно по наименованию. попробовал вставить
$param['items_order'] = 'Asc';
$param['items_field_order'] = 'shop_items_catalog_name';
но ничего не вышло...

Так что и где нужно прописать чтобы каталог по наименованию сортировался...
Программист без пива как шампанское без пробки- быстро выдыхается.
#
Re: Суперменю для магазина
В XSL сортируйте, при вызове темплейта, строящего выпадающую часть.
См. в документации тег xsl:sort
Заказов не беру. Консультирую редко.
#
Re: Суперменю для магазина
Все спасибо.. со всем сам разобрался.... все можно сделать проще для каждого каталога указать порядок сортировки и вся... .. )))))))
Программист без пива как шампанское без пробки- быстро выдыхается.
#
Re: Суперменю для магазина
Всю тему не перечитывал, уж простите. Насколько понял, задачей было сделать меню для интернет магазина, чтобы в нем подсвечивалось дерево перехода и текущая позиция?
Реализовал это очень простым ява кодом, кому инетресно, можете посмотреть и "стырить" http://txmarket.ru/
email project@bugoff.net skype bugoff.net сайт bugoff.net
#
Re: Суперменю для магазина
Сделал все как в начале темы, но меню не отображается, ничего не выводится(
Сергей Веселов
#
Исправленный 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">
      
      <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: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="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>
               <!-- Выводим ссылку -->
               <xsl:choose>
                  <!-- ГРУППА -->
                  <xsl:when test="count(structure) > 0">
                     
                     <span  style="{$link_style}"><xsl:choose>
                           <!-- без ссылки на страницу (если в ней находимся) -->
                           <xsl:when test="@id=$current_structure_id"><xsl:value-of disable-output-escaping="yes" select="name"/></xsl:when>
                           <!--иначе просто ссылка на группу -->
                        <xsl:otherwise><a href="{$link}"><xsl:value-of disable-output-escaping="yes" select="name"/></a></xsl:otherwise>
                     </xsl:choose></span>
                     
                  </xsl:when>
                  
                  <!-- ТОВАР -->
                  <xsl:otherwise>
                     <xsl:choose>
                        <!-- без ссылки на страницу товара (если в ней находимся) -->
                     <xsl:when test="@id=$current_structure_id"><span style="{$link_style}"><xsl:value-of disable-output-escaping="yes" select="name"/></span></xsl:when>
                        <!-- иначе просто ссылка на страницу товара -->
                     <xsl:otherwise><a href="{$link}"><xsl:value-of disable-output-escaping="yes" select="name"/></a></xsl:otherwise>
                     </xsl:choose>
                  </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>
#
Меню для магазина (раскрывается по клику на родительском разделе)
Еще один вариант реализации меню

1. В <head> добавляем скрипт:


<script type="text/javascript">
   function active(){
   var obj = document.getElementById('active');
   alert(obj.tagName);
      while (obj){
      obj = obj.parentNode;      
         if(obj.tagName=='UL'){         
            obj.style.display='block';
            act = obj.parentNode;
         }
      }
   }
</script>


2. Меняем

<body> на <body onload="active();">


3. В шаблоне
Этот код:

<!-- Разделы каталога товаров -->
      <?php
      // Проверяем, существует ли класс Интернет-магазина
      if (class_exists('shop'))
      {
         $shop = & singleton('shop');
         $shop_id = 1;

         $param = array();
         $param['items_on_page'] = 0;
         $param['xml_show_group_type'] = 'all';
         $param['xml_show_all_producers'] = false;
         $param['xml_show_producers'] = false;
         $param['xml_show_all_sellers'] = false;
         $param['xml_show_tying_products'] = false;
         $param['xml_show_modification'] = false;
         $param['xml_show_group_property'] = false;
         $param['xml_show_item_property'] = false;
         $param['xml_show_tags'] = false;
         $shop->ShowShop($shop_id, 'МагазинГруппыТоваровНаГлавной', $param);
      }
      ?>


меняем на этот:


<!-- Разделы каталога товаров -->
               <?php
                  $shop = new shop();
                  $ShopId = 1;
                  $rez = array();
                  $rez = $shop->GetItemPath($ShopId);
                  $external_propertys = array();
                  $external_propertys['ТекущаяГруппа'] = $rez['group'];
                  $param = array('current_group_id' => 0, 'items_on_page' => 10);
                  $param['xml_show_group_type'] = 'all';
                  $xsl_catalog = 'МагазинГруппыТоваровНаГлавной';
                  $shop->ShowShop($ShopId, $xsl_catalog, $param, $external_propertys);
               ?>


4. И добавляем 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">
      <SCRIPT>
         <xsl:comment>
            <xsl:text disable-output-escaping="yes">
               <![CDATA[
               function show_hide_menu(id)
               {
               if (obj = document.getElementById(id))
               {
               obj.style.display == 'none' ? obj.style.display = 'block' : obj.style.display = 'none';
               return false;
               }
               return true;
               }
               function active(){
               var obj = document.getElementById('active');
               while (obj){
               obj = obj.parentNode;
               if(obj.tagName=='UL'){
               obj.style.display='block';
               act = obj.parentNode;
               }
               }
               }
               ]]>
            </xsl:text>
         </xsl:comment>
      </SCRIPT>
      <xsl:variable name="parent_group_id" select="@current_group_id"/>
      <!-- Выводим группы магазина -->
      <ul class="left_menu">
         <xsl:apply-templates select="//group[@parent=0]"/>
      </ul>
   </xsl:template>
   <!-- Шаблон для групп товара -->
   <xsl:template match="group">
      <xsl:variable name="current_group_id" select="/shop/ТекущаяГруппа"/>
      <li>
         <xsl:if test="$current_group_id = @id">
            <xsl:attribute name="id">active</xsl:attribute>
         </xsl:if>
         <xsl:choose>
            <xsl:when test="$current_group_id = @id or count(.//group[@id=$current_group_id])=1">
               <!-- Определяем стиль вывода ссылки -->
               <xsl:variable name="link_style">
                  <xsl:choose>
                     <!-- Выделяем текущую страницу жирным (если это текущая страница) -->
                     <xsl:when test="$current_group_id = @id">font-weight: bold;</xsl:when>
                     <!-- Иначе обычный вывод с пустым стилем -->
                     <xsl:otherwise></xsl:otherwise>
                  </xsl:choose>
               </xsl:variable>
               
               <a onClick="return show_hide_menu('{@id}');" href="{/shop/path}{fullpath}" style="{$link_style}">
                  
                  <xsl:choose>
                     <xsl:when test="propertys/property/node()">
                        <xsl:value-of disable-output-escaping="yes" select="propertys/property/value"/></xsl:when>
                     <xsl:otherwise>
                        <xsl:value-of disable-output-escaping="yes" select="name"/>
                     </xsl:otherwise>
                  </xsl:choose>
               </a>
               <!--
               <xsl:if test="count_all_groups > 0">
                  <ul class="left_menu_2">
                     <xsl:apply-templates select="group"/>
                  </ul>
               </xsl:if>
               -->
            </xsl:when>
            <xsl:otherwise>
               <a onClick="return show_hide_menu('{@id}');" href="{/shop/path}{fullpath}">
                  <xsl:choose>
                     <xsl:when test="propertys/property/node()">
                        <xsl:value-of disable-output-escaping="yes" select="propertys/property/value"/></xsl:when>
                     <xsl:otherwise>
                        <xsl:value-of disable-output-escaping="yes" select="name"/>
                     </xsl:otherwise>
                  </xsl:choose>
               </a>
            </xsl:otherwise>
         </xsl:choose>
         <!-- Если есть подгруппы -->
         <xsl:if test="group">
            <ul id="{@id}" style="display: none;" class="left_menu_2">
               <xsl:apply-templates select="group"/>
            </ul>
         </xsl:if>
      </li>
   </xsl:template>
</xsl:stylesheet>
#
Re: Суперменю для магазина
kvasiliy писал(а):
Создаём XSL МенюМагазина:

кодировку только меняйте если что...
#
Re: Суперменю для магазина
кто устанавливал себе это меню, почему оно не отображается, не выводится? в чем ошибка
Авторизация