Выбор склада при покупке товара

Материал из Umicms
Перейти к:навигация, поиск

Актуально для версии 2.9
Задача: Дать возможность покупателю выбрать склад (это может быть определенный магазин) в котором он хочет забрать покупаемый товар.
Решение: Так как склад реализован через опционные свойства, с помощью поля типа "Составное", то его вывод на страницу ничем не отличается от вывода любого другого опционного свойства.
Рассмотрим вывод складов для TPL и XSLT шаблонизаторов.

TPL

Выводить поле будем на основе информации из данной статьи: Работа с опционными свойствами (umi 2.8, tpl шаблоны)

1. Откроем шаблон данных объекта каталога и увидим, что группа полей Склады имеет идентификатор catalog_stores_props
Article31.png
2. Откроем файл config.ini и в секцию [modules] добавим дополнительный параметр emarket.order-types.optioned.groups[] с идентификатором нашей группы:

[modules]

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

3. Заполним у товара поле Склады:
Article32.png
4. Откроем шаблон \templates\demoold\tpls\catalog\default.tpl и в блоке $FORMS['view_block'] = <<<END вставим макрос:
%data getPropertyGroup('%id%', 'catalog_stores_props', 'catalog_options_stores')%
5. Скопируем шаблон \templates\demoold\tpls\data\catalog_options.tpl и переименуем его в catalog_options_stores
6. В блоке $FORMS['optioned_item'] = <<<END заменим существующее содержимое на:

<li>
	<label>
		<input type="radio" name="options[%field_name%]" value="%object-id%" />
		%object-name% = %int% шт.
	</label>
</li>

7. Если хотим Вы выводить информацию о резервах, то в блоке $FORMS['optioned_block'] = <<<END напишем макрос:
%data getProperty(%id%, 'reserved', 'reserved_int')%
8. Скопируем шаблон \templates\demoold\tpls\data\catalog_opisanie.tpl и переименуем его в reserved_int.tpl
6. Заменим существующее содержимое на:

<?php

$FORMS = Array();

$FORMS['int'] = <<<END

Зарезервировано покупателями: %value% шт.

END;


?>

Результат:
Article33.png

XSLT

Первые три пункта предыдущей инструкции аналогичны. В шаблоне интернет-магазина "Современный" уже описан вывод опционных свойств, нам остается только немного его подкорректировать. 4. В шаблоне \templates\demodizzy\xslt\modules\catalog\object-view.xsl найдём строку:

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

и ниже её сделаем вывод наших складов:

<xsl:apply-templates select=".//group[@name = 'catalog_stores_props']" mode="table_options" />

5. В этом же файле найдем описание темплейта <xsl:template match="option" mode="table_options"> и в правой колонке таблицы откорректируем вывод количества товаров на складах:

<td align="right">
				<xsl:choose>
					<xsl:when test="object/@type-guid = 'emarket-store'">
						<xsl:value-of select="@int" />
					</xsl:when>
					<xsl:otherwise>
							<xsl:value-of select="@float" />
					 </xsl:otherwise>
				</xsl:choose>
			</td>

6. Если мы хотим вывести информацию о резервах, то чуть выше имеется темплейт <xsl:template match="property" mode="table_options">, в которой откорректируем <thead> следующим образом:

                       <thead>
				<tr>
					<th colspan="3">
						<xsl:choose>
					<xsl:when test="@name = 'reserved'">
						<xsl:value-of select="concat(title, ': ', value, ' шт.')" />
					</xsl:when>
					<xsl:otherwise>
							<xsl:value-of select="concat(title, ':')" />
					 </xsl:otherwise>
				</xsl:choose>
					</th>
				</tr>
			</thead>

Результат:
Article34.png
Так же Вы можете реализовать автоматическое списание со складов по статье: Списание со складов