Курс 2016 года “Разработка на UMI.CMS от 0 до готового сайта”

0 Пользователей и 1 Гость просматривают эту тему.

*

Axiomateria

  • ****
  • 322
  • +5/-0
    • Просмотр профиля
    • Разработка продающих сайтов под ключ по честным ценам
Здравствуйте!
У нас в интернет-магазине есть справочник "Производитель", где список всех наименований брендов производителей.
Данный список выводится в фильтре по каталогу полностью по всех категориях на ряду с полями "Цена от и до".
Конечно в разных разделах разные товары, например в разделе "Аккумуляторы"  не нужны бренды в фильтре поиска из раздела "Масла" и других тоже -
вот и вопрос: возможно ли как-то в форме (см. ниже) установить правило, которое отсекало бы из справочника "Производитель" не нужные для этого раздела список брендов не производящих масла ?
То есть надо что бы в открытом разделе каталога были в фильтре поиска только актуальные наименования брендов.

    <xsl:template match="udata[@method = 'search'][group]" mode="search">      
                <form class="catalog_filter" role="form">
                    <input type="hidden" id="catalog_layout" name="catalog_layout" value="{$catalog_layout}" />
                    <input type="hidden" id="count" name="count" value="{$count}" /> 
                    <xsl:apply-templates select=".//field[not(@data-type = 'boolean')]" mode="search" />
                    <xsl:apply-templates select=".//field[@data-type = 'boolean']" mode="search" />
                    <div class="buttons">
                        <input class="btn btn-primary" type="submit" value="&apply;" />
                        <input class="btn btn-primary" type="button" value="&reset;" onclick="javascript: window.location = 'http://{$domain}/market/';" />
                    </div>
                </form>
    </xsl:template>
« Последнее редактирование: 12 Мая 2015, 19:08:09 от Axiomateria »

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
В самой форме, данное правило можно установить, но оно откуда-то должно знать, что показывать, а что скрывать.
По логике, вы можете знать это только получив список уникальных производителей у товаров данной категории.

1. Делаем на уровне xml. Получаем xml всех товаров раздела (catalog getObjectsList). Силами xslt, при выводе производителя в фильтре, проверяем есть ли он в xml всех товаров.
Если товаров немного, то подойдет, но скорее всего это будет неоправданной нагрузкой на сайт.

2. При выводе каждого производителя в фильтре, делаем запрос к кастомному макросу. Макрос делает выборку товаров с данным производителем в данной ктаегории и если ли хоть один товар есть, то выводим данного производителя. Не самый оптимальный спосом, но быстрее предыдущего (если товаров намного больше, чем производителей).

3. Переписываем макросы фильтра и при формировании списка (в том числе списка производителей), сразу делаем проверку, есть ли такой производитель в данном разделе (кастомный макрос из способа 2 или его модификации, только вызывается он не из xslt, а из php). Быстрее предыдущего, но надо возиться с кастомными макросами.

3+ Переписываем макросы фильтра и при формировании списка производителей, делаем прямой sql запрос на получении всех уникальных производителей у товаров данной категории. Самый самый быстрый, но сложен, так как надо копаться с прямыми sql запросами. Используется только на проектах, где вы все затачиваете только ради скорости, так как гибкость работы с фильтром может теряться.