Если у вас возникли какие либо вопросы которые вы не смогли решить по нашим публикациям самостоятельно,
то ждем ваше обращение в нашей службе тех поддержки.
В обращениях часто спрашивают, как вывести какие-либо свойства товара как элемента инфоблока в корзине. Стандартно этот функционал не реализован, поэтому предлагаю кастомизацию компонента sale.basket.basket и шаблона.
Для примера выведем в корзине текст анонса и картинку анонса (наиболее часто желаемые свойства в корзине).
Копируем стандартный компонент sale.basket.basket в свое пространство имен - demo. Также попутно отвечаем на довольно частый вопрос, ответ на который, хотя и не подробно, дан в документации по компонентам - как вывести свой компонент в панели Компонентов 2.0 в окне визуального редактора отдельной строкой. Для этого необходимо изменить файл компонента .description:
В результате, видим в панели компонентов (добавив соответствующие языковые фразы в файл /lang/ru/.description):

Далее изменяем файл .parameters, чтобы выводимыми данными можно было управлять через настройки компонентов:
Получаем такой вид настроек компонента, добавив соответствующие языковые фразы в файл /lang/ru/.parameters:

Самое простое позади, теперь очередь за кастомизацией файла компонента component.php, добавляем в него выборку соответствующих полей элемента:
Этот код вставляем в конец основного цикла while, где идет выборка свойств элемента как товара. Далее, компонент передает наши данные в шаблон. Так как на самом деле у компонента корзины три шаблона (вернее один шаблон состоит из 3 файлов, подключаются в зависимости от значения переменных CAN_BUY и DELAY), то придется повозиться, приведу пример только для одного файла basket_items.php, остальные по аналогии:
Задаем языковые файлы в /template/lang/ru/ и выводим их в заголовке таблицы, картинка анонса идет первой, затем имя, затем текст анонса, можно сделать по своему вкусу
Далее, основная строка вывода свойств:
Здесь можно также добавить записи, на случай если отсутствует картинка у элемента, либо она по каким-то причинам недоступна, но это по желанию. Я всего лишь добавил курсив для текста анонса.
Дальше, чтобы не разрушить верстку таблицы, в последнюю строку вставляем пустые ячейки:
По аналогии правим оставшиеся два файла basket_items_delay.php и basket_items_notavail.php
Проверяем, что у нас получилось:

Теперь, отложим один товар, а второй сделаем через админку недоступным для покупки, чтобы проверить как отработают шаблоны basket_items_delay.php и basket_items_notavail.php, видим, что все корректно:

Теперь корзина у нас более функциональна
Для тех, кому лень править, ссылка на архив кастомизированного компонента:
Назад в раздел
Наверх
то ждем ваше обращение в нашей службе тех поддержки.
Выводим в корзине свойства элемента инфоблока
Добрый день.В обращениях часто спрашивают, как вывести какие-либо свойства товара как элемента инфоблока в корзине. Стандартно этот функционал не реализован, поэтому предлагаю кастомизацию компонента sale.basket.basket и шаблона.
Для примера выведем в корзине текст анонса и картинку анонса (наиболее часто желаемые свойства в корзине).
Копируем стандартный компонент sale.basket.basket в свое пространство имен - demo. Также попутно отвечаем на довольно частый вопрос, ответ на который, хотя и не подробно, дан в документации по компонентам - как вывести свой компонент в панели Компонентов 2.0 в окне визуального редактора отдельной строкой. Для этого необходимо изменить файл компонента .description:
<?
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die();
$arComponentDescription = array(
"NAME" => GetMessage("SBB_DEFAULT_TEMPLATE_NAME"),
"DESCRIPTION" => GetMessage("SBB_DEFAULT_TEMPLATE_DESCRIPTION"),
"ICON" => "/images/sale_basket.gif",
"PATH" => array(
"ID" => "my_components",
"NAME" => GetMessage("MY_COMPONENTS"),
"SORT" => 2000
),
);
?> |
В результате, видим в панели компонентов (добавив соответствующие языковые фразы в файл /lang/ru/.description):

Далее изменяем файл .parameters, чтобы выводимыми данными можно было управлять через настройки компонентов:
"PROPS_LIST" => array(
"NAME" => GetMessage('SBB_PROPS_LIST'),
"TYPE" => "LIST",
"MULTIPLE" => "Y",
"VALUES"=>array(
"PREVIEW_TEXT" => GetMessage("SBB_PREVIEW_TEXT"),
"PREVIEW_PICTURE" => GetMessage("SBB_PREVIEW_PICTURE")),
"DEFAULT"=>array("PROPERTY_CML2_ARTICLE"),
"COLS"=>25,
"ADDITIONAL_VALUES"=>"N",
"PARENT" => "VISUAL",
), |
Получаем такой вид настроек компонента, добавив соответствующие языковые фразы в файл /lang/ru/.parameters:

Самое простое позади, теперь очередь за кастомизацией файла компонента component.php, добавляем в него выборку соответствующих полей элемента:
if(CModule::IncludeModule ('iblock'))
{
$arFilter=array ("ID"=>$arItems["PRODUCT_ID"]);
$arSelectedFields=$arParams["PROPS_LIST"];
$db_props = CIBlockElement::GetList(Array("ID" => "DESC"), $arFilter, false, false, $arSelectedFields);
if ($ar_props=$db_props->Fetch())
{
$ar_props["PREVIEW_PICTURE"] = CFile::GetFileArray($ar_props["PREVIEW_PICTURE"]);
}
}
$arItems["NEW_PROPS"]=$ar_props;
$arBasketItems[] = $arItems;
|
Этот код вставляем в конец основного цикла while, где идет выборка свойств элемента как товара. Далее, компонент передает наши данные в шаблон. Так как на самом деле у компонента корзины три шаблона (вернее один шаблон состоит из 3 файлов, подключаются в зависимости от значения переменных CAN_BUY и DELAY), то придется повозиться, приведу пример только для одного файла basket_items.php, остальные по аналогии:
Задаем языковые файлы в /template/lang/ru/ и выводим их в заголовке таблицы, картинка анонса идет первой, затем имя, затем текст анонса, можно сделать по своему вкусу

<table class="sale_basket_basket data-table">
<tr>
<?if (in_array("PREVIEW_PICTURE", $arParams["PROPS_LIST"])):?>
<th><?= GetMessage("SALE_PREVIEW_PICTURE")?></th>
<?endif;?>
<?if (in_array("NAME", $arParams["COLUMNS_LIST"])):?>
<th><?= GetMessage("SALE_NAME")?></th>
<?endif;?>
<?if (in_array("PREVIEW_TEXT", $arParams["PROPS_LIST"])):?>
<th><?= GetMessage("SALE_PREVIEW_TEXT")?></th>
<?endif;?>
<?if (in_array("PROPS", $arParams["COLUMNS_LIST"])):?>
<th><?= GetMessage("SALE_PROPS")?></th>
<?endif;?> |
Далее, основная строка вывода свойств:
foreach($arResult["ITEMS"]["AnDelCanBuy"] as $arBasketItems)
{
?>
<tr>
<?if (in_array("PREVIEW_PICTURE", $arParams["PROPS_LIST"])):?>
<td><?
if (is_array($arBasketItems["NEW_PROPS"]["PREVIEW_PICTURE"])):
?><img border="0" src="<?=$arBasketItems["NEW_PROPS"]["PREVIEW_PICTURE"]["SRC"]?>" width="<?=$arBasketItems["NEW_PROPS"]["PREVIEW_PICTURE"]["WIDTH"]?>" height="<?=$arBasketItems["NEW_PROPS"]["PREVIEW_PICTURE"]["HEIGHT"]?>" alt="<?=$arBasketItems["NAME"]?>" title="<?=$arBasketItems["NAME"]?>"/><?
endif;
?></td>
<?endif;?>
<?if (in_array("NAME", $arParams["COLUMNS_LIST"])):?>
<td><?
if (strlen($arBasketItems["DETAIL_PAGE_URL"])>0):
?><a href="<?=$arBasketItems["DETAIL_PAGE_URL"] ?>"><?
endif;
?><b><?=$arBasketItems["NAME"] ?></b><?
if (strlen($arBasketItems["DETAIL_PAGE_URL"])>0):
?></a><?
endif;
?></td>
<?endif;?>
<?if (in_array("PREVIEW_TEXT", $arParams["PROPS_LIST"])):?>
<td><?
if (strlen($arBasketItems["NEW_PROPS"]["PREVIEW_TEXT"])>0):
?><i>"<?=$arBasketItems["NEW_PROPS"]["PREVIEW_TEXT"]?>"</i><?
endif;
?></td>
<?endif;?>
|
Здесь можно также добавить записи, на случай если отсутствует картинка у элемента, либо она по каким-то причинам недоступна, но это по желанию. Я всего лишь добавил курсив для текста анонса.
Дальше, чтобы не разрушить верстку таблицы, в последнюю строку вставляем пустые ячейки:
<tr>
<?if (in_array("PREVIEW_PICTURE", $arParams["PROPS_LIST"])):?>
<td> </td> // тут не забыть удалить пробел
<?endif;?> |
По аналогии правим оставшиеся два файла basket_items_delay.php и basket_items_notavail.php
Проверяем, что у нас получилось:

Теперь, отложим один товар, а второй сделаем через админку недоступным для покупки, чтобы проверить как отработают шаблоны basket_items_delay.php и basket_items_notavail.php, видим, что все корректно:

Теперь корзина у нас более функциональна

Для тех, кому лень править, ссылка на архив кастомизированного компонента:
Назад в раздел
Подписаться на новые материалы раздела:
Загрузка...
Наверх