Если у вас возникли какие либо вопросы которые вы не смогли решить по нашим публикациям самостоятельно,
то ждем ваше обращение в нашей службе тех поддержки.
Часто возникает задача дать возможность покупателю указать свойства товара перед покупкой: например, позволить выбрать размер, цвет или производителя товара и с этими свойствами положить товар в корзину. Это удобно для покупателя и менеджеры магазина будут точно знать, что покупатель хочет "зелёные носки, а не синие".
В этой статье я продолжу "издеваться" над компонентом bitrix:catalog.element
Для начала для каталога нужно создать свойства типа "список", именно значения этих свойств покупатель будет выбирать при покупке товара. Я создал два свойства, "Цвет" и "Надпись":

Обязательным условием является задание символьных кодов создаваемых свойств. После создания свойств нужно задать варианты значений этих свойств(кнопка "..."), например, для свойства "Цвет" это сделано так:

Далее решения задачи требуется кастомизация компонента и самого шаблона. Опустим скучную часть, описывающую копирование компонента в свою папку и перейдём непосредственно к кастомизации.
1. Поправим файл .parametrs.php скопированного компонента. Нужно добавить параметр компонента - набор свойств типа "Список", значения которых сможет выбрать покупатель.
Добавим:
Затем в заменим
на это:
Теперь в настройках параметров компонента, появится параметр "Свойства для выбора".
2. Теперь правим component.php. В компоненте нужно сформировать массивы значений, которые будут представлены в виде списка для каждого из свойств. После формирования массива $arResult["MORE_PHOTO"] (используйте поиск по файлу) добавляем код:
Теперь у нас есть, что показать покупателю в шаблоне.
Далее после условия:
Вставляем следующий код:
Здесь мы формируем массив переданных свойств товара после нажатия кнопки "купить", чтобы использовать его для добавления товара в корзину.
И наконец заменяем:
на
3. Последний штрих - правка шаблона, файла template.php. Организовываем форму для выбора свойств. Код формы:
Мелких модификаций шаблона больше, но они все косметические, поэтому код приводить не буду, тем более компонент можно скачать.
Теперь получившийся компонент с помощью визуального редактора размещаем на станице. И настраиваем, в частности указываем параметр "Свойства для выбора":

Результат примерно такой:

Выберем нужные свойства и кликнем "купить". Переходим в корзину - в корзине отображаются те свойства, которые были выбраны:

Задача решена.
Решение, естественно, не идеальное, но решение.
Скачать компонент можно здесь:
Это для тех, кому не терпиться.
Аналогичный функционал уже внесён в стандартные компоненты(естетсвенно, в ином виде).
Назад в раздел
Наверх
то ждем ваше обращение в нашей службе тех поддержки.
Даём возможность покупателю выбрать свойства товара и переносим их в корзину
Привет!Часто возникает задача дать возможность покупателю указать свойства товара перед покупкой: например, позволить выбрать размер, цвет или производителя товара и с этими свойствами положить товар в корзину. Это удобно для покупателя и менеджеры магазина будут точно знать, что покупатель хочет "зелёные носки, а не синие".
В этой статье я продолжу "издеваться" над компонентом 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> |
Мелких модификаций шаблона больше, но они все косметические, поэтому код приводить не буду, тем более компонент можно скачать.
Теперь получившийся компонент с помощью визуального редактора размещаем на станице. И настраиваем, в частности указываем параметр "Свойства для выбора":

Результат примерно такой:

Выберем нужные свойства и кликнем "купить". Переходим в корзину - в корзине отображаются те свойства, которые были выбраны:

Задача решена.
Решение, естественно, не идеальное, но решение.
Скачать компонент можно здесь:
Это для тех, кому не терпиться.
Аналогичный функционал уже внесён в стандартные компоненты(естетсвенно, в ином виде).
Назад в раздел
Подписаться на новые материалы раздела:
Загрузка...
Наверх