Большое количество характеристик товаров в Bitrix

Практически в любом интернет-магазине у товаров рано или поздно накапливается значительное число характеристик. Если данный магазин работает на CMS Битрикс, то возникает вопрос: Есть ли оптимальное решение для хранения большого количества характеристик товара? Ведь если каждую характеристику заводить как простое свойство то, в случае действительно большого их количества — работа в админке стандартными средствами битрикс станет невозможна, так как всё это количество свойств будет выводится для каждого товара. Также, очень вероятно, что в публичной части сайта начнутся большие проблемы с производительностью, в частности, в компоненте каталога и в «умном фильтре». В настоящей статье рассмотрено одно из возможных решений данной проблемы «дефолтными» средствами битрикса, т.е. не прибегая к сторонним модулям и доработкам и не производя достаточно сомнительную операцию «деления каталога на различные инфоблоки». 

Итак, какое решение предоставляет битрикс в такой ситуации и есть ли оно вообще? Да, действительно, такое решение существует. Хотя, стоит признаться, автору данной статьи пришлось достаточно долго просматривать форум и справку битрикса, чтобы найти его. Суть данного решения — это привязка определенного свойства к разделам. То есть, свойство создается на весь каталог, но показываться оно будет только в тех разделах, к которым привязано.

Небольшое предварительное замечание: Если планируется действительно большое кол-во свойств-характеристик, как, например, в ситуации, случившейся с автором данной статьи, то перед заведением данных свойств нужно изменить настройки инфоблока таким образом, чтобы значения свойств хранились в общей таблице. Эта операция делается на вкладке: «Контент > Инфоблоки > Типы инфоблоков > Ваш инфоблок». На первой вкладке будет ссылка «Изменить место хранения свойств», нужно кликнуть на неё и произвести конвертацию.

Вариант первый. Заведение свойств через административную панель Битрикс.

В данном разделе описан процесс заведения свойств с привязкой к категориям стандартными средствами битрикс. Этот вариант вполне удобен во всех случаях, за исключением тех, когда нужно пересоздать большое количество свойств (например при переносе на «стандартный» битрикс свойств из какого-либо стороннего модуля).

Шаг 1. Создание свойства для раздела

Для интересующего раздела следует кликнуть «изменить» и перейти на вкладку «Свойства элементов». На данной вкладке будет список существующих свойств и «кнопка» для добавления нового свойства. В случае, если требуется завести новое свойство — то, следует выбрать [Создать] и кликнуть кнопку «добавить».

Если же данное свойство уже заведено — то, выбрать его и также кликнуть «добавить» (данное действие привяжет ранее созданное свойство к данной категории). Далее речь идет о добавлении нового свойства. После клика по «добавить» откроется всплывающее окно в котором нужно будет указать параметры данного свойства: Название, сортировку, тип, символьный код и тому подобное:

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

Шаг 2. Выведение свойства на странице редактирования элемента.

Для того, чтобы вывести свойства-характеристики для данной категории отдельным списком потребуется произвести перечисленные ниже манипуляции:

  1. Переходим на страницу редактирования формы добавления/изменения товара («шестеренка» в соответствующем разделе)
  2. Удаляем из формы все свойства и «параметр» под названием «—значения свойств» (именно с двумя «тире» перед словом «значения»).
  3. (Опционально) Добавляем отдельную вкладку «характеристики»
  4. Выводим наши свойства для данной категории на данной вкладке: Для этого нужно добавить на данную вкладку «параметр» «Значения свойств» (в данном случае тот, который без двух дефисов).

После данных «манипуляций» при редактировании товара на вкладке «характеристики» будут отображаться только те свойства, которые привязаны к данному разделу.

Шаг 3. Выведение созданных свойств в «умном фильтре» и на карточке товара

На данном шаге действия стандартны:

  • Те свойства категорий, которые следует показывать в «умном фильтре» следует отметить соответствующей галкой на вкладке «свойства элементов»
  • На вкладке «редактировать параметры компонента» (каталога) в публичной части сайта указать необходимые свойства в «умном фильтре», модуле сравнения и детальной странице элемента в соответствующих полях.

Собственно, весь процесс заведения «свойства-характеристики» заключается в перечисленных выше шагах.

Однако, если таких свойств нужно завести, к примеру, больше тысячи в достаточно ограниченный промежуток времени и одно и то же свойство привязывается к ряду категорий одновременно. Как поступить в таком случае? Единственный рациональный выход — это заведение свойств через API битрикса.

Вариант второй. Заведение свойств через API битрикса.

В рамках данного подхода стоит воспользоваться командной php-строкой Битрикса для отправки необходимых команд на добавление и привязку свойства. В случае автора данной статьи команды выглядели следующим образом:

$arFields = Array("NAME" => "Хромированная решетка","ACTIVE" => "Y","SORT" => "	370","CODE" => "","PROPERTY_TYPE" => "S","IBLOCK_ID" => 28,"WITH_DESCRIPTION" => "N",); 
$iblockproperty = new CIBlockProperty; 
$PropertyID = $iblockproperty->Add($arFields); 
CIBlockSectionPropertyLink::Delete(0, $PropertyID);
CIBlockSectionPropertyLink::Add(147, $PropertyID, $arLink = array());
CIBlockSectionPropertyLink::Add(423, $PropertyID, $arLink = array());
CIBlockSectionPropertyLink::Add(332, $PropertyID, $arLink = array());

На первой строке задаются необходимы параметры для свойства (В данном случае — это свойство типа «Строка»). Строка $iblockproperty->Add… — добавляет необходимое свойство к данному инфоблоку.

Строка CIBlockSectionPropertyLink::Delete(0, $PropertyID); — отвязывает данное свойство от всех разделов (необходимое условие для нового свойства. Без его выполнения не получится привязать свойство к определенным разделам).

И наконец, последние три строки привязывают данное свойство к категориям с ID равным 147, 423, 332. Собственно, эта небольшая команда заменяет «ручную» работу по привязке свойства к разделу.

Также, через API можно реализовать установку для свойства галки «показывать в умном фильтре», но автор данной статьи, ввиду большого объема свойств, которые нужно было завести через консоль, не рискнул тестировать данный момент.

Мнение автора данной статьи на этот счет следующее: Очень странно, что у битрикса довольно странная реализация хранения большого количества характеристик товаров. Наверное, можно назвать это недоработкой. Не совсем понятно, почему по-умолчанию нельзя хранить свойства в стороннем инфоблоке (как было ранее реализовано в некоторых модулях для битрикса). Ведь в случае мало-мальски крупного интернет-магазина с большим количеством характеристик — их заведение и поддержание в актуальном состоянии превращается в довольно-таки трудоемкий процесс. Возможно, в будущем что-то измениться, а пока, выше было описано единственное приемлемое «дефолтное» решение для данной ситуации.