Работа с опционными свойствами — различия между версиями
VITL' (обсуждение | вклад) |
Whoa (обсуждение | вклад) |
||
(не показано 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>