Работа с опционными свойствами — различия между версиями

Материал из Umicms
Перейти к:навигация, поиск
 
(не показано 11 промежуточных версий 3 участников)
Строка 45: Строка 45:
 
$FORMS['optioned_item'] = <<<END
 
$FORMS['optioned_item'] = <<<END
 
<option value="%object-id%">
 
<option value="%object-id%">
%object-name%
+
%object-name% (%emarket applyPriceCurrency(%float%, 'short')%)
 
</option>
 
</option>
 
END;
 
END;
Строка 51: Строка 51:
 
?>
 
?>
 
</pre>
 
</pre>
 +
 +
Для XSLT-шаблона
 +
<source lang="xml">
 +
<dl>
 +
  <xsl:apply-templates select=".//group[@name = 'catalog_option_props']/property"  mode="propertys" />
 +
</dl>
 +
</source>
 +
Затем дописываем необходимые шаблоны:
 +
<source lang="xml">
 +
<xsl:template match="property" mode="propertys" >
 +
<dt>
 +
  <label>
 +
      <xsl:value-of select="title"/>
 +
  </label>
 +
</dt>
 +
<dd>
 +
  <select id="{@name}" name="options[{@name}]">
 +
      <xsl:apply-templates select=".//option"  mode="propertys" />
 +
  </select>           
 +
</dd>
 +
</xsl:template>
 +
 +
<xsl:template match="object" mode="propertys" >
 +
<option value="{@id}">
 +
  <xsl:value-of select="@name" disable-output-escaping="yes" />
 +
</option>
 +
</xsl:template>
 +
</source>
  
 
Идентификатор группы полей, в которой были добавлены поля типа "Составное", необходимо добавить в системный файл настроек config.ini, блок modules, также как это сделано для группы "catalog_option_props":
 
Идентификатор группы полей, в которой были добавлены поля типа "Составное", необходимо добавить в системный файл настроек config.ini, блок modules, также как это сделано для группы "catalog_option_props":
Строка 56: Строка 84:
 
emarket.order-types.optioned.groups[] = "catalog_option_props"
 
emarket.order-types.optioned.groups[] = "catalog_option_props"
 
</pre>
 
</pre>
 +
 +
Существует два важных момента:
 +
 +
1. В вашем типе данных "объекта каталога" (Ноутбук, Телевизор и т.п.), модуль "Шаблоны данных", не должно быть групп полей с одинаковым строковым идентификатором, будьте внимательны.
 +
 +
2. Если вам необходимо отображать опционные свойства товара при их табличном отображении, т.е. при использовании блока 'objects_block_line', шаблона tpls/catalog/default.tpl, то необходимо строки формы опционных свойств (блок 'group') вырезать и вставить в блок 'objects_block_line'. В итоге макрос %data getPropertyGroup('%id%', 'catalog_option_props', 'catalog_options')%, в блоке 'objects_block_line' будет таким:
 +
<pre>
 +
<form action="%pre_lang%/emarket/basket/put/element/%id%/" method="get">
 +
%data getPropertyGroup('%id%', 'catalog_option_props', 'catalog_options')%
 +
</form>
 +
</pre>
 +
[[Категория:Верстка в TPL]][[Категория:Модуль Каталог]] [[Категория:Модуль Интернет магазин]]

Текущая версия на 09:55, 15 августа 2018

Стоит задача добавить для объектов каталога опционные свойства, чтобы при покупке товара пользователь смог выбрать одно из этих опционных свойств и добавить товар в корзину. В модуле Шаблоны Данных, для нужного типа, допустим "Объект каталога", создается группа полей: catalog_option_props, в этой группе добавляется поле (или несколько полей) типа Составное, допустим поле Цвет. Потом заходим в редактирование одного из объектов каталога, добавляем в выпадающий список Цвет нужные значения: Красный, Черный, Синий и т.п. Далее, выбрав одно из значений в выпадающем списке Цвет и поставив справа в окне сумму, которая добавится к основной цене при добавления товара в корзину - нажимаем "+", чтобы добавить опционное свойство, аналогично поступаем с остальными опционными свойствами.

В tpl-шаблоне, в блоке view_block, который выводит подробные характеристики товара, пропишем данный макрос: %data getPropertyGroup('%id%', 'catalog_option_props', 'catalog_options')%

Пример шаблона /tpls/data/catalog_options.tpl:

<?php
$FORMS = array();


$FORMS['group'] = <<<END
<form action="%pre_lang%/emarket/basket/put/element/%id%/" method="get">
<span>
%lines%
</span>
<p>
<input type="submit" value="Положить в корзину" />
</p>
</form>
END;

$FORMS['group_line'] = <<<END
%prop%   
END;

$FORMS['optioned_block'] = <<<END
<strong>%title%:</strong>
<select name="options[%field_name%]" style="color:black; width:100px; height: 18px;">
%items%
</select>
END;

$FORMS['optioned_block_empty'] = <<<END
<strong>%title%</strong> - Нет опций
END;

$FORMS['optioned_item'] = <<<END
<option value="%object-id%">
%object-name% (%emarket applyPriceCurrency(%float%, 'short')%)
</option>
END;

?>

Для XSLT-шаблона

<dl>
   <xsl:apply-templates select=".//group[@name = 'catalog_option_props']/property"  mode="propertys" />
</dl>

Затем дописываем необходимые шаблоны:

<xsl:template match="property" mode="propertys" >			
<dt>
   <label>
      <xsl:value-of select="title"/>
   </label>
</dt>
<dd>
   <select id="{@name}" name="options[{@name}]">
      <xsl:apply-templates select=".//option"  mode="propertys" />
   </select>            
</dd>
</xsl:template>
 
<xsl:template match="object" mode="propertys" >			
<option value="{@id}">
   <xsl:value-of select="@name" disable-output-escaping="yes" />
</option>
</xsl:template>

Идентификатор группы полей, в которой были добавлены поля типа "Составное", необходимо добавить в системный файл настроек config.ini, блок modules, также как это сделано для группы "catalog_option_props":

emarket.order-types.optioned.groups[] = "catalog_option_props"

Существует два важных момента:

1. В вашем типе данных "объекта каталога" (Ноутбук, Телевизор и т.п.), модуль "Шаблоны данных", не должно быть групп полей с одинаковым строковым идентификатором, будьте внимательны.

2. Если вам необходимо отображать опционные свойства товара при их табличном отображении, т.е. при использовании блока 'objects_block_line', шаблона tpls/catalog/default.tpl, то необходимо строки формы опционных свойств (блок 'group') вырезать и вставить в блок 'objects_block_line'. В итоге макрос %data getPropertyGroup('%id%', 'catalog_option_props', 'catalog_options')%, в блоке 'objects_block_line' будет таким:

<form action="%pre_lang%/emarket/basket/put/element/%id%/" method="get">
%data getPropertyGroup('%id%', 'catalog_option_props', 'catalog_options')%
</form>