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

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

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

Достаточно частая задачка для каталога или интернет-магазина: вывести список производителей с подробными описаниями, а так же в подробном описании производителя или бренда вывести все товары, у которых заполнено свойство "Производитель." Расскажу как это сделать
 
Здравствуйте!
Я вывел на сайте список производителей с помощью компонента новостей (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С выгружено не правильно из-за чего не правильно строились адреса у некоторых товаров.
 
Доброго времени суток.
Михаил, подскажите пожалуйста, как быть если в свойствах товара бренды указаны не строкой, а справочником? Не получается правильно написать запрос.

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

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

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

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

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

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

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

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

Заранее благодарен.
Нужно сделать запрос к highload инфоблоку, загнать имя производителя в переменную, дальше просто сравнить на тождественность с именем бренда ( If (... === ....) )
Присоединяюсь к вопросу, как этот запрос сделать?
 
А можно ли так сделать если из 1С приходит на сайт свойство Производитель с кодом CML2_MANUFACTURER только с типом Список?
 
Цитата
Сергей Жуланов написал:
А можно ли так сделать если из 1С приходит на сайт свойство Производитель с кодом CML2_MANUFACTURER только с типом  Список ?
Это штатный реквизит, его по моему нельзя изменить в интерфейсе 1С-ки. Только лезть в конфигуратор и там менять тип свойства, в обработчике который формирует xml-ку
 
Михаил Базаров, Здравствуйте, а возможно ли скрывать производителя с общего списка, если к примеру в данный момент товаров нет, или они неактивны?
 
Цитата
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);
Достал уже))))
 
Михаил, простите, все работает! Плохо быть ЧАЙНИКОМ)))
 
Цитата
Андрей Фокин написал:
Михаил, простите, все работает! Плохо быть ЧАЙНИКОМ)))
Все мы или были  :)  
 
Спасибо за проделанную работу и за то что делитель знаниями.
Как сделать так чтобы в списке брендов не выводились те у которых нет товаров, можно ли это автоматизировать?
 
Разобрался сам, может кому будет полезно:
Код
<? if (!empty($arResult['DISPLAY_PROPERTIES']['MANUFACTURER']))
                                          {                                          
                                             $name_brands = $arResult["PROPERTIES"]["MANUFACTURER"]["VALUE"];
                                             $links_brands= $arResult["PROPERTIES"]["MANUFACTURER"]["VALUE_XML_ID"];
                                             $rsItems = CIBlockElement::GetList(array(),array('IBLOCK_ID' =>'ид блока с брендами','NAME' => $name_brands),false,false,array('ID'));
                                             /*если для у этого бренда есть своя страница в брендах*/
                                             if ($arItem = $rsItems->GetNext())
                                             {
                                             ?>
                                                <dl class="product-item-detail-properties">
                                                <dt>Производитель</dt>
                                                   <dd>                                                   
                                                   <a href="https://сайт/brands/<? echo $links_brands;?>"><? echo $name_brands;?></a>
                                                   </dd>
                                                </dl>
                                             <?
                                             } 
                                             else
                                             {?><dl class="product-item-detail-properties">
                                                <dt>Производитель</dt>
                                                   <dd>
                                                   <? echo $name_brands;?>
                                                   </dd>
                                                </dl>
                                                
                                                <?
                                             }

                                          }?> 

в VALUE_XML_ID - я храню символьный код бренда (бренды выводятся с ЧПУ адресами)

проверяем задан ли производитель, затем проверяем есть у данного производителя страница с его товарами или нет, далее выводим ссылку или название бренда
 
Огромное спасибо за полезную информацию!

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


Код
<?$brandName = $arResult["NAME"];

$GLOBALS['arrBrandName'] = array("PROPERTY_ИД_VALUE"=>htmlspecialchars_decode($brandName, ENT_QUOTES));?>
 
Подскажите, как правильно записать условие, чтобы заголовок блока, который Вы обернули в h2 выводился только там, где нужно, т.е. при наличии записи ИД?
Читают тему (гостей: 3)