19 мая 2019

Битрикс - недоступные товары ломают скрипт в каталоге

Недавно нашли ошибки в 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;
}

После этой проверки скрипт начнет работать и все скрипты работают нормально. Снова начинает работать лупа и переключение между табами.


Количество показов: 2