В данной статье рассматривается процесс полуручной конвертации свойств из строки в списки в Инфоблоках 1.0 в CMS Битрикс. Стоит заметить, что данный процесс возможен только в инфоблоках 1.0, так как в инфоблоках 2.0 значения при смене типа свойства не сохраняются. И да, в реальном проекте — описанные действия должны автоматизироваться (Например, можно обновлять свойства через АПИ Битрикса, а не через прямые запросы), но оптимизация процесса не является темой настоящей статьи.
В самом деле, весь процесс можно разделить на несколько шагов:
- Конвертация инфоблока в «инфоблоки 1.0»
- Смена типа свойства
- Заведение вариантов в поле типа «список»
- Отправка прямого запроса к БД через SQL-консоль битрикса
- Проверка результата
Конвертация инфоблока в «инфоблоки 1.0»
Для начала, в разделе инфоблок нужно изменить значения свойств на «В общей таблице». Делается это в пару кликов, но, имейте ввиду, что процесс может занять продолжительное время.
Смена типа свойства
Следующим (очень простым) шагом будет смена типа свойства. Делается это следующим образом:
В данном случае действительно всё просто. Можно переходить к следующему шагу:
Заведение вариантов в поле типа «список»
В строке со свойством нужно кликнуть кнопку с тремя точками (…), столбец «Изм.). Откроется всплывающее окно. Далее, следует прокрутить «в низ» всплывающего окна и вписать необходимые варианты. XML_ID создается автоматом, после сохранения.
Нажимаем «Сохранить» во всплывающем окне и «Применить» на списке свойств инфоблока. Снова открываем данное свойство и смотрим какие ID были присвоены элементам списка. Они скоро понадобятся.
Отправка прямого запроса к БД через SQL-консоль битрикса
На новой вкладке открываем SQL-консоль битрикса (Настройки > Инструменты > SQL запрос). И в форме запроса вводим примерно следующий запрос:
UPDATE b_iblock_element_property SET VALUE = 7497, VALUE_ENUM = 7497 WHERE IBLOCK_PROPERTY_ID = 6884 AND VALUE LIKE '%сть%'; UPDATE b_iblock_element_property SET VALUE = 7498, VALUE_ENUM = 7498 WHERE IBLOCK_PROPERTY_ID = 6884 AND VALUE LIKE '%ет%';
Где PROPERTY_ID — это значение ID свойства, VALUE и VALUE_ENUM — значение на которое меняется свойство, а VALUE LIKE ‘%что-то%’ — это текущее значение свойства. Далее исполняем запрос и переходим к последнему шагу, проверке значений.
Проверка результата
Для проверки результата нужно открыть таблицу b_iblock_element_property в разделе «Таблицы» в админке битрикса (Настройки > Производительность > Таблицы). Далее следует добавить в фильтр возможность фильтрации по полю IBLOCK_PROPERTY_ID.
После чего мы вбиваем ID свойства и должны в результатах следующую картину:
То есть в поле VALUE должны быть только ID элементов списка. Никаких тестовых значений быть не должно.
В заключение, следует заметить, что данная заметка носит достаточно «общий» характер. Лучше, конечно же, обновлять свойства не через прямой запрос, а через API. Так меньше вероятность, что что-то пойдет не так. Хотя, в некоторых случаях, оправдан и вышеизложенный подход.