Если у вас возникли какие либо вопросы которые вы не смогли решить по нашим публикациям самостоятельно,
то ждем ваше обращение в нашей службе тех поддержки.
Выводим в корзине свойства элемента инфоблока
Добрый день.
В обращениях часто спрашивают, как вывести какие-либо свойства товара как элемента инфоблока в корзине. Стандартно этот функционал не реализован, поэтому предлагаю кастомизацию компонента sale.basket.basket и шаблона.
Для примера выведем в корзине текст анонса и картинку анонса (наиболее часто желаемые свойства в корзине). Копируем стандартный компонент sale.basket.basket в свое пространство имен - demo. Также попутно отвечаем на довольно частый вопрос, ответ на который, хотя и не подробно, дан в документации по компонентам - как вывести свой компонент в панели Компонентов 2.0 в окне визуального редактора отдельной строкой. Для этого необходимо изменить файл компонента .description:
Этот код вставляем в конец основного цикла while, где идет выборка свойств элемента как товара. Далее, компонент передает наши данные в шаблон. Так как на самом деле у компонента корзины три шаблона (вернее один шаблон состоит из 3 файлов, подключаются в зависимости от значения переменных CAN_BUY и DELAY), то придется повозиться, приведу пример только для одного файла basket_items.php, остальные по аналогии:
Задаем языковые файлы в /template/lang/ru/ и выводим их в заголовке таблицы, картинка анонса идет первой, затем имя, затем текст анонса, можно сделать по своему вкусу
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, видим, что все корректно:
Теперь корзина у нас более функциональна
Для тех, кому лень править, ссылка на архив кастомизированного компонента: