Содержание
Введение
Данная статья рассказывает о технологии управления каталогом товаров интернет-магазина, и с теми или иными вариациями применима к большинству сайтов, использующих решение для создания интернет-магазина на платформе 1С-Битрикс. В основе технологии лежит идея управления счётчиком просмотров товара с целью вывода его на первый план (либо наоборот) при использовании сортировки по популярности (среднему количеству просмотров).
Общая методика
Управление счётчиками осуществляется путём модификации базы данных инсталляции 1С-Битрикс: Управление сайтом.
Инструменты и окружение
Данное руководство написано для использования в следующем стеке технологий:
- 1C-Битрикс Управление сайтом 14
- 1С 8.2 с конфигурацией Управление торговлей
В статье рассматривается подход с использованием веб-браузера и администраторского интерфейса 1С-Битрикс.
Практическая часть
Вариант 1. Простой
Важное предупреждение: Будьте внимательны при выполнении любых запросов, изменяющих содержимое базы данных. Неосторожные действия могут иметь непредсказуемые последствия.
Допустим, нам нужно сделать товар более «популярным». В самом простом случае потребуется его ID. Чтобы узнать ID позиции каталога, нужно открыть в браузере интерфейс администрирования 1С-Битрикс (например, http://avtozip.su/bitrix/admin/). После процедуры аутентификации нужно найти товар в каталоге: Контент ⇒ Каталог ⇒ <Название каталога>. Нам понадобится значение поля ID.
Далее, открываем интерфейс для создания SQL-запроса: Настройки ⇒ Инструменты ⇒ SQL запрос. В форме редактирования вводим запрос следующего вида:
UPDATE b_iblock_element SET SHOW_COUNTER = 1000000 WHERE ID = 100500
В данном примере будет установлено значение количества просмотров в 1000000 для товара с ID 100500. Прямое задание значения является достаточно грубым подходом, делающим невозможной последующую оценку реальной популярности товара. Поэтому рассмотрим чуть более сложный пример:
UPDATE b_iblock_element SET SHOW_COUNTER = SHOW_COUNTER + 1000000 WHERE ID = 100500
В данном случае мы увеличиваем текущее значение счётчика просмотров на один миллион. В дальнейшем мы можем вычесть этот миллион, получив фактическое число просмотров. Чтобы одним запросом изменить значения счётчика сразу для нескольких товаров, нужно изменить запрос следующим образом:
UPDATE b_iblock_element SET SHOW_COUNTER = SHOW_COUNTER + 1000000 WHERE ID = 100500 OR ID = 9000 OR ID = 146
где 100500, 9000 и 146 — ID разных товаров. При всей своей простоте, данный способ обладает одним существенным недостатком. ID не является постоянной величиной и не привязан к номенклатурной позиции 1С со всеми вытекающими последствиями. Поэтому рассмотрим немного более сложный подход.
Вариант 2. Посложнее
Единственное отличие данного варианта от предыдущего — использование более надёжного идентификатора. Теперь мы будем использовать XML_ID, значение которого привязывается к конкретной позиции номенклатуры 1С. Чтобы получить XML_ID нужно использовать запрос следующего вида:
SELECT XML_ID FROM b_iblock_element WHERE ID = 100500
В нижней части страницы будет выведен результат примерно такого вида:
ca06e7d4-b1e9-11dc-a530-000e0c6b5b90
В дальнейшем используем это значение аналогичным c ID образом:
UPDATE b_iblock_element SET SHOW_COUNTER = SHOW_COUNTER + 1000000 WHERE XML_ID = ca06e7d4-b1e9-11dc-a530-000e0c6b5b90
Обновление сразу нескольких счётчиков происходит аналогично последнему примеру в http://tserver/dokuwiki/doku.php?id=unlimited_site_works:upravlenie_topovymi_tovarami#variant_1_prostoj Данный вариант лучше тем, что позволит использовать этот же запрос даже после обновления каталога, а также вести учёт изменений.
Вариант 3. Самый интересный
Данный вариант предполагает вовлечение 1С и обладает рядом преимуществ:
- Не требует доступа к администраторской панели 1С-Битрикс (при условии наличия других интерфейсов к БД)
- Проще в плане учёта изменений
- Содержит минимум шагов
Для использования данного способа нам понадобится код товара из номенклатуры 1С. Запрос имеет следующий вид:
UPDATE b_iblock_element SET SHOW_COUNTER = SHOW_COUNTER + 100000 WHERE ID = (SELECT MAX(IBLOCK_ELEMENT_ID) FROM b_iblock_element_property WHERE IBLOCK_PROPERTY_ID = 391 AND DESCRIPTION = 'Код' AND VALUE = 39201)
Получить количество просмотров для позиции можно так:
SELECT SHOW_COUNTER FROM b_iblock_element WHERE ID = (SELECT MAX(IBLOCK_ELEMENT_ID) FROM b_iblock_element_property WHERE IBLOCK_PROPERTY_ID = 391 AND DESCRIPTION = 'Код' AND VALUE = 39201)
сделать, чтобы UPDATE работал
