Битрикс - недоступные товары ломают скрипт в каталоге
Недавно нашли ошибки в 1С-Битрикс, связанную с работой скриптов. При разработке не был учтен очень важный момент связанный с отображением торговых предложений. Расскажет подробнее.
Очень важно учитывать доступность ссылки и работу страниц товара при продвижении сайта по следующим причинам:
- Вы заказывали статьи на эти товары и ссылки;
- Остаток товара не всегда есть и товар на заказ;
- У вас включена реклама и закончились остатки у товара, но вы вовремя не отключили рекламу;
- Престиж бренда и сайта.
В какой момент появляется ошибка
В настройка компонента 1С-Битрикс можно выбрать несколько вариантов: отдача 404 ответа (закрытие страницы от пользователя), отображение товара и торговых предложений с отсутствующими остатками, показывать товар и все предложения.
В настройках компонента выбраны следующие настройки:
- Недоступные товары: отображать в конце списка или в общем списке.
- Недоступные торговые предложения: не отображать.
Показывать все предложения товаров и закрывать их мы не хотим, потому что нам нужно продвигать сайт и страницы. Если скрывать торговые предложения, то может получиться ситуация когда все торговые предложения у товара отсутствуют, и в этот момент срабатывает ошибка. Перестают переключаться картинки в карточке товара, работать лупа и увеличение картинок, переключение табов (характеристики и описание).
Как исправить ошибку
Исправлять ошибку надо в файле script.js в компоненте catalog.element в функции JCCatalogElement. Проблема в том что в коде идет четкая проверка типа товаров и задается в переменной this.productType. Есть 3 варианта: ошибка, товар или набор, товар с торговыми предложениями. У нас строка 211 в script.js.
switch (this.productType) {
case 0:// no catalog
case 1://product
case 2://set
this.initProductData(); break;
case 3://sku
this.initOffersData(); break;
default: this.errorCode = -1;
}
Чтобы исправить ошибку, перед этой выборкой вставляем проверку на наличие предложений товара. Если у товаров нет предложений, то указываем что это обычный товар.
if(!BX.type.isArray(this.params.OFFERS)){
this.productType = 1;
}
После этой проверки скрипт начнет работать и все скрипты работают нормально. Снова начинает работать лупа и переключение между табами.