Jump to content
  • 0

Сопутствующие товары


rus
 Share

Question

Привет!

Надежды на ответ конечно мало, но все же...

Суть: с помощью комплексного компонента "каталог" делаю привязку и ставлю галочку отображать сопутствующие товары.

показываются только ссылки на эти товары, а как сделать что бы была еще и: картинка, корзина и цена для каждого сопутствующего товара?

Link to comment
Share on other sites

22 answers to this question

Recommended Posts

  • 0

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

Вариант относительно простой, в лоб: в result_modifier.php довыбрать все необходимые данные. Чем этот вариант плох, надеюсь, не надо объяснять.

Вариант, который на первый взгляд может показаться очень простым, у новичков часто руки чешутся именно так сделать: разместить вызов компонента в шаблоне компонента catalog.element. Ни в коем случае так делать нельзя! Больно аукнется при включении автокэширования.

Меньшим из зол на мой взгляд является такой вариант: в element.php задать фильтр из значений $arParams["LINK_IBLOCK_ID"], $arParams["LINK_PROPERTY_SID"] и $arResult["VARIABLES"]["ELEMENT_ID"], а затем с этим фильтром подключить catalog.section. С религиозной точки зрения этот вариант может и не выдержать критики, но работать будет чётко, стабильно, стройность комплексного компонента нарушена не будет.

Link to comment
Share on other sites

  • 0

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

Вариант относительно простой, в лоб: в result_modifier.php довыбрать все необходимые данные. Чем этот вариант плох, надеюсь, не надо объяснять.

Вариант, который на первый взгляд может показаться очень простым, у новичков часто руки чешутся именно так сделать: разместить вызов компонента в шаблоне компонента catalog.element. Ни в коем случае так делать нельзя! Больно аукнется при включении автокэширования.

Меньшим из зол на мой взгляд является такой вариант: в element.php задать фильтр из значений $arParams["LINK_IBLOCK_ID"], $arParams["LINK_PROPERTY_SID"] и $arResult["VARIABLES"]["ELEMENT_ID"], а затем с этим фильтром подключить catalog.section. С религиозной точки зрения этот вариант может и не выдержать критики, но работать будет чётко, стабильно, стройность комплексного компонента нарушена не будет.

Эмм...

1) чем плох вариант с result_modifier.php? на сколько я понимаю, в нем нужно как-то с помощью GetList доставать нужные данные, а потом разбирать массив уже в шаблоне, так?

2) да, по началу откровенно говоря была мысль разобрать все прямо в шаблоне, но чет передумал, мне показалось это как-то не правильно, а вот о проблеме с кэшированием не подумал, спасибо.

3) а можно узнать, а где находится element.php? я в папке с комплексным компонентом->catalog.element его не вижу :blink:

4) что значит задать фильтр из значений? есть описание этих значений? как их добыть, где они применяются и как их правильно применить?

Link to comment
Share on other sites

  • 0

Вариант с result_modifier тем и плох, что это фактически ручная работа, несмотря на то, что уже есть в наличии продуманные, оттестированные, проверенные временем и тысячами довольных (и не очень) клиентов компоненты, учитывающие все возможные нюансы.

Для понимания картины такой вопрос: какая цена будет выводиться в списке сопутствующих товаров, выбранных вручную в result_modifier для вновь заведённой группы оптовиков, которым по пятницам при заказе на сумму от 13000 до 26000 из раздела каталога «трёхлитровые банки» положена скидка 8%?

Штатные компоненты все такие нюансы учитывают. Вручную учесть всё то же самое тоже возможно, но не целесообразно, трудозатраты слишком велики.

element.php — файл в составе шаблона комплексного компонента catalog, отвечающий за отображение детальной страницы товара, на которой и подключается простой компонент catalog.element.

http://dev.1c-bitrix.ru/user_help/content/iblock/components_2/catalog/catalog_section.php

Один из параметров: FILTER_NAME. Можно указать собственный фильтр по свойству, отвечающему за связи между инфоблоками. Хотя это может быть и тот же самый инфоблок.

К примеру, есть свойство с кодом RELATED_TO, в котором и сохраняется отношение связанного товара. Тогда задаём фильтр:

$GLOBALS["relatedFilter"] = array("PROPERTY_RELATED_TO"=>$arResult["VARIABLES"]["ELEMENT_ID"]); // в переменной $arResult["VARIABLES"]["ELEMENT_ID"] хранится ID текущего товара.

А вот код свойства у нас задаётся через параметры, так что его нужно из параметров и брать, например так:

$GLOBALS["relatedFilter"] = array("PROPERTY_".$arParams["LINK_PROPERTY_SID"]=>$arResult["VARIABLES"]["ELEMENT_ID"]);

После определения фильтра подключается компонент catalog.section, у которого среди параметров будут такие:

"IBLOCK_ID" => $arParams["LINK_IBLOCK_ID"],

"FILTER_NAME" => "relatedFilter"

И после этого можно спокойно пользовать штатный компонент catalog.section для вывода связанных товаров.

  • Like 1
Link to comment
Share on other sites

  • 0

спасибо за ответ!

а вот смотри, я хочу в шаблоне, вывести цену вот таким вот образом: http://dev.1c-bitrix.ru/api_help/catalog/classes/cprice/cprice__getbaseprice.9dc276c9.php

на сколько это правильно, и если нет, то чем чревато?

Link to comment
Share on other sites

  • 0

Прямо там и описано, что это за метод, для чего он и чем это чревато.

Это базовая цена товара. Если по какой-либо причине должна быть выведена цена другого типа, то данный метод выведет не то значение, которое нужно.

Link to comment
Share on other sites

  • 0

Прямо там и описано, что это за метод, для чего он и чем это чревато.

Это базовая цена товара. Если по какой-либо причине должна быть выведена цена другого типа, то данный метод выведет не то значение, которое нужно.

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

Link to comment
Share on other sites

  • 0

Картинку и свойства товара можно вытащить банальными CIBlockElement::GetByID() или CIBlockElement::GetList(). Это же самые обычные элементы инфоблока.

Корзина — имеется в виду кнопка «положить в корзину»?

Параметры добавления в корзину все в $arParams есть, можно их использовать. А сам код кнопки можно в лоб написать.

  • Like 1
Link to comment
Share on other sites

  • 0

Картинку и свойства товара можно вытащить банальными CIBlockElement::GetByID() или CIBlockElement::GetList(). Это же самые обычные элементы инфоблока.

Корзина — имеется в виду кнопка «положить в корзину»?

Параметры добавления в корзину все в $arParams есть, можно их использовать. А сам код кнопки можно в лоб написать.

не кнопку - ссылку, типа того:


<a class="basket" href="<?echo $arResult["ADD_URL"]?>" rel="nofollow"><?echo GetMessage("CATALOG_ADD_TO_BASKET")?></a>

за подсказки - спасибо, ставлю плюсик ;)

если что, можно будет обратиться к тебе?

З.Ы. пошел углубляться с головой в изучение мануалов...

Link to comment
Share on other sites

  • 0

Ссылку надо будет формировать на основе шаблона ссылки и ID связанного элемента (я правильно ведь понимаю, что речь о связанных элементах?).

А если что, обращаться всегда можно, конечно.

Link to comment
Share on other sites

  • 0

Ссылку надо будет формировать на основе шаблона ссылки и ID связанного элемента (я правильно ведь понимаю, что речь о связанных элементах?).

А если что, обращаться всегда можно, конечно.

да, о связанных.

спасибо.

З.Ы. если к стати создать отдельный файл, закинуть туда компонент catalog.link.list список связаных элементов и обратиться к нему с параметром в урле, вот так: link.php?PARENT_ELEMENT_ID=1555

то выводит в принципе то что нужно:

картинко

Link to comment
Share on other sites

  • 0

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

вот и ищу помощи в просторах интернета

Link to comment
Share on other sites

  • 0

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

 

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

	<div class="box">		<? /* сопутствующие товары */ ?>		<?foreach($arResult["DISPLAY_PROPERTIES"] as $pid2=>$arProperty2):?>		<?if($pid2=="RECOMMEND"):?>		<?endif?>		<?endforeach?>		<?foreach($arProperty["DISPLAY_VALUE"] as $key=>$arRecomend):?>			<div class="related_products">				<div class="related_name">					<? echo $arRecomend ?>				</div>				<div class="related_img">					<?					$res = CIBlockElement::GetByID($arProperty["VALUE"][$key]);					if($ar_ress = $res->GetNext())						if(CModule::IncludeModule('iblock')) {							$rsElement = CIBlockElement::GetList(								array(),								array("=ID"=>$arProperty["VALUE"][$key]),								false,								false,								array("PREVIEW_PICTURE")								);							if($arElement = $rsElement->Fetch()) {								$arFile = CFile::GetFileArray($arElement["PREVIEW_PICTURE"]);								if(isset($arFile) && !empty($arFile)) {									echo '<img border="0" width="'.$arFile["WIDTH"].'" src="'.$arFile["SRC"].'" alt="'.$ar_ress["NAME"].'" />';								} else {									echo '<img border="0" src="/images/not_image.png" alt="нет картинки для товара" />';								}							}						}					?>				</div>				<div class="related_price">					<?					$ar_res = CPrice::GetBasePrice($arProperty["VALUE"][$key]);					$CurVal = CurrencyFormat($ar_res["PRICE"]);					$newval = CCurrencyRates::ConvertCurrency($CurVal, "USD", "RUB");					$ResNewVal = round($newval);					echo '<strong>'.$ResNewVal.' руб</strong>';					?>					<noindex>					<div class="buy_basket">						<? echo '<a class="basket" href="'.$arResult["DETAIL_PAGE_URL"].'index.php?action=ADD2BASKET&id='.$ar_ress["ID"].'" rel="nofollow" title="'.GetMessage("CATALOG_ADD_TO_BASKET").'"></a>'; ?>					</div>					</noindex>				</div>			</div>		<?endforeach?>		<? /* конец сопутствующие товары */ ?>	</div>

при этом, обязательно нужно будет создать св-во RECOMMEND в инфоблоке (это по коду оно так называется, но вы можете и по другому назвать, главное потом поменять везде на такое же).

скриншотики:

5500958.png

5444639.png

в самом компоненте, в настройках вывода, нужно по-моему так же указывать RECOMMEND.

забыл сказать, что в каждом товаре, при импорте из csv файла, в оном, должна быть строка типа: PROPERTY(какая-то-цифра) и в строке указано в качестве значения: RECOMMEND

Link to comment
Share on other sites

  • 0

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

Link to comment
Share on other sites

  • 0

вы таки ошибаетесь, я привел код комплексного компонента "каталог" об чем выше написал.

на счет компонента рекомендуемые товары - не в курсе, существует ли вообще такой компонент...

Link to comment
Share on other sites

  • 0

я думаю что не зачем создавать отдельный инфоблок (так как при экспорте-выгрузке в csv могут быть проблемы), тут смысл такой:

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

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

В csv файле найдете строки с названиями типа PROPERTY32 или PROP32 цифра - это id св-ва, которое можно глянуть в инфоблоке, и в эту строку к конкретному товару добавляйте RECOMMENDED, а потом перезальете...

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy