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

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

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

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