Если у вас возникли какие либо вопросы которые вы не смогли решить по нашим публикациям самостоятельно,
то ждем ваше обращение в нашей службе тех поддержки.
Часто возникает задача дать возможность покупателю указать свойства товара перед покупкой: например, позволить выбрать размер, цвет или производителя товара и с этими свойствами положить товар в корзину. Это удобно для покупателя и менеджеры магазина будут точно знать, что покупатель хочет "зелёные носки, а не синие".
В этой статье я продолжу "издеваться" над компонентом bitrix:catalog.element
Для начала для каталога нужно создать свойства типа "список", именно значения этих свойств покупатель будет выбирать при покупке товара. Я создал два свойства, "Цвет" и "Надпись":
Обязательным условием является задание символьных кодов создаваемых свойств. После создания свойств нужно задать варианты значений этих свойств(кнопка "..."), например, для свойства "Цвет" это сделано так:
Далее решения задачи требуется кастомизация компонента и самого шаблона. Опустим скучную часть, описывающую копирование компонента в свою папку и перейдём непосредственно к кастомизации.
1. Поправим файл .parametrs.php скопированного компонента. Нужно добавить параметр компонента - набор свойств типа "Список", значения которых сможет выбрать покупатель.
Добавим:
Затем в заменим
на это:
Теперь в настройках параметров компонента, появится параметр "Свойства для выбора".
2. Теперь правим component.php. В компоненте нужно сформировать массивы значений, которые будут представлены в виде списка для каждого из свойств. После формирования массива $arResult["MORE_PHOTO"] (используйте поиск по файлу) добавляем код:
Теперь у нас есть, что показать покупателю в шаблоне.
Далее после условия:
Вставляем следующий код:
Здесь мы формируем массив переданных свойств товара после нажатия кнопки "купить", чтобы использовать его для добавления товара в корзину.
И наконец заменяем:
на
3. Последний штрих - правка шаблона, файла template.php. Организовываем форму для выбора свойств. Код формы:
Мелких модификаций шаблона больше, но они все косметические, поэтому код приводить не буду, тем более компонент можно скачать.
Теперь получившийся компонент с помощью визуального редактора размещаем на станице. И настраиваем, в частности указываем параметр "Свойства для выбора":
Результат примерно такой:
Выберем нужные свойства и кликнем "купить". Переходим в корзину - в корзине отображаются те свойства, которые были выбраны:
Задача решена.
Решение, естественно, не идеальное, но решение.
Скачать компонент можно здесь:
http://dev.1c-bitrix.ru/upload/exampl...ent.ex.zip
Это для тех, кому не терпиться.
Аналогичный функционал уже внесён в стандартные компоненты(естетсвенно, в ином виде).
Назад в раздел
то ждем ваше обращение в нашей службе тех поддержки.
Даём возможность покупателю выбрать свойства товара и переносим их в корзину
Привет!Часто возникает задача дать возможность покупателю указать свойства товара перед покупкой: например, позволить выбрать размер, цвет или производителя товара и с этими свойствами положить товар в корзину. Это удобно для покупателя и менеджеры магазина будут точно знать, что покупатель хочет "зелёные носки, а не синие".
В этой статье я продолжу "издеваться" над компонентом bitrix:catalog.element
Для начала для каталога нужно создать свойства типа "список", именно значения этих свойств покупатель будет выбирать при покупке товара. Я создал два свойства, "Цвет" и "Надпись":
Обязательным условием является задание символьных кодов создаваемых свойств. После создания свойств нужно задать варианты значений этих свойств(кнопка "..."), например, для свойства "Цвет" это сделано так:
Далее решения задачи требуется кастомизация компонента и самого шаблона. Опустим скучную часть, описывающую копирование компонента в свою папку и перейдём непосредственно к кастомизации.
1. Поправим файл .parametrs.php скопированного компонента. Нужно добавить параметр компонента - набор свойств типа "Список", значения которых сможет выбрать покупатель.
Добавим:
"PROPERTY_CODE_MOD" => array( "PARENT" => "VISUAL", "NAME" => 'Свойства для выбора', "TYPE" => "LIST", "MULTIPLE" => "Y", "VALUES" => $arProperty_L, "ADDITIONAL_VALUES" => "Y", ), |
Затем в заменим
$arProperty_LNS = array(); $arProperty_N = array(); $rsProp = CIBlockProperty::GetList(Array("sort"=>"asc", "name"=>"asc"), Array("ACTIVE"=>"Y", "IBLOCK_ID"=>$arCurrentValues["IBLOCK_ID"])); while ($arr=$rsProp->Fetch()) { $arProperty[$arr["CODE"]] = "[".$arr["CODE"]."] ".$arr["NAME"]; if(in_array($arr["PROPERTY_TYPE"], array("L", "N", "S"))) { $arProperty_LNS[$arr["CODE"]] = "[".$arr["CODE"]."] ".$arr["NAME"]; } if($arr["PROPERTY_TYPE"]=="N") { $arProperty_N[$arr["CODE"]] = "[".$arr["CODE"]."] ".$arr["NAME"]; } } |
на это:
$arProperty_LNS = array(); $arProperty_N = array(); $arProperty_L = array(); $rsProp = CIBlockProperty::GetList(Array("sort"=>"asc", "name"=>"asc"), Array("ACTIVE"=>"Y", "IBLOCK_ID"=>$arCurrentValues["IBLOCK_ID"])); while ($arr=$rsProp->Fetch()) { $arProperty[$arr["CODE"]] = "[".$arr["CODE"]."] ".$arr["NAME"]; if(in_array($arr["PROPERTY_TYPE"], array("L", "N", "S"))) { $arProperty_LNS[$arr["CODE"]] = "[".$arr["CODE"]."] ".$arr["NAME"]; } if($arr["PROPERTY_TYPE"]=="N") { $arProperty_N[$arr["CODE"]] = "[".$arr["CODE"]."] ".$arr["NAME"]; } if($arr["PROPERTY_TYPE"]=="L") { $arProperty_L[$arr["CODE"]] = "[".$arr["CODE"]."] ".$arr["NAME"]; } } |
Теперь в настройках параметров компонента, появится параметр "Свойства для выбора".
2. Теперь правим component.php. В компоненте нужно сформировать массивы значений, которые будут представлены в виде списка для каждого из свойств. После формирования массива $arResult["MORE_PHOTO"] (используйте поиск по файлу) добавляем код:
$arResult["PROPERTIES_FOR_USER"]=Array(); foreach ($arParams['PROPERTY_CODE_MOD'] as $LCODE): if ($LCODE) { $property_enums = CIBlockPropertyEnum::GetList(Array("DEF"=>"DESC", "SORT"=>"ASC"), Array("IBLOCK_ID"=>$arParams['IBLOCK_ID'], "CODE"=>$LCODE)); $PROPS_VALUES=Array(); $Prop=Array(); while($enum_fields = $property_enums->GetNext()) { $Prop['NAME']=$enum_fields['PROPERTY_NAME']; $PROPS_VALUES[]=$enum_fields["VALUE"]; } $Prop['VALUES']=$PROPS_VALUES; $arResult["PROPERTIES_FOR_USER"][$LCODE]=$Prop; } endforeach; |
Теперь у нас есть, что показать покупателю в шаблоне.
Далее после условия:
if (($action == "ADD2BASKET" || $action == "BUY") && $productID > 0) |
Вставляем следующий код:
$arProductParams=Array(); foreach($arParams['PROPERTY_CODE_MOD'] as $PropCode): $SaleParams=Array(); if ($_REQUEST[$PropCode]&&$_REQUEST[$PropCode.'_NAME']) { $SaleParams['NAME']=$_REQUEST[$PropCode.'_NAME']; $SaleParams['VALUE']=$_REQUEST[$PropCode]; $SaleParams['CODE']=$PropCode; $SaleParams['SORT']=100; $arProductParams[]=$SaleParams; } endforeach; |
Здесь мы формируем массив переданных свойств товара после нажатия кнопки "купить", чтобы использовать его для добавления товара в корзину.
И наконец заменяем:
Add2BasketByProductID($productID) |
на
Add2BasketByProductID($productID,null,$arProductParams) |
3. Последний штрих - правка шаблона, файла template.php. Организовываем форму для выбора свойств. Код формы:
<form action='' method='POST'> <table style='border:1px dotted black'> <?foreach ($arResult['PROPERTIES_FOR_USER'] as $key=>$SALE_PROPERTY):?> <tr> <td> <?=$SALE_PROPERTY['NAME'];?> </td> <td> <select name="<?=$key?>"> <?foreach($SALE_PROPERTY['VALUES'] as $PropValue):?> <option selected value='<?=$PropValue?>'><?=$PropValue?></option> <?endforeach;?> </select> </td> </tr> <input type=hidden value='<?=$SALE_PROPERTY['NAME']?>' name='<?=$key."_NAME"?>'> <?endforeach;?> </table> <input type=hidden value='<?=$arResult['ID']?>' name='<?=$arParams["PRODUCT_ID_VARIABLE"]?>'> <input type=hidden value='BUY' name='action'> <input type=submit name=buy value='<?=GetMessage("CATALOG_BUY")?>'> </form> |
Мелких модификаций шаблона больше, но они все косметические, поэтому код приводить не буду, тем более компонент можно скачать.
Теперь получившийся компонент с помощью визуального редактора размещаем на станице. И настраиваем, в частности указываем параметр "Свойства для выбора":
Результат примерно такой:
Выберем нужные свойства и кликнем "купить". Переходим в корзину - в корзине отображаются те свойства, которые были выбраны:
Задача решена.
Решение, естественно, не идеальное, но решение.
Скачать компонент можно здесь:
Это для тех, кому не терпиться.
Аналогичный функционал уже внесён в стандартные компоненты(естетсвенно, в ином виде).
Назад в раздел
Подписаться на новые материалы раздела: