Но по умолчанию выключен. Включается в настройках модуля: Настойки - Настройки продукта - Настройки модулей - Инструменты, коллекции, групповые действия... В момент включения создается необходимая база (инфоблоки) для корректной работы механизма.
Доступны следующие действия над элементами инфоблоков:
Каждое действие может содержать разный набор полей, но основные следующие:
В качестве фильтра используется стандартный фильтр для работы с элементами инфоблока, который многим знаком, если работали на элементами в административном разделе.
В фильтре используются стандартные поля элементов инфоблока и свойства. Чтобы свойство стало доступным в в фильтре, необходимо в его настройках включить Выводить на странице списка элементов поле для фильтрации по этому свойству, подробнее в официальной документации.
Принцип работы механизма рассмотрим на примере одного из действий: Привязать к разделам (при данном действии элементы привяжутся к новому разделу, но также останутся в старых). Например необходимо создать в каталоге посадочную страницу (раздел), где будут отображаться товары по определенному критерию: все футболки стоимостью выше 1000 руб. красного цвета. Алгоритм следующий.
Настройки фильтра следующие:
После переиндексации элементы (товары) привяжутся к нужному разделу (разделам) согласно заданному фильтру. Аналогичным образом настраиваются и прочие действия.
Данное действие позволяет массово редактировать свойства. При грамотном подходе позволяет решать большое количество служебных задач. Поддерживаются большинство типов, кроме файловых.
Наряду с полями профиля, которые описаны в предыдущей странице, для данного действия доступны поля:
Похожее действие - групповое редактирование значений свойств с заменой макросов. Данное действие работает только со свойствами типа строка. Огромным преимуществом данного действия является, то что позволяет записать не только статичные данные, но и заменять макросы данными из других полей и свойств элемента инфоблока.
Для действия доступно еще одно поле при настройке профиля:
Макросы формируются из кода стандартных полей с добавлением символа # с обеих сторон. Например #NAME#, #CODE#, #PROPERTY_КОД_СВОЙСТВА_VALUE#, #PROPERTY_КОД_СВОЙСТВА_ENUM_ID# и т.п.
Внимание: В статье приведены примеры, описывающие принцип реализации. Для внедрения рекомендуется обратиться к разработчикам.
Очень часто на странице товара необходимо выводить список дополнительных предложений, на основании тех или иных параметров
Это всем известные блоки похожих, рекомендуемых, аналогичных товаров. Это могут быть также аксессуары, "обычно с этим товаром покупают". Синонимов можно подобрать множество, иными словами - перекрестные продажи.
Для упрощения реализацию подобных блоков и служит данный функционал этого модуля (Сервисы -> Инструменты, коллекции, групповые действия -> Коллекции).
Принцип работы следующий:
При переиндексации, для товаров ГРУППЫ 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. Данный компонент модифицирован и дополнен новыми примочками, которых так часто и так остро не хватает при разработке:
Может служить как для единовременного копирования данных из одного инфоблока на другой, так и периодически. Функционал реализован на профилях. Т.е. возможно настроить множество профилей синхронизации данных (разных инфоблоков), вносить изменения, удалять профили.
Каждый профиль имеет следующие поля
Доступные поля:
Примеры использования приведены в статье Новые возможности для интернет-магазинов.
Данный модуль на основании нескольких значений одного или разных свойств базового товара (каталога) автоматом создает торговые предложения этого же товара.
Каждому значению свойства товара (из каталога) ставится в соответствии значение свойства торгового предложения. Идентификация этих значений происходит по XML_ID. Поддерживается свойства типа Справочник (S:directory) и Список (L).
Наверное, всем известна опция в настройках инфоблока Создавать картинку анонса из детальной (если не задана). Но как быть, если PREVIEW_PICTURE или DETAIL_PICTURE нужно создавать из дополнительных изображений MORE_PHOTO?
Существует различное варианты реализации. Предлагаем во внимание способ решения через механизм коллекций модуля Инструменты, коллекции, групповые действия.Суть метода состоит в следующем:
Настроенная коллекция:
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); } } } }
Параметры функции:
Когда сайт долгое время находился без внимания SEO-специалистов, то очень часто возникает задача поменять существующие адреса товаров на новые.
Но к этому процессу нужно подходить деликатно. Было бы ошибкой просто поменять пути к товарам, т.к. многие элементы уже могли проиндексировать в поисковых системах, таких как Google или Яндекс. Необходимо настроить 301-редиректы со старых УРЛ на новые. Когда товаров действительно много, то прописать вручную все редиректы в .htaccess не очень удобно и правильно, т.к. при слишком большом объеме этого файла ничего хорошего не следует.
Один из возможных способов решения такой задачи это программирование небольшого скрипта и, конечно, не без помощи модуля Инструменты, коллекции, групповые действия. С помощью модуля вопрос решается в несколько этапов:
1) Создается служебное свойство в инфоблоке товаров (каталог), типа Строка. Например Старый URL товаров с символьным кодом SC_DETAIL_PAGE_URL.
2) В созданное новое свойство и записывается текучие пути к товарам. Как это сделать?
Тут и подключается модуль Инструменты, коллекции, групповые действия.
Необходимо создать коллекцию с действием Групповое редактирование значений свойств с заменой макросов, в дополнительных полях указать DETAIL_PAGE_URL, чтобы данное поле было доступно для замены макросов, выбрать нужно свойство, куда будем записывать текучие URL (см. пункт 1), для присваиваемых значений этого свойства в коллекции указать #DETAIL_PAGE_URL#. После сохранения коллекции выполнить переиндексацию.
Таким образом в свойства товаров Старый URL товаров запишутся их пути, например: /catalog/ELEMENT_CODE1/, /catalog/ELEMENT_CODE1/ и т.д.
На этом работа модуля заканчиваются. Далее необходимо прописать скрипт переадресации, который будет проверять текучий 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"); } } } } } }
Не так давно возникала задача задать разные значения для заголовка окна браузера (title), заголовка страницы (H1) и цепочки навигации.
Камнем преткновения стала цепочка навигации. Как оказалось, если использовать шаблоны SEO для META, то цепочка навигации формируется на базе нее.
Кастомизировать логику формирования хлебных крошек оказалось себе дороже, было решено пойти по более легкому пути, а именно менять логику формирования title и H1. Иными словами для хлебных крошек использовать стандартные возможности SEO (вкладка SEO в карточке редактирования товаров или разделов ), а для title и H1 использовать свойства товаров (элементов) и пользовательские поля разделов.
В настройках комплексного компонента bitrix:catalog есть параметры "Установить заголовок окна браузера из свойства" и "Установить заголовок окна браузера из свойства раздела". Их у будем использовать.
Для случая с товарами в работе поможет модуль Инструменты, коллекции, групповые действия, данный программный продукт существенно облегчит работу и позволит более универсально задавать значения title и H1.
Вопрос решается в несколько этапов:
1) Необходимо создать 2 свойства для товаров, например:
Для этих целей было решено использовать механизм коллекций модуля и групповое редактирование свойств с заменой макросов.
Настройки коллекции:
Таким образом решается задача определения Заголовка окна браузер.
Аналогично настраивается коллекция и для свойства ЗАГОЛОВОК (H1). Но чтобы названия брались из этого свойства, придется кастомизировать шаблоны вывода, где это необходимо.
Подобным же образом решается вопрос и для разделов инфоблока, но, к сожалению, редактирование разделов не поддерживается модулем. Для работы с разделами придется обратиться к их апи и вашей смекалке.
В данном уроке рассмотрен способ реализации нестандартных сортировок в каталоге, когда стандартными полями сортировки задачу не решить.
Например, при необходимости ранжирования набора товаров с одними характеристиками над другими:
Легко реализовать задачу, если нужно сортировать по алфавиту, по цене или по наличию.А что если у нас есть несколько групп товаров, которые нужно размещать выше остальных?
I-ая группа - высший приоритет
Например, в эту группу попадают товары, имеющие следующие параметры:
II-ая группа имеет следующие характеристики:
III-ая группа:
Просто задав сортировку по какому то полю, эту задачу не решить. Сначала нужно подготовить некий индекс сортировки. Реализуем следующий принцип:
Для реализации этого принципа плотно используем модуль Инструменты, коллекции, групповые действия. Используя механизм - групповое редактирование свойств, создадим 3 профиля для наших 3-х групп товаров и назначаем для каждой группы свое значение свойства "Индекс сортировки 1".
На этом служебное свойство, имеющее нужные значения для элементов, готово. Далее останется использовать его в публичной части в списке товаров или новостей, т.е. задать при нужном действии поле для сортировки свойство "индекс сортировки 1", направление - по убыванию.
Способ решения стикеров для товаров с помощью Инструменты, коллекции, групповые действия / Перекрестные продажи / Аналогичные товары / Аксессуары.
Как сделать товар особенным?
Необходимо его выделить. Для этого лучше всего подойдут стандартные свойства инфоблока.
Модуль инструменты позволяет присваивать нужные значения нужным свойствам элементов инфоблока для дальнейшего их использования.
Например, "Новинки":
Боле подробно материал рассмотрен в статье Новинки и хиты продаж, рекомендуем посмотреть.