Скрыть группы товаров

#
Скрыть группы товаров
Имеется, например, такая номенклатура в 1с:
Группа1
|---Подгруппа1
|---Подгруппа2
Группа2
|---Подгруппа12
|---Подгруппа22
Так реализовано для удоства работы в самой 1с (она ведущая по отношению к сайту).
На сайте же нет необхоимости показывать Группу1 и Группу2, вывести сразу их подгруппы было бы хорошим решением. Вывести подгруппы на уровень выши просто штатными средствами - создаем ссылку и перемещаем ее на нужный уровень.
А вот с родительскими группами у меня получились вот такие костыли:
МагазинГруппыТоваровНаГлавной:
<!-- Шаблон для групп товара -->
<xsl:template match="shop_group">
      <xsl:if test="@id != 655"> <!-- -->
         <li>
            <a href="{url}" hostcms:id="{@id}" hostcms:field="name" hostcms:entity="shop_group">
               <xsl:if test="@id = /shop/current_group_id">
                  <xsl:attribute name="class">current-group</xsl:attribute>
               </xsl:if>
               <xsl:value-of select="name"/>
            </a>
            <span>(<xsl:value-of select="items_total_count" />)</span>
            <xsl:if test="@id = /shop/current_group_id and count(shop_group)">
               <ul>
                  <xsl:apply-templates select="shop_group" />
               </ul>
            </xsl:if>
         </li>
      </xsl:if><!-- -->
</xsl:template>


МагазинКаталогТоваров:
<!-- Шаблон для групп товара -->
   <xsl:template match="shop_group">
      <xsl:if test="@id != 655"> <!-- -->
         <div class="row">
            <xsl:for-each select=". | following-sibling::shop_group[position() &lt; $n]">
               <div class="col-xs-12 col-md-4 text-align-center">
                  <div class="category">
                     <div class="category-image">
                        <a href="{url}">
                           <xsl:choose>
                              <xsl:when test="image_small != ''">
                                 <img data-src="{dir}{image_small}" class="lazyload"/>
                              </xsl:when>
                              <xsl:otherwise>
                                 <img data-src="/images/default-image.png" class="lazyload"/>
                              </xsl:otherwise>
                           </xsl:choose>
                        </a>
                     </div>
                     <a class="category-name" href="{url}" hostcms:id="{@id}" hostcms:field="name" hostcms:entity="shop_group"><xsl:value-of select="name"/></a>
                  </div>
               </div>
            </xsl:for-each>
         </div>
      </xsl:if>
   </xsl:template>

Как видим, я проверяю ID группы, и только если он не совпадает с теми, которые не надо выводить, группа выводится.
Конечно это работает, но выглядит как костыль. Ведь айди группы может поменяться. Может, мне придется перезаписать каталог и ID групп опять слетят.
Может есть более изящное решение?
#
Re: Скрыть группы товаров
DmitryOpalev,
Цитата:
но выглядит как костыль

Согласен.
Цитата:
Может, мне придется перезаписать каталог и ID групп опять слетят.

Для этого есть документации:

После полного обмена вы можете переместить нужные подкатегории в корень магазина, реструктуризировать категории в АЦ как вам хочется. Удалить Цитата:
На сайте же нет необхоимости показывать Группу1 и Группу2,

Ведь обмен по CommerceML идентифицирует категорию.
E-mail: info@syrbek.ru / телега: @syrbek /skype: activexm / syrbek.ru / Поддержка сайтов / г. Москва [HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, Git, SVN, Redmine]
#
Re: Скрыть группы товаров
Seri,
приветствую!
Да, вариант рабочий, но у нас номенклатура пополняется периодически (производители выпускают новые модели), и тогда уже нужно делать выгрузку "с группами", иначе товар не привязывается к группе и вообще не появляется на сайте. Может я и не разобрался, но пробовал всяко разно и безрезультатно.
Кстати, вариант описанный мной выше не рабочий, ибо вместо удаленной категории остается просто пустое место. Видимо, придется лезть в исходники и править запрос к базе.
#
Re: Скрыть группы товаров
Хоть и приходится править исходный код, пока для себя нашел такое решение:
/modules/shop/group/model.php
private $exception = [724]; //Скрываемые группы

//...

   public function getByParentId($parent_id, $bCache = TRUE)
   {
       $exception = [724];
      $this->queryBuilder()
         ->where('parent_id', '=', $parent_id)
         ->where('id','NOT IN', $this->exception); //ПРАВКА
      return $this->findAll($bCache);
   }
Модератор
#
Re: Скрыть группы товаров
DmitryOpalev,
Пожалуйста, не вносите изменения в файлы модулей, это приводит к отказу в оказании поддержки и продержится до первого обновления, где файлы будут обновлены.
Вы только что начали читать предложение, чтение которого вы уже заканчиваете.
Авторизация