Выбрать курс
0  /  14

Инструменты, коллекции, групповые действия / Перекрестные продажи / Аналогичные, рекомендуемые, похожие товары / Аксессуары

Функционал

Механизм коллекций и групповые действия

Механизм коллекций - это основной инструментарий модуля. Он расположен по следующему пути в административном меню: Сервисы - Инструменты, коллекции, групповые действия - Коллекции.

Но по умолчанию выключен. Включается в настройках модуля: Настойки - Настройки продукта - Настройки модулей - Инструменты, коллекции, групповые действия... В момент включения создается необходимая база (инфоблоки) для корректной работы механизма.

Доступны следующие действия над элементами инфоблоков:

  • Привязка набора элементов к разделам инфоблока.
  • Действие «Перекрестные продажи».
  • Групповое действие "Отвязать от разделов инфоблока".
  • Групповое действие "Перенести в раздел".
  • Групповое редактирование свойств.
  • Групповое редактирование значений свойств с заменой макросов.
  • Групповое редактирование свойств и запись в них предустановленного массива фильтра.
  • Пошаговое удаление элементов инфоблока согласно выборке.
  • Пошаговое выполнение произвольного PHP действия над элементами инфоблока согласно выборке.

Каждое действие может содержать разный набор полей, но основные следующие:

  • Активность (обязательное). При отключении активности, профиль не будет никак задействован, не будет индексироваться ни агентом, ни ручным запуском.
  • Индексировать с помощью Агента. При включении опции профили будут запускаться специальной функцией агента CScoderBaseAgents::ReindexProfiles(). Порядок очередности запуска профилей происходит согласно индексу сортировки. К этой опции нужно подходить с умом, т.к. индексация при запуске происходит в один шаг, если профилей или индексируемых элементов достаточно много, сервер может не справиться с нагрузкой. Рекомендуется переводить работу агента на cron. Для запуска профилей отдельно можно использовать функцию CScoderBaseAgents::ReindexCollection($set_id), где $set_id - ид коллекции.
  • Название
  • Сортировка. Используется при запуске индексации профилей с помощью агента. Чем меньше индекс, тем раньше запуститься.
  • Количество элементов, обрабатываемых за один шаг при переиндексации. Используется при ручном пошаговом запуске индексации.
  • Выберите действие (обязательное). Само действие, список доступных действий указан выше.
  • Выберите инфоблок (обязательное). Инфоблок, над элементами которого будет выполняться действие.
  • Коллекция. После заполнения обязательных полей, указанных выше, становится доступен ФИЛЬТР, с помощью которого и задается необходимая выборка элементов.

В качестве фильтра используется стандартный фильтр для работы с элементами инфоблока, который многим знаком, если работали на элементами в административном разделе.

filter

В фильтре используются стандартные поля элементов инфоблока и свойства. Чтобы свойство стало доступным в в фильтре, необходимо в его настройках включить Выводить на странице списка элементов поле для фильтрации по этому свойству, подробнее в официальной документации.

Принцип работы механизма рассмотрим на примере одного из действий: Привязать к разделам (при данном действии элементы привяжутся к новому разделу, но также останутся в старых). Например необходимо создать в каталоге посадочную страницу (раздел), где будут отображаться товары по определенному критерию: все футболки стоимостью выше 1000 руб. красного цвета. Алгоритм следующий.

  1. Создается стандартный раздел инфоблока в нужном каталоге (инфоблоке), например с названием "Красные футболки".
  2. Создается коллекция с помощью данного модуля, необходимо задать поля для профиля: активность, название, указать действие "Привязать к разделам", указать нужный инфоблок (ваш каталог). В итоге должно полуиться:

collections

Настройки фильтра следующие:

collections-filter

После переиндексации элементы (товары) привяжутся к нужному разделу (разделам) согласно заданному фильтру. Аналогичным образом настраиваются и прочие действия.

Конечно, важна поддержка актуальности подобных выборок. Для этого мы рекомендуем создать дополнительный, вспомогательный профиль для СБРОСА данных, который необходимо запускать до профиля основой выборки (коллекции). С течением времени характеристики элементов могут меняться и они перестают удовлетворять условиям выборки, следовательно их нужно отвязывать.

Групповое редактирование свойств

Групповое редактирование свойств - данное действие механизма коллекций требует особого внимания. Это инструмент для разного рода манипуляций над свойствами элементов инфоблока.

Данное действие позволяет массово редактировать свойства. При грамотном подходе позволяет решать большое количество служебных задач. Поддерживаются большинство типов, кроме файловых.

Наряду с полями профиля, которые описаны в предыдущей странице, для данного действия доступны поля:

  • Укажите свойство. свойство которое редактируется (обязательно).
  • Присваиваемое значение для свойства.
Наглядный пример, как можно использовать действие приведен в статье Вывод интервалов цен в умном фильтре. Настройки одного из профилей выглядят следующим образом:

collections-price


Похожее действие - групповое редактирование значений свойств с заменой макросов. Данное действие работает только со свойствами типа строка. Огромным преимуществом данного действия является, то что позволяет записать не только статичные данные, но и заменять макросы данными из других полей и свойств элемента инфоблока. 

Для действия доступно еще одно поле при настройке профиля:

  • Дополнительные поля, доступные в массиве $arFileds (разделитель ","). По умолчанию в массиве данных доступны только следующие поля: ID и IBLOCK_ID элемента инфоблока, так сделано с точки зрения оптимальности запросов. Если есть необходимость использования иных полей просто впишите через запятую доступные поля, например: NAME, PREVIEW_TEXT и т.п. Макросы заменяются реальными данными, аналогичный принцип можно наблюдать в стандартных почтовых шаблонах.

macros

Макросы формируются из кода  стандартных полей с добавлением символа # с обеих сторон. Например #NAME#, #CODE#, #PROPERTY_КОД_СВОЙСТВА_VALUE#, #PROPERTY_КОД_СВОЙСТВА_ENUM_ID# и т.п.


Перекрестные продажи / Аналогичные, рекомендуемые, похожие товары / Аксессуары

Внимание: В статье приведены примеры, описывающие принцип реализации. Для внедрения рекомендуется обратиться к разработчикам.

Очень часто на странице товара необходимо выводить список дополнительных предложений, на основании тех или иных параметров

Это всем известные блоки похожих, рекомендуемых, аналогичных товаров. Это могут быть также аксессуары, "обычно с этим товаром покупают". Синонимов можно подобрать множество, иными словами - перекрестные продажи.

Для упрощения реализацию подобных блоков и служит данный функционал этого модуля (Сервисы -> Инструменты, коллекции, групповые действия -> Коллекции).

Принцип работы следующий:

  1. Выбирается группа товаров (ГРУППА 1), с помощью специального конструктора. В ней доступно множество параметров для подбора товаров, например, свойства, название, символьный код, разделы, доступность.
  2. Для данной ГРУППЫ 1, определяется другая группа товаров (ГРУППА 2), которые необходимы выводить в нужных дополнительных блоках в детальной карточке товара, описанных выше.
Инструменты_коллекции_групповые действия - Перекрестные продажи
Стоит понимать, что данный функционал - это не панацея, а инструмент, как и с любым инструментом, с ним нужно уметь пользоваться.

При переиндексации, для товаров ГРУППЫ 1 в указанное вами свойство типа строка записывается сериализованный массив сформированного фильтра на базе ваших настроек для ГРУППЫ 2. Подобных выборок можно создавать сколько угодно и записывать в разные свойства, таким образом определяя в дальнейшем разные блоки дополнительных товаров.

В свойства запишется строка вида:

a:5:{s:6:"ACTIVE";s:1:"Y";s:10:"SECTION_ID";s:3:"329";s:14:">=PROPERTY_196";s:4:"4000";s:14:"<=PROPERTY_196";s:4:"6000";s:9:"IBLOCK_ID";s:2:"14";}

Если произвести его обработку unserialize, то получится нужный массив фильтра:

array (
  'ACTIVE' => 'Y',
  'SECTION_ID' => '329',
  '>=PROPERTY_196' => '4000',
  '<=PROPERTY_196' => '6000',
  'IBLOCK_ID' => '14',
)

Данный фильтр можно использовать и указывать как фильтр, например, при вызове компонента Элементы раздела (bitrix:catalog.section) или списка новостей (bitrix:news.list) или других подобных компонентов. Это позволит в разы облегчить труд разработчика, и, самое главное, уйти от костылей.

Например, стандартный шаблон компонента bitrix:catalog.element (или bitrix:news.detail), а именно файл template.php необходимо настроить примерно так:


global $arFilter;
$arFilter = unserialize($arResult["PROPERTIES"]["КОД_СВОЙСТВА"]["~VALUE"]);
$APPLICATION->IncludeComponent(
  "bitrix:catalog.section",
  "",
  Array(
    //...множество других параметров
    "FILTER_NAME" => "arFilter",
    //...множество других параметров
)

Внимание: Во время переиндексации перебираются только элементы, которые удовлетворяют фильтру (поле Коллекция (если фильтр пуст, то применяется на все товары выбранного инфоблока)). Следовательно обязательно рекомендуется при перенастройке сбрасывать значения свойств, которые используются для реализации функционала дополнительных товаров. Это делается легко, данным же модулем, действие "Групповое редактирование свойств", выбрать все товары, например условие ID > 0, и сделать свойство пустым. При настройке запуска профилей через крон, профиль сброса должен вызываться раньше других профилей.


Счетчики и дублирование информации

Модуль выполняет несколько служебных действий:

  • Подсчитывает количество созданных заказов по тому или ному товару и записывает данные в специальное свойство самого товара. Т.е. с каждым попаданием товара в заказ, величина данного свойства увеличивается на количество единиц товара сформированного заказа. Данное свойство можно использовать в дальнейшем, например, как сортировка "По популярности" при выводе товаров списке в каталоге интернет-магазина.
  • Подсчитывает количество оплаченных заказов по тому или ному товару. Функционал аналогичен предыдущему, за исключением, то что количество товаров попавших заказ, учитываются строго по оплаченным заказам.
  • Дублирует Доступное количество (поле Торгового каталога) в свойство товара.
  • Сохраняет минимальную, максимальную, а также оптимальную (для группы пользователей "Все пользователи (в том числе не авторизованные)") цену в свойства. Можно использовать:
    • в конструкторе скидок и правил работы с корзиной, т.к. стандартные цены  там не задействованы;
    • в коллекциях текучего модуля;
    • в модуле Товарные коллекции в разделах;
    • в умном фильтре, например, вывод интервалов цен;
    • при выводе товаров в списке каталоге с сортировкой по цене и многое другое.

Расширенные Пункты меню

В модуль входит компонент Пункты меню [scoder:menu.sections], за основу взят стандартный компонент bitrix:menu.sections. Данный компонент модифицирован и дополнен новыми примочками, которых так часто и так остро не хватает при разработке:

  • Добавлен внешний фильтр - параметр компонента, с помощью которого можно фильтровать список выводящихся разделов.
  • Добавлена возможность отправлять дополнительные данные (поля и пользовательские поля) о разделе в меню. Эти данные становятся доступны в ключе PARAMS шаблона компонента bitrix:menu. Список доступных дополнительных полей удобно задается в параметрах компонента scoder:menu.sections.
  • Возможность формировать пункты меню из элементов инфоблока согласно иерархии.

Параметры меню

Синхронизация разделов и элементов разных инфоблоков

Механизм синхронизации инфоблоков позволяет копировать разделы и элементы одного инфоблока (базового) на другой (дочерний). Доступно по следующему пути в административном меню: Сервисы - Инструменты, коллекции, групповые действия - Инфоблоки (настройки синхронизации).

Может служить как для единовременного копирования данных из одного инфоблока на другой, так и периодически. Функционал реализован на профилях. Т.е. возможно настроить множество профилей синхронизации данных (разных инфоблоков), вносить изменения, удалять профили.

Каждый профиль имеет следующие поля

  • ID - уникальный идентификатор профиля, задается автоматически.
  • Активность
  • Название (обязательно)
  • Сортировка
  • Базовый инфоблок - инфоблок, откуда копировать данные (обязательно)
  • Дочерний инфоблок - инфоблок, куда копировать данные (обязательно)
  • Количество элементов, обрабатываемых за один шаг при переиндексации - служебный параметр, для процедуры переиндексации (обязательно)
  • Блок настроек для синхронизации Разделов
  • Блок настроек для синхронизации Элементов

синхорнизация инфоблоков 1

синхорнизация инфоблоков 2

Блок настроек для синхронизации Разделов и Блок настроек для синхронизации Элементов - это и есть основной интерфейс как и что синхронизировать.

Доступные поля:

  • Автоматизация синхронизации. При включенной опции, поля дочернего инфоблока, указанные в таблице синхронизации, будут автоматически редактироваться при изменениях в эквивалентных объектах в базовом инфоблоке.
  • Признак идентификации. Признаком могут служить следующие поля объектов: название, внешний код, символьный код. Это такой признак, при совпадении которого объект из дочернего инфоблока будет эквивалентен объекту из базового инфоблока. (обязательно). Обратите внимание, в базовом инфоблоке у объектов выбранное поле (признак идентификации) не должно быть пустым, должно быть уникальным для каждого.
  • Что делать с разделами из дочернего инфоблока при удалении из базового. Говорит само за себя. Доступны следующие действия: ничего, деактивировать, удалить.
  • Таблица синхронизации. Задает какие поля и при каких событиях синхронизировать. Если не нужно синхронизировать некоторые поля при определенных событиях, то галочку напротив поля необходимо снять.
    • Столбец Добавление отвечает за синхронизацию в момент добавления объекта, т.е. если в дочернем инфоблоке еще не был создан объект эквивалентный базовому.
    • Столбец Редактирование отвечает за синхронизацию в момент редактирования объекта, т.е. если в дочернем инфоблоке уже создан объект эквивалентный базовому.

Примеры использования приведены в статье Новые возможности для интернет-магазинов.

Генератор торговых предложений (SKU)

Для работы функционала, описанного в данном материале, для модуля Инструменты, коллекции, групповые действия / Перекрестные продажи обязательно требуется дополнительный модуль  Генератор торговых предложений (SKU).

Данный модуль на основании нескольких значений одного или разных свойств базового товара (каталога) автоматом создает торговые предложения этого же товара.

Каждому значению свойства товара (из каталога) ставится в соответствии значение свойства торгового предложения. Идентификация этих значений происходит по XML_ID. Поддерживается свойства типа Справочник (S:directory) и Список (L).

Внимание! Значения выбранного свойства для торговых предложений не создаются модулем. Их нужно создать самостоятельно, чтобы каждому значению выбранных свойств каталога соответствовали значения выбранного свойства для торговых предложений. Если для значения какого то свойства товара нет эквивалентного значения в свойстве торгового предложения, то предложение не генерируется.

Более удобно иметь дело со свойствами типа Справочник, если для всех свойств указана привязка к одному справочнику (Highload-блоку).

Для работы механизма требуется:

  • В настройках модуля: Настройки -> Настройки продукта -> Настройки модулей -> Инструменты, коллекции, групповые действия... должен быть включен механизм коллекций.
  • Когда механизм коллекций включен и оба модуля установлены (см. выше), то в административном меню Сервисы -> Инструменты разработчика -> Генератор торговых предложений становятся доступны профили для настройки генерации SKU.
  • Добавить и настроить профиль (профили).

Поля профиля:

  • ID - уникальный идентификатор профиля, назначается автоматически.
  • Тип генератора - всегда Соло.
  • Активность - при отключении активности, настроенный профиль не функционирует.
  • Название профиля - произвольное название, на ваше усмотрение
  • Шаблон наименований SKU - оставляем #CML2_LINK_NAME#
  • Сортировка - индекс сортировки профиля.
  • Инфоблок товаров.
  • Инфоблок торговых предложений.
  • Свойства товаров - необходимо выбрать свойства, на основании которых и будут генерироваться торговые предложения для соответствующих товаров.
  • Свойство торговых предложений - необходимо выбрать единственное свойство, значения которого будут эквивалентны значениям свойств товаров при генерации торговых предложений.

Примеры использования инструментов разработчика

Автоматическое создание картинки для анонса и детальной картинки товара из дополнительных изображений

Наверное, всем известна опция в настройках инфоблока Создавать картинку анонса из детальной (если не задана). Но как быть, если PREVIEW_PICTURE или DETAIL_PICTURE нужно создавать из дополнительных изображений MORE_PHOTO?

Существует различное варианты реализации. Предлагаем во внимание способ решения через механизм коллекций модуля Инструменты, коллекции, групповые действия.
Преимуществом данного подходя является возможность записи превью и детальных картинок как автоматом при изменении дополнительных картинок. так и массовое редактирование для уже существующих элементов инфоблока. Кроме того можно использовать оба варианта, так и по отдельности.
Приведенная в данном материале информация не является каким то обязательным правилом. Это один из вариантов решения.

Суть метода состоит в следующем:

  • Используется произвольное PHP-действие механизма коллекций.
  • Настраивается коллекция с действием Произвольное PHP выражение, программируется функция обработки картинок.


Настроенная коллекция:

PREVIEW_PICTURE и DETAIL_PICTURE из MORE_PHOTO.jpg

Функцию необходимо определить в init.php. Назовём его, например, __set_picture(). Для начала как выглядит сама функция в нашем исполнении:

function __set_picture($arFields,$arUserFields = array(),$is_preview,$is_detail)
{
	if ($arFields['ID'] >0
		&&	$arFields['IBLOCK_ID'] > 0)
	{
		$property_code = "MORE_PHOTO";		//КОД свойства Изображения [MORE_PHOTO] - указывать свой
		$property_id = 45;					//ИД свойства Изображения [MORE_PHOTO] - указывать свой
		
		$btrue = false;
		$file = false;
		if (is_array($arUserFields['PROPERTY'][$property_code]['VALUE'])
			&& count($arUserFields['PROPERTY'][$property_code]['VALUE'])>0)
		{
			$first_file_id = $arUserFields['PROPERTY'][$property_code]['VALUE'][0];
		}
		if (is_array($arUserFields['PROPERTY_VALUES'][$property_id])
			&& count($arUserFields['PROPERTY_VALUES'][$property_id])>0)
		{
			if (is_array($arUserFields['PROPERTY_VALUES'][$property_id]['n0']['VALUE']))		//если грузятся картинки через админку
			{
				if ($arUserFields['PROPERTY_VALUES'][$property_id]['n0']['VALUE']['error']==0)
					$btrue = true;
			}
			elseif (is_array($arUserFields['PROPERTY_VALUES'][$property_id]) 					//если грузятся картинки через апи с указанием ИД свойства
				&& isset($arUserFields['PROPERTY_VALUES'][$property_id]['name']))
			{
				if ($arUserFields['PROPERTY_VALUES'][$property_id]['error']==0)
					$btrue = true;
			}
			elseif (is_array($arUserFields['PROPERTY_VALUES'][$property_code]) 					//если грузятся картинки через апи с указанием КОДА свойства
				&& isset($arUserFields['PROPERTY_VALUES'][$property_code]['name']))
			{
				if ($arUserFields['PROPERTY_VALUES'][$property_code]['error']==0)
					$btrue = true;
			}
		}
		
		//если меняются Изображения
		if ($btrue)
		{
			if (!is_array($file))
			{
				$db_props = CIBlockElement::GetProperty($arFields['IBLOCK_ID'], $arFields['ID'], array("sort" => "asc"), Array("CODE"=>$property_code));
				if($ar_props = $db_props->Fetch())
				{
					$first_file_id = $ar_props['VALUE'];
				}
				
			}
			if ($first_file_id>0)
			{
				if ($first_file_id>0)
					$file = CFile::MakeFileArray($first_file_id);
				
				$el = new CIBlockElement;
				$arload = Array();
				if ($is_preview)
					$arload["PREVIEW_PICTURE"] = $file;
				if ($is_detail)
					$arload["DETAIL_PICTURE"] = $file;
				
				$res = $el->Update($arFields['ID'], $arload);
			}
			
		}
	}
}


Параметры функции:

  • $arFields - массив, описывающий элемент инфоблока. (доступен в функции из механизма коллекций)
  • $arUserFields - массив, описывающий элемент инфоблока в обработчике событий добавления/редактирования элемента. При ручной индексации равен $arFields. При индексации с помощью обработчиков событий, возвращает массив полей элемента информационного блока. (доступен в функции из механизма коллекций)
  • $is_preview и $is_detail - самостоятельно определяемые параметры, указывают редактировать или нет анонсовую или детальную картинку соответственно.

Настройка редиректов со старых URL на новые

Когда сайт долгое время находился без внимания SEO-специалистов, то очень часто возникает задача поменять существующие адреса товаров на новые.

Но к этому процессу нужно подходить деликатно. Было бы ошибкой просто поменять пути к товарам, т.к. многие элементы уже могли проиндексировать в поисковых системах, таких как Google или Яндекс. Необходимо настроить 301-редиректы со старых УРЛ на новые. Когда товаров действительно много, то прописать вручную все редиректы в .htaccess не очень удобно и правильно, т.к. при слишком большом объеме этого файла ничего хорошего не следует.

Один из возможных способов решения такой задачи это программирование небольшого скрипта и, конечно, не без помощи модуля Инструменты, коллекции, групповые действия. С помощью модуля вопрос решается в несколько этапов:

1) Создается служебное свойство в инфоблоке товаров (каталог), типа Строка. Например Старый URL товаров с символьным кодом SC_DETAIL_PAGE_URL.

2) В созданное новое свойство и записывается текучие пути к товарам. Как это сделать?

Тут и подключается модуль Инструменты, коллекции, групповые действия.

Внимание! Убедитесь, что в настройках инфоблока товаров шаблон URL страницы детального просмотра задан верный и соответствует текучим URL.

Необходимо создать коллекцию с действием Групповое редактирование значений свойств с заменой макросов, в дополнительных полях указать DETAIL_PAGE_URL, чтобы данное поле было доступно для замены макросов, выбрать нужно свойство, куда будем записывать текучие URL (см. пункт 1), для присваиваемых значений этого свойства в коллекции указать #DETAIL_PAGE_URL#. После сохранения коллекции выполнить переиндексацию.

ЗАПИСЬ СТАРЫХ URL В СВОЙСТВО


Таким образом в свойства товаров Старый URL товаров запишутся их пути, например: /catalog/ELEMENT_CODE1/, /catalog/ELEMENT_CODE1/ и т.д.

На этом работа модуля заканчиваются. Далее необходимо прописать скрипт переадресации, который будет проверять текучий URl посетителя. И, если он старый, то находить новый адрес товара и направлять автоматически на новый.


3) В настройках инфоблока товаров шаблон URL страницы детального просмотра поменять на новый, т.е. на такой, какими должны быть новые адреса товаров.

4) Написать скрипт переадресации предлагаем  в обработчике событий главного модуля 1С-Битрикс  OnBeforeProlog. Наш вариант представлен ниже:

// файл /bitrix/php_interface/init.php
AddEventHandler("main", "OnBeforeProlog", Array("CScoderClass", "OnBeforePrologHandler"));
class CScoderClass
{
	const IBLOCK_CATALOG_ID = 1; 		//TODO - ИД вашего каталога
	const CACHE_TIME = 36000000000; 	//TODO - время жизни кэша
	function OnBeforePrologHandler()
	{
		global $USER,$APPLICATION;
		$page = $APPLICATION->GetCurPage(false);
		//проверяем УРЛ. Редирект со старых УРЛ товаров
		if (stripos($page,'/catalog/')===0)
		{
			$ar_exp = explode("/",$page);
			if (count($ar_exp)>=4)
			{
				$arSelect = Array("ID", "IBLOCK_ID","NAME", "DETAIL_PAGE_URL");
				$filter = Array(
					"IBLOCK_ID"=>self::IBLOCK_CATALOG_ID,
					"ACTIVE_DATE"=>"Y",
					"ACTIVE"=>"Y",
					"PROPERTY_SC_DETAIL_PAGE_URL" => $page,
				);

				//Запрос с кешированием
				$cache = new CPHPCache();
				$cache_time = self::CACHE_TIME;
				$cache_id = 'sc_element_'.serialize($filter);
				$cache_path = '/scoder/iblock/';
				if ($cache_time > 0 && $cache->InitCache($cache_time, $cache_id, $cache_path))
				{
					$res = $cache->GetVars();
					if (is_array($res["arFields"]) && (count($res["arFields"]) > 0))
					$arFields = $res["arFields"];
				}
				if (!isset($arFields))
				{
					$res = CIBlockElement::GetList(Array("ID"=>"ASC"), $filter, false, Array("nTopCoumt"=>1), $arSelect);
					if($ob = $res->GetNextElement())
					{
						$arFields = $ob->GetFields();
					}

					if ($cache_time > 0)
					{
						$cache->StartDataCache($cache_time, $cache_id, $cache_path);
						$cache->EndDataCache(array("arFields"=>$arFields));
					}
				}
				if (is_array($arFields) && strlen($arFields['DETAIL_PAGE_URL'])>0)
				{
					if ($page != $arFields["DETAIL_PAGE_URL"])
					{
						LocalRedirect($arFields["DETAIL_PAGE_URL"], false, "301 Moved Permanently");
					}
				}
			}
		}
	}
}
Внимание! На момент подключения скрипта в настройках инфоблока товаров шаблон URL страницы детального просмотра должен быть уже изменен на новый (пункт 3).

Настройка title, h1 и хлебных крошек. Взаимодействие со стандартными возможностями SEO

Внимание: В статье приведены примеры, описывающие принцип реализации. Для внедрения рекомендуется обратиться к разработчикам.

Не так давно возникала задача задать разные значения для заголовка окна браузера (title), заголовка страницы (H1) и цепочки навигации.

Камнем преткновения стала цепочка навигации. Как оказалось, если использовать шаблоны SEO для META, то цепочка навигации формируется на базе нее.

Кастомизировать логику формирования хлебных крошек оказалось себе дороже, было решено пойти по более легкому пути, а именно менять логику формирования title и H1. Иными словами для хлебных крошек использовать стандартные возможности SEO (вкладка SEO в карточке редактирования товаров или разделов ), а для title и H1 использовать свойства товаров (элементов) и пользовательские поля разделов.

В настройках комплексного компонента bitrix:catalog есть параметры "Установить заголовок окна браузера из свойства" и "Установить заголовок окна браузера из свойства раздела". Их у будем использовать.

Для случая с товарами в работе поможет модуль Инструменты, коллекции, групповые действия, данный программный продукт существенно облегчит работу и позволит более универсально задавать значения title и H1. 

Вопрос решается в несколько этапов:

1) Необходимо создать 2 свойства для товаров, например:

  • ЗАГОЛОВОК (H1) с кодом H1
  • ЗАГОЛОВОК ОКНА БРАУЗЕРА с кодом  TITLE, данное свойство указывается в параметре "Установить заголовок окна браузера из свойства" компонента bitrix:catalog (см. выше)
2) Значения этих свойств нужно заполнить. Для проекта, который мы реализовывали необходимо было заполнить по следующим шаблонам:
  • TITLE: #НАЗВАНИЕ_ТОВАРА# купить онлайн с доставкой,
  • H1: #НАЗВАНИЕ_ТОВАРА#  не дорого,
Если перевести на макросы, то:
  • #NAME# купить онлайн с доставкой
  • #NAME# не дорого

Для этих целей было решено использовать механизм коллекций модуля и групповое редактирование свойств с заменой макросов.

Настройки коллекции:

шаблон title

Таким образом решается задача определения Заголовка окна браузер.

Аналогично настраивается коллекция и для свойства ЗАГОЛОВОК (H1). Но чтобы названия брались из этого свойства, придется кастомизировать шаблоны вывода, где это необходимо.


Подобным же образом решается вопрос и для разделов инфоблока, но, к сожалению, редактирование разделов не поддерживается модулем. Для работы с разделами придется обратиться  к их апи и вашей смекалке.

Нестандартная сортировка товаров в каталоге

В данном уроке рассмотрен способ реализации нестандартных сортировок в каталоге, когда стандартными полями сортировки задачу не решить.

Например, при необходимости ранжирования набора товаров с одними характеристиками над другими:

Легко реализовать задачу, если нужно сортировать по алфавиту, по цене или по наличию.А что если у нас есть несколько групп товаров, которые нужно размещать выше остальных?

I-ая группа - высший приоритет

Например, в эту группу попадают товары, имеющие следующие параметры:

  • Производитель: Чебоксары.
  • Цвет: Красный.
  • Цена: более 2 000 руб.

II-ая группа имеет следующие характеристики:

  • Производитель: Иваново.
  • Название: содержит фразу "трикотаж".
  • В наличии.

III-ая группа:

  • Производитель: Киров.
  • Материал: шерсть.
  • В наличии.
  • Цена: более 3 000 руб.

Просто задав сортировку по какому то полю, эту задачу не решить. Сначала нужно подготовить некий индекс сортировки. Реализуем следующий принцип:

  • Создаем служебное свойство или свойства (зависит сколько нестандартных индексов сортировки нужно) элементов инфоблока, преимущественно типа "Число". Назовём его "Индекс сортировки 1".
  • Определяем набор параметров, от которых зависит те или иные значения "Индекса сортировки 1".
  • С помощью механизма коллекций модуля настраиваем профили для заполнения созданного нами свойства. Включаем для этих профилей автоматическую индексацию.

Для реализации этого принципа плотно используем модуль Инструменты, коллекции, групповые действия. Используя механизм - групповое редактирование свойств, создадим 3 профиля для наших 3-х групп товаров и назначаем для каждой группы свое значение свойства "Индекс сортировки 1".

  • I-ая группа - "индекс сортировки 1" равно 1500.
  • II-ая группа - "индекс сортировки 1" равно 1000.
  • III-ая группа - "индекс сортировки 1" равно 500.
  • Все остальные товары, можно оставить как есть, т.е. "индекс сортировки 1" останется для остальных товаров пустым.


На этом служебное свойство, имеющее нужные значения для элементов, готово. Далее останется использовать его в публичной части в списке товаров или новостей, т.е. задать при нужном действии поле для сортировки свойство "индекс сортировки 1", направление - по убыванию.


Новинки, лидеры и хиты продаж. Реализация стикеров

Способ решения стикеров для товаров с помощью Инструменты, коллекции, групповые действия / Перекрестные продажи / Аналогичные товары / Аксессуары.

Как сделать товар особенным?

Необходимо его выделить. Для этого лучше всего подойдут стандартные свойства инфоблока.

Модуль инструменты позволяет присваивать нужные значения нужным свойствам элементов инфоблока для дальнейшего их использования.

Например, "Новинки":

Инструменты, коллекции, групповые действия - Новинки


Боле подробно материал рассмотрен в статье Новинки и хиты продаж, рекомендуем посмотреть.