Вывести производителей на сайте с отбором его товаров из каталога

Вывести производителей на сайте с отбором его товаров из каталога
Просмотров: 5234 | Комментариев: 20

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

Старый способ

Ранее, я уже писал заметку о том как реализовать данный функционал, посмотреть можно тут: Отсортировать элементы в Битрикс по свойству привязка к разделам 

Однако, для его реализации, строго необходимо, что бы у элементов каталога была привязка либо к разделам- либо к элементам другого инфоблока, в котором собственно хранятся производители. Вести подобный каталог достаточно тяжело, так как нужно постоянно отслеживать наличие привязки товара к элементу/разделу другого инфоблока. Если товаров под несколько тысяч, и они постоянно обновляются из 1С- это становится очень рутинной задачей.

Автоматизируй это

Намного практичнее, сделать вывод товаров в описании производителя автоматическим. Из 1С мы выгружаем товары каталога, у которых название производителя обычная строка.

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

"-Но. Я зашел в описание производителя и хотел бы сразу видеть все товары оного" скажет нам посетитель сайта. И мы его поймем и реализуем данный функционал. Причем, все будет работать автоматически без последующего вмешательства. Выгрузилась хоть тысяча новых товаров из 1С, все, они сразу раскидаются по своим производителям.

Рассказываю в видео, для реализации понадобится вот этот кусочек кода

Намного практичнее, сделать вывод товаров в описании производителя автоматическим. Из 1С мы выгружаем товары каталога, у которых название производителя обычная строка.

$brandName = $arResult["NAME"];
$GLOBALS['arrBrandName'] = array("PROPERTY_ИД_VALUE"=>$brandName);

Видео: вывод товаров бренда в Битрикс

Павел
Здравствуйте!
Я вывел на сайте список производителей с помощью компонента новостей (bitrix:news), сделал чтобы при переходе по производителю передавался параметр (ID) и когда пользователь переходит на страницу с списком товаров, отображались товары только этого производителя. На ней использовал компонент новость детально (bitrix:news.detail) для отображения картинки, названия и описания производителя, а также компонент элементы раздела (bitrix:catalog.section) для вывода товара. Все работает отлично, но нужно еще кое-что, и я пока не представляю как это сделать...

ВОПРОС: Подскажите пожалуйста, как после описания категории вывести список разделов первого уровня к которым относится товар этого производителя, и еще чтобы при переходе открывалась категория с отсортированным товаром по этому производителю (может как-то передать в фильтр параметр производителя, при переходе).
Павел
Вопрос решен! Напишу как я это сделал, может кому пригодится. А также возможно кто-то укажет на ошибки или предложит более простой/лучший способ.
Все что описывал выше так и оставил, для вывода списка категорий использовал компонент структура разделов (catalog.section.list), он конечно не смог мне помочь вытянуть только те разделы в которых есть товар конкретного производителя но я смог вывести только первый уровень разделов.
А при формировании ссылки, я просто передал параметр фильтра и все заработало.
Код
?vendor=".$_REQUEST["ELEMENT_ID"]
Била проблема с формированием ссылки, вместо "/" (слеша) показывалось "%2F", так-как это проблема связаная с кодировкой нестал искать корень и  решил эту проблему так:
- создал копию шаблона вывода разделов ( всеравно нужно было подогнать дизайн
- и потом где выводится ссылка сделал так
Код
preg_replace('|%2F|', '/', $arSection["SECTION_PAGE_URL"])
Если все-же есть способ проще, удобнее или который сможет вывести только нужные разделы с радостью выслушаю.
Антон. К
Михаил, доброго времени суток.

Пробую вывести как написано, но возникла проблема, в отфильтрованном товаре ссылка на детальный просмотр товара формируется не правильно должно быть /catalog/fot-men/3213, а формирует /catalog//3213. Но стоит разместить компонент catalog.section отдельно от компонента новости все работает как надо. Подскажи пожалуйста в чем может быть проблема?
Михаил Базаров
Цитата
Антон. К написал:
Михаил, доброго времени суток.

Пробую вывести как написано, но возникла проблема, в отфильтрованном товаре ссылка на детальный просмотр товара формируется не правильно должно быть /catalog/fot-men/3213, а формирует /catalog//3213. Но стоит разместить компонент catalog.section отдельно от компонента новости все работает как надо. Подскажи пожалуйста в чем может быть проблема?
Собственно, правильно настроить ЧПУ в компонентах и в инфоблоке. Везде должно быть одинаково
Антон. К
Михаил Базаров,  Спасибо, оказалось что 1С выгружено не правильно из-за чего не правильно строились адреса у некоторых товаров.
Mechka
Доброго времени суток.
Михаил, подскажите пожалуйста, как быть если в свойствах товара бренды указаны не строкой, а справочником? Не получается правильно написать запрос.

$GLOBALS['arrBrandName'] = array("PROPERTY_ИД_VALUE"=>$brandName); - это для строкового параметра, а как сделать для справочника?  У меня соответственно выводятся все товары.

Заранее благодарен.
Михаил Базаров
Цитата
Mechka написал:
Доброго времени суток.
Михаил, подскажите пожалуйста, как быть если в свойствах товара бренды указаны не строкой, а справочником? Не получается правильно написать запрос.

$GLOBALS['arrBrandName'] = array("PROPERTY_ИД_VALUE"=>$brandName); - это для строкового параметра, а как сделать для справочника?  У меня соответственно выводятся все товары.

Заранее благодарен.
Нужно сделать запрос к highload инфоблоку, загнать имя производителя в переменную, дальше просто сравнить на тождественность с именем бренда ( If (... === ....) )
Viktor26rus
Приветствую!
Михаил, спасибо за интересное видео, но есть следующая задача надеюсь сможешь помочь)
Необходимо вывести страницу брендов, чтобы отображались не только элементы каталога, но и список всех доступных разделов в которых есть отсортированные элементы.
ЧПУ необходимо настроить для разделов brands/section1/, brands/section2/ и тд. Для элементов ЧПУ catalog/section/element/
Есть решение, какие компоненты использовать? и структуру ЧПУ?

Заранее спасибо!
Михаил Базаров
Цитата
Viktor26rus написал:
Приветствую!
Михаил, спасибо за интересное видео, но есть следующая задача надеюсь сможешь помочь)
Необходимо вывести страницу брендов, чтобы отображались не только элементы каталога, но и список всех доступных разделов в которых есть отсортированные элементы.
ЧПУ необходимо настроить для разделов brands/section1/, brands/section2/ и тд. Для элементов ЧПУ catalog/section/element/
Есть решение, какие компоненты использовать? и структуру ЧПУ?

Заранее спасибо!
Такое, можно сделать только добавив бренды в каталог (или через свойство привязки к элементам).

То есть, бренды должны стать разделами каталога- это самое идеальное, меньше манипуляций делать дальше.
MARK LIVE
Цитата
Михаил Базаров пишет:
Цитата
Mechka написал:
Доброго времени суток.
Михаил, подскажите пожалуйста, как быть если в свойствах товара бренды указаны не строкой, а справочником? Не получается правильно написать запрос.

$GLOBALS['arrBrandName'] = array("PROPERTY_ИД_VALUE"=>$brandName); - это для строкового параметра, а как сделать для справочника? У меня соответственно выводятся все товары.

Заранее благодарен.
Нужно сделать запрос к highload инфоблоку, загнать имя производителя в переменную, дальше просто сравнить на тождественность с именем бренда ( If (... === ....) )
Присоединяюсь к вопросу, как этот запрос сделать?
Сергей Жуланов
А можно ли так сделать если из 1С приходит на сайт свойство Производитель с кодом CML2_MANUFACTURER только с типом Список?
Михаил Базаров
Цитата
Сергей Жуланов написал:
А можно ли так сделать если из 1С приходит на сайт свойство Производитель с кодом CML2_MANUFACTURER только с типом  Список ?
Это штатный реквизит, его по моему нельзя изменить в интерфейсе 1С-ки. Только лезть в конфигуратор и там менять тип свойства, в обработчике который формирует xml-ку
Antik
Михаил Базаров, Здравствуйте, а возможно ли скрывать производителя с общего списка, если к примеру в данный момент товаров нет, или они неактивны?
Михаил Базаров
Цитата
Antik написал:
Михаил Базаров , Здравствуйте, а возможно ли скрывать производителя с общего списка, если к примеру в данный момент товаров нет, или они неактивны?
Например, можно назначить счетчик товаров. Если количество равно нулю- то не выводить этого производителя.
Андрей Фокин
Михаил, СПАСИТЕ))) Не получается фильтровать

<?
$brandName = $arResult["NAME"];
$GLOBALS['arrBrandName'] = array("PROPERTY_133_VALUE"=>$brandName);
?>
<?$APPLICATION->IncludeComponent(
"bitrix:catalog.section",
"DEVELOPERS",
Array(
"ACTION_VARIABLE" => "action",
"ADD_PICT_PROP" => "-",
"ADD_PROPERTIES_TO_BASKET" => "Y",
"ADD_SECTIONS_CHAIN" => "N",
"AJAX_MODE" => "N",
"AJAX_OPTION_ADDITIONAL" => "",
"AJAX_OPTION_HISTORY" => "N",
"AJAX_OPTION_JUMP" => "N",
"AJAX_OPTION_STYLE" => "Y",
"BACKGROUND_IMAGE" => "-",
"BASKET_URL" => "/personal/basket.php",
"BROWSER_TITLE" => "-",
"CACHE_FILTER" => "N",
"CACHE_GROUPS" => "Y",
"CACHE_TIME" => "36000000",
"CACHE_TYPE" => "A",
"COMPATIBLE_MODE" => "Y",
"COMPOSITE_FRAME_MODE" => "A",
"COMPOSITE_FRAME_TYPE" => "AUTO",
"DETAIL_URL" => "",
"DISABLE_INIT_JS_IN_COMPONENT" => "N",
"DISPLAY_BOTTOM_PAGER" => "Y",
"DISPLAY_COMPARE" => "N",
"DISPLAY_TOP_PAGER" => "N",
"ELEMENT_SORT_FIELD" => "sort",
"ELEMENT_SORT_FIELD2" => "id",
"ELEMENT_SORT_ORDER" => "asc",
"ELEMENT_SORT_ORDER2" => "desc",
"ENLARGE_PRODUCT" => "STRICT",
"FILTER_NAME" => "arrBrandName",
"IBLOCK_ID" => "4",
"IBLOCK_TYPE" => "webstudiosamovar_realty_catalogs",
"INCLUDE_SUBSECTIONS" => "Y",
"LABEL_PROP" => "-",
"LAZY_LOAD" => "N",
"LINE_ELEMENT_COUNT" => "3",
"LOAD_ON_SCROLL" => "N",
"MESSAGE_404" => "",
"MESS_BTN_ADD_TO_BASKET" => "В корзину",
"MESS_BTN_BUY" => "Купить",
"MESS_BTN_COMPARE" => "Сравнить",
"MESS_BTN_DETAIL" => "Подробнее",
"MESS_BTN_SUBSCRIBE" => "Подписаться",
"MESS_NOT_AVAILABLE" => "Нет в наличии",
"META_DESCRIPTION" => "-",
"META_KEYWORDS" => "-",
"OFFERS_LIMIT" => "5",
"PAGER_BASE_LINK_ENABLE" => "N",
"PAGER_DESC_NUMBERING" => "N",
"PAGER_DESC_NUMBERING_CACHE_TIME" => "36000",
"PAGER_SHOW_ALL" => "N",
"PAGER_SHOW_ALWAYS" => "N",
"PAGER_TEMPLATE" => ".default",
"PAGER_TITLE" => "Товары",
"PAGE_ELEMENT_COUNT" => "18",
"PARTIAL_PRODUCT_PROPERTIES" => "N",
"PRICE_CODE" => array("PROPS_PRICE" ;) ,
"PRICE_VAT_INCLUDE" => "Y",
"PRODUCT_BLOCKS_ORDER" => "price,props,sku,quantityLimit,quantity,buttons",
"PRODUCT_ID_VARIABLE" => "id",
"PRODUCT_PROPERTIES" => array("PROPS_DISTRICT", "PROPS_ZASTR", "PROPS_ZHK", "PROPS_SHOW_MAIN" ;) ,
"PRODUCT_PROPS_VARIABLE" => "prop",
"PRODUCT_QUANTITY_VARIABLE" => "quantity",
"PRODUCT_ROW_VARIANTS" => "[{'VARIANT':'2','BIG_DATA':false},{'VARIANT':'2','BIG_DATA':false},{'VARIANT':'2','BIG_DATA':false},{'VARIANT':'2','BIG_DATA':false},{'VARIANT':'2','BIG_DATA':false},{'VARIANT':'2','BIG_DATA':false}]",
"PROPERTY_CODE" => array("", "PROPS_PRICE", "PROPS_CITY", "PROPS_DISTRICT", "PROPS_ADDRESS", "PROPS_S", "PROPS_S_K", "PROPS_ROOMS", "PROPS_VVOD", "PROPS_ZASTR", "PROPS_ZHK", "PROPS_GP", "PROPS_FLOOR", "PROPS_FLOORS", "PROPS_ID", "PROPS_VIPOTEKU", "PROPS_VIDEO", "PROPS_Info", "PROPS_ZHK2", "PROPS_ZASTR2", "PROPS_sobstvenik", "PROPS_MANAGER", "PROPS_MAP", "PROPS_OKNA", "PROPS_URLPRIW", "PROPS_SHOW_MAIN", "PROPS_DISTRICT2", "PROPS_PHONE_FILIAL", "PROPS_PRICE_M2", "PROPS_TYPE_HOUSE", "PROPS_STATE", "PROPS_BALCONY", "PROPS_WC", "" ;) ,
"RCM_PROD_ID" => $_REQUEST["PRODUCT_ID"],
"RCM_TYPE" => "personal",
"SECTION_CODE" => "",
"SECTION_ID" => $_REQUEST["SECTION_ID"],
"SECTION_ID_VARIABLE" => "SECTION_ID",
"SECTION_URL" => "",
"SECTION_USER_FIELDS" => array("", "", "" ;) ,
"SEF_MODE" => "N",
"SET_BROWSER_TITLE" => "Y",
"SET_LAST_MODIFIED" => "N",
"SET_META_DESCRIPTION" => "Y",
"SET_META_KEYWORDS" => "Y",
"SET_STATUS_404" => "N",
"SET_TITLE" => "Y",
"SHOW_404" => "N",
"SHOW_ALL_WO_SECTION" => "N",
"SHOW_FROM_SECTION" => "N",
"SHOW_PRICE_COUNT" => "1",
"SHOW_SLIDER" => "Y",
"SLIDER_INTERVAL" => "3000",
"SLIDER_PROGRESS" => "N",
"TEMPLATE_THEME" => "blue",
"USE_ENHANCED_ECOMMERCE" => "N",
"USE_MAIN_ELEMENT_SECTION" => "N",
"USE_PRICE_COUNT" => "N",
"USE_PRODUCT_QUANTITY" => "N"
;)
);?>
Михаил Базаров
Цитата
Андрей Фокин пишет:
Михаил, СПАСИТЕ))) Не получается фильтровать

<?
$brandName = $arResult["NAME"];
$GLOBALS['arrBrandName'] = array("PROPERTY_133_VALUE"=>$brandName);
?>
<?$APPLICATION->IncludeComponent(
"bitrix:catalog.section",
"DEVELOPERS",
Array(
           ...
"FILTER_NAME" => "arrBrandName",
"...
 ;)  
);?>
Вроде бы все правильно. Попробуйте для проверки, вписать бренд вручную

$GLOBALS['arrBrandName'] = array("PROPERTY_133_VALUE"=>"БРЕНД");
Андрей Фокин
Цитата
Михаил Базаров пишет:
Цитата
Андрей Фокин пишет:
Михаил, СПАСИТЕ))) Не получается фильтровать

<?
$brandName = $arResult["NAME"];
$GLOBALS['arrBrandName'] = array("PROPERTY_133_VALUE"=>$brandName);
?>
<?$APPLICATION->IncludeComponent(
"bitrix:catalog.section",
"DEVELOPERS",
Array(
...
"FILTER_NAME" => "arrBrandName",
"...

);?>
Вроде бы все правильно. Попробуйте для проверки, вписать бренд вручную

$GLOBALS['arrBrandName'] = array("PROPERTY_133_VALUE"=>"БРЕНД" ;) ;
Добрый день! Не фурычит(((((
Андрей Фокин
Заработало по
$GLOBALS['arrBrandName'] = array("PROPERTY_255_VALUE"=>"ТДСК" ;) ;
Андрей Фокин
Как его собаку заставить работать по
$GLOBALS['arrBrandName'] = array("PROPERTY_133_VALUE"=>$brandName);
Достал уже))))
Андрей Фокин
Михаил, простите, все работает! Плохо быть ЧАЙНИКОМ)))
Страницы: 1 2 След.