Битрикс - недоступные товары ломают скрипт в каталоге
Недавно нашли ошибки в 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; }
После этой проверки скрипт начнет работать и все скрипты работают нормально. Снова начинает работать лупа и переключение между табами.