Обернуть вывод товаров группы в ДИВ с классом id группы

Модератор
#
Re: Обернуть вывод товаров группы в ДИВ с классом id группы
Покажите целиком xsl
#
Re: Обернуть вывод товаров группы в ДИВ с классом id группы

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xsl:stylesheet>
<xsl:stylesheet version="1.0"
   xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
   xmlns:hostcms="http://www.hostcms.ru/"
   exclude-result-prefixes="hostcms">
   <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:decimal-format name="my" decimal-separator="," grouping-separator=" "/>
   
   <xsl:template match="/">
      <xsl:apply-templates select="/shop"/>
   </xsl:template>
   
   <xsl:variable name="n" select="number(3)"/>
   
   <xsl:template match="/shop">
      
      <!-- Получаем ID родительской группы и записываем в переменную $group -->
      <xsl:variable name="group" select="group"/>
      
      <h1>
         <xsl:value-of disable-output-escaping="yes" select="name"/>
      </h1>
      
      <!-- Отображение подгрупп данной группы -->
      <xsl:apply-templates select="shop_group[parent_id=$group]"/>


   </xsl:template>

    <!-- Шаблон выводит ссылки на группы магазина -->
   <xsl:template match="shop_group">

      <aside>
         <div class="controls">
            <button class="filter" data-filter="all">Все меню</button>
            <xsl:for-each select=". | following-sibling::shop_group">
               <button class="filter" data-filter=".{@id}"><xsl:value-of disable-output-escaping="yes" select="name"/></button>
            </xsl:for-each>
         </div>
      </aside>

      <main>
         <ul id="Container" class="container product-list">
            <xsl:for-each select=". | following-sibling::shop_group">

               <xsl:variable name="group_id" select="@id" />

               <xsl:if test="count(//shop_item[shop_group_id = $group_id]) &gt; 0">
                  <li class="mix {$group_id}">
                     <xsl:apply-templates select="//shop_item[shop_group_id = $group_id]"/>
                  </li>
               </xsl:if>

            </xsl:for-each>
         </ul>
      </main>

   </xsl:template>
  
      <!-- Шаблон для товара -->
   <xsl:template match="shop_item">
      
      <a href="{url}">
         <img src="{dir}{image_small}" alt="{name}" title="{name}"/>
         <h2 class="equal"><xsl:value-of disable-output-escaping="yes" select="name"/></h2>
         <p>
            <xsl:value-of select="format-number(price, '### ##0', 'my')"/><xsl:text> </xsl:text><xsl:value-of select="currency"/><xsl:text> </xsl:text>
            <!-- Ссылка на добавление в корзины -->
            <!-- <xsl:if test="type = 0 or (type = 1 and (digitals > 0 or digitals = -1)) or type = 2">
               <a href="{/shop/url}cart/?add={@id}" onclick="return $.addIntoCart('{/shop/url}cart/', {@id}, 1)"></a>
            </xsl:if> -->
         </p>
      </a>

   </xsl:template>
   
</xsl:stylesheet>
#
Re: Обернуть вывод товаров группы в ДИВ с классом id группы
HostCMS,
Помогите, пожалуйста, с вопросом...
Модератор
#
Re: Обернуть вывод товаров группы в ДИВ с классом id группы
Как-то так
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xsl:stylesheet>
<xsl:stylesheet version="1.0"
   xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
   xmlns:hostcms="http://www.hostcms.ru/"
   exclude-result-prefixes="hostcms">
   <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:decimal-format name="my" decimal-separator="," grouping-separator=" "/>
  
   <xsl:template match="/">
      <xsl:apply-templates select="/shop"/>
   </xsl:template>
  
   <xsl:variable name="n" select="number(3)"/>
  
   <xsl:template match="/shop">
      
      <!-- Получаем ID родительской группы и записываем в переменную $group -->
      <xsl:variable name="group" select="group"/>
      
      <h1>
         <xsl:value-of disable-output-escaping="yes" select="name"/>
      </h1>

     <aside>
         <div class="controls">
            <button class="filter" data-filter="all">Все меню</button>
            <xsl:for-each select="shop_group[parent_id=$group]">
               <button class="filter" data-filter=".{@id}"><xsl:value-of disable-output-escaping="yes" select="name"/></button>
            </xsl:for-each>
         </div>
      </aside>

      <main>
         <ul id="Container" class="container product-list">
            <xsl:for-each select="shop_group[parent_id=$group]">
               <xsl:variable name="group_id" select="@id" />

               <xsl:if test="count(//shop_item[shop_group_id = $group_id])">
                  <li class="mix {$group_id}">
                     <xsl:apply-templates select="//shop_item[shop_group_id = $group_id]"/>
                  </li>
               </xsl:if>
            </xsl:for-each>
         </ul>
      </main>

   </xsl:template>

   <!-- Шаблон выводит ссылки на группы магазина -->
   <xsl:template match="shop_group">
   </xsl:template>
  
   <!-- Шаблон для товара -->
   <xsl:template match="shop_item">
      
      <a href="{url}">
         <img src="{dir}{image_small}" alt="{name}" title="{name}"/>
         <h2 class="equal"><xsl:value-of disable-output-escaping="yes" select="name"/></h2>
         <p>
            <xsl:value-of select="format-number(price, '### ##0', 'my')"/><xsl:text> </xsl:text><xsl:value-of select="currency"/><xsl:text> </xsl:text>
            <!-- Ссылка на добавление в корзины -->
            <!-- <xsl:if test="type = 0 or (type = 1 and (digitals > 0 or digitals = -1)) or type = 2">
               <a href="{/shop/url}cart/?add={@id}" onclick="return $.addIntoCart('{/shop/url}cart/', {@id}, 1)"></a>
            </xsl:if> -->
         </p>
      </a>

   </xsl:template>
  
</xsl:stylesheet>
#
Re: Обернуть вывод товаров группы в ДИВ с классом id группы
Предупреждение появляется: xslt.php (строка 46)
Модератор
#
Re: Обернуть вывод товаров группы в ДИВ с классом id группы
По этому тексту ошибки ничего сказать нельзя, там другая информация. Исправил вышеразмещенный пример.
#
Re: Обернуть вывод товаров группы в ДИВ с классом id группы
HostCMS,
Как всегда - огромное спасибо!

И еще, если можно, вопрос.


<li class="mix {$group_id}">
   <xsl:apply-templates select="//shop_item[shop_group_id = $group_id]"/>
</li>

Необходимо что бы в элемент li с классом - id группы товаров, был обернут каждый shop_item. Я реализую это через переменную <xsl:variable name="group_id" select="@id" />. Но, естественно, я не могу эту переменную использовать в шаблоне товара. Подскажите, пожалуйста, как выйти из ситуации?
Модератор
#
Re: Обернуть вывод товаров группы в ДИВ с классом id группы
borisych,
тогда <li> и нужно быть внутри shop_item, чтобы каждый оборачивался. У shop_item есть ID группы товара, это элементарно увидеть в XML при просмотре XML в клиентском разделе. Будет примерно так:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xsl:stylesheet>
<xsl:stylesheet version="1.0"
   xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
   xmlns:hostcms="http://www.hostcms.ru/"
   exclude-result-prefixes="hostcms">
   <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:decimal-format name="my" decimal-separator="," grouping-separator=" "/>
  
   <xsl:template match="/">
      <xsl:apply-templates select="/shop"/>
   </xsl:template>
  
   <xsl:variable name="n" select="number(3)"/>
  
   <xsl:template match="/shop">
      
      <!-- Получаем ID родительской группы и записываем в переменную $group -->
      <xsl:variable name="group" select="group"/>
      
      <h1>
         <xsl:value-of disable-output-escaping="yes" select="name"/>
      </h1>

     <aside>
         <div class="controls">
            <button class="filter" data-filter="all">Все меню</button>
            <xsl:for-each select="shop_group[parent_id=$group]">
               <button class="filter" data-filter=".{@id}"><xsl:value-of disable-output-escaping="yes" select="name"/></button>
            </xsl:for-each>
         </div>
      </aside>

      <main>
         <ul id="Container" class="container product-list">
            <xsl:for-each select="shop_group[parent_id=$group]">
               <xsl:variable name="group_id" select="@id" />

               <xsl:if test="count(//shop_item[shop_group_id = $group_id])">
                   <xsl:apply-templates select="//shop_item[shop_group_id = $group_id]"/>
               </xsl:if>
            </xsl:for-each>
         </ul>
      </main>

   </xsl:template>

   <!-- Шаблон выводит ссылки на группы магазина -->
   <xsl:template match="shop_group">
   </xsl:template>
  
   <!-- Шаблон для товара -->
   <xsl:template match="shop_item">
      <li class="mix {shop_group_id}">
         <a href="{url}">
            <img src="{dir}{image_small}" alt="{name}" title="{name}"/>
            <h2 class="equal"><xsl:value-of disable-output-escaping="yes" select="name"/></h2>
            <p>
               <xsl:value-of select="format-number(price, '### ##0', 'my')"/><xsl:text> </xsl:text><xsl:value-of select="currency"/><xsl:text> </xsl:text>
               <!-- Ссылка на добавление в корзины -->
               <!-- <xsl:if test="type = 0 or (type = 1 and (digitals > 0 or digitals = -1)) or type = 2">
               <a href="{/shop/url}cart/?add={@id}" onclick="return $.addIntoCart('{/shop/url}cart/', {@id}, 1)"></a>
               </xsl:if> -->
            </p>
         </a>
      </li>
   </xsl:template>
  
</xsl:stylesheet>
#
Re: Обернуть вывод товаров группы в ДИВ с классом id группы
HostCMS,
Спасибо Вам огромное! Все работает.
Модератор
#
Re: Обернуть вывод товаров группы в ДИВ с классом id группы
Пожалуйста
Авторизация