Вывод соседних групп товаров (детей текущего родителя) в XSL

#
Вывод соседних групп товаров (детей текущего родителя) в XSL
Доброго дня! Имеется:

   <xsl:template match="shop_group">
      <!-- Запишем в константу -->
      <xsl:param name="group" select="group"/>
      <xsl:param name="parent_id" select="/shop/parent_id"/>
      
      <xsl:if test="count(shop_group) &gt; 0">
         <div class="row no-gutters justify-content-center subcategory">
            <div class="subcategory-icon">
               <xsl:choose>
                  <xsl:when test="image_small != ''">
                     <img src="{dir}{image_small}" alt="{name}" title="{name}"/>
                  </xsl:when>
                  <xsl:otherwise>
                     <img src="/images/no-image.png" alt="{name}" title="{name}"/>
                  </xsl:otherwise>
               </xsl:choose>
            </div>
            <h4><xsl:value-of select="name"/></h4>
            <ul class="subcategory-menu">
               <xsl:if test="count(shop_group) &gt; 0">
                  <xsl:apply-templates select="shop_group" mode="sub_group"/>
               </xsl:if>
            </ul>
         </div>
      </xsl:if>
      <xsl:if test="count(shop_group) = 0">
         <div class="row no-gutters justify-content-center subcategory">
            <div class="subcategory-icon">
               <xsl:choose>
                  <xsl:when test="image_small != ''">
                     <img src="{dir}{image_small}" alt="{name}" title="{name}"/>
                  </xsl:when>
                  <xsl:otherwise>
                     <img src="/images/no-image.png" alt="{name}" title="{name}"/>
                  </xsl:otherwise>
               </xsl:choose>
            </div>
            <h4><xsl:value-of select="//shop_group[@id=$parent_id]/name"/></h4>
            <ul class="subcategory-menu">
               <xsl:if test="count(//shop_group[@id=$parent_id]) &gt; 0">
                  <xsl:apply-templates select="/shop//shop_group[@id=$parent_id]/node()" mode="parents"/>
               </xsl:if>
            </ul>
         </div>
      </xsl:if>
   </xsl:template>
   
   <xsl:template match="shop_group" mode="parents">
      <xsl:if test="$current_structure_id = @id">
         <li class="active"><xsl:value-of select="name"/></li>
      </xsl:if>
      <xsl:if test="$current_structure_id != @id">
         <li><a href="{url}"><xsl:value-of select="name"/></a></li>
      </xsl:if>
   </xsl:template>


Сама проблема в /shop//shop_group[@id=$parent_id]/node(), если так, то выводятся подгруппы родительской группы, но при этом еще поля родительской группы, name и т.д.

Задача: мы в группе товаров, в которой нет подгрупп, нужно вывести родительскую группу с подгруппами в которых есть эта, эту сделать активной (отсутствие ссылки), а остальные не активными (есть ссылка), чтобы можно было легко перемещаться по соседям.
Пробовал по всякому, так и не нашел решения.
В страницу Интернет-магазина передаются стандартные параметры по умолчанию, которые передает движок.
#
Re: Вывод соседних групп товаров (детей текущего родителя) в XSL
kashin,
Вы можете в ТДС получит ИД родителя текущей Группы товаров. Если у текущей группы есть родитель, то выбрать дочерние группы и добавить в контроллер показа через addEntity  см. Добавление внешних данных в контроллер
Проверка в ТДС
if ($Shop_Controller_Show->group)
{
$oShop_Group = Core_Entity::factory('Shop_Group', $Shop_Controller_Show->group);
$oShop_Group = $oShop_Group->getParent();
echo $oShop_Group->id; // печатаем ИД родителя
// Тут вы можете выбрать и добавить данные в контроллер показа
}
E-mail: info@syrbek.ru / телега: @syrbek /skype: activexm / syrbek.ru / Поддержка сайтов / г. Москва [HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, Git, SVN, Redmine]
#
Re: Вывод соседних групп товаров (детей текущего родителя) в XSL
Seri писал(а):

Вроде как у меня уже есть ИД родителя:

$Shop_Controller_Show = Core_Page::instance()->object;

$group = Core_Entity::factory('Shop_Group', $Shop_Controller_Show->group);
$rootid = $group->parent_id;
$parentid = ($rootid != 0 ) ? $group->getParent()->id : '';

$xslName = $Shop_Controller_Show->item
   ? Core_Array::get(Core_Page::instance()->libParams, 'shopItemXsl')
   : Core_Array::get(Core_Page::instance()->libParams, 'shopXsl');

$Shop_Controller_Show->addEntity(
   Core::factory('Core_Xml_Entity')
      ->name('ТекущаяГруппа')->value($Shop_Controller_Show->group)
)->addEntity(
   Core::factory('Core_Xml_Entity')
      ->name('root_id')->value($rootid)
)->addEntity(
   Core::factory('Core_Xml_Entity')
      ->name('parent_id')->value($parentid)
)->addEntity(
   Core::factory('Core_Xml_Entity')
      ->name('show_comments')->value(Core_Array::get(Core_Page::instance()->libParams, 'showComments', 1))
)->addEntity(
   Core::factory('Core_Xml_Entity')
      ->name('show_add_comments')->value(Core_Array::get(Core_Page::instance()->libParams, 'showAddComment', 2))
);


Если делаю <xsl:apply-templates select="//shop_group[@id=$parent_id]" mode="parents"/> то получаю только ссылку на родительскую группу, если делаю <xsl:apply-templates select="/shop//shop_group[@id=$parent_id]/node()" mode="parents"/> то получаю ссылки на детей и активную текущую группу и в добавок такую фигню:
1 0 610 Насосы 0 1 3 3 20 3485 1 -1 nasosy 20 0 0 0 0 74de1a1a-94c9-11e8-945c-5254007d40b7 /vodosnabzhenie/nasosy/ /upload/shop_1/6/group_612/ - фигня
И то, что нужно (дети текущей родительской группы):
Скважинные насосы - (текущий раздел)
Комплектные установки для систем вдоснабжения - (сосед)
насосы второго подъёма - (сосед)

мне нужно, чтобы 1 0 610 Насосы 0 1 3 3 20 3485 1 -1 nasosy 20 0 0 0 0 74de1a1a-94c9-11e8-945c-5254007d40b7 /vodosnabzhenie/nasosy/ /upload/shop_1/6/group_612/ не выводилось над меню, а выводится из за <xsl:apply-templates select="/shop//shop_group[@id=$parent_id]/node()" mode="parents"/>
Модератор
#
Re: Вывод соседних групп товаров (детей текущего родителя) в XSL
kashin писал(а):
Задача: мы в группе товаров, в которой нет подгрупп, нужно вывести родительскую группу с подгруппами в которых есть эта, эту сделать активной (отсутствие ссылки), а остальные не активными (есть ссылка), чтобы можно было легко перемещаться по соседям.

1. Если вы в группе, то получить доступ к родительской группе вы можете через ../
Например, название родительской будет ../name

2. Получить непосредственных потомков родительской группы можно по схожей схеме:
<xsl:apply-templates select="../shop_group" mode="parents"/>
mode укажите тот, который вам нужен

Получить все дочерние группы родительской группы можно по схожей схеме:
<xsl:apply-templates select="..//shop_group" mode="parents"/>
#
Re: Вывод соседних групп товаров (детей текущего родителя) в XSL
Спасибо, задача решена
Авторизация