Выбор склада при покупке товара — различия между версиями

Материал из Umicms
Перейти к:навигация, поиск
Строка 1: Строка 1:
 
'''Задача:''' Дать возможность покупателю выбрать склад (это может быть определенный магазин) в котором он хочет забрать покупаемый товар.<br/>
 
'''Задача:''' Дать возможность покупателю выбрать склад (это может быть определенный магазин) в котором он хочет забрать покупаемый товар.<br/>
'''Решение:''' Так как склад реализован через опционные свойства, с помощью поля типа "Составное", то его вывод на страницу ничем не отличается от вывода любого другого опционного свойства.
+
'''Решение:''' Так как склад реализован через опционные свойства, с помощью поля типа "Составное", то его вывод на страницу ничем не отличается от вывода любого другого опционного свойства.<br>
 
Рассмотрим вывод складов для TPL и XSLT шаблонизаторов.
 
Рассмотрим вывод складов для TPL и XSLT шаблонизаторов.
  
Строка 7: Строка 7:
 
Выводить поле будем на основе информации из данной статьи: [[Работа с опционными свойствами (umi 2.8, tpl шаблоны)]]
 
Выводить поле будем на основе информации из данной статьи: [[Работа с опционными свойствами (umi 2.8, tpl шаблоны)]]
  
1. Откроем шаблон данных объекта каталога и увидим, что группа полей Склады имеет идентификатор catalog_stores_props
+
1. Откроем шаблон данных объекта каталога и увидим, что группа полей Склады имеет идентификатор catalog_stores_props<br>
 +
[[Файл:Article31.png]]
 
2. Откроем файл config.ini и в секцию [modules] добавим дополнительный параметр emarket.order-types.optioned.groups[] с идентификатором нашей группы:
 
2. Откроем файл config.ini и в секцию [modules] добавим дополнительный параметр emarket.order-types.optioned.groups[] с идентификатором нашей группы:
 
<source lang="sql">
 
<source lang="sql">
Строка 15: Строка 16:
 
emarket.order-types.optioned.groups[] = "catalog_stores_props"
 
emarket.order-types.optioned.groups[] = "catalog_stores_props"
 
</source>
 
</source>
3. Заполним у товара поле Склады:
+
3. Заполним у товара поле Склады:<br>
4. Откроем шаблон \templates\demoold\tpls\catalog\default.tpl и в блоке $FORMS['view_block'] = <<<END вставим макрос:
+
[[Файл:Article32.png]]
 +
4. Откроем шаблон \templates\demoold\tpls\catalog\default.tpl и в блоке $FORMS['view_block'] = <<<END вставим макрос:<br>
 
%data getPropertyGroup('%id%', 'catalog_stores_props', 'catalog_options_stores')%
 
%data getPropertyGroup('%id%', 'catalog_stores_props', 'catalog_options_stores')%
5. Скопируем шаблон \templates\demoold\tpls\data\catalog_options.tpl и переименуем его в catalog_options_stores
+
5. Скопируем шаблон \templates\demoold\tpls\data\catalog_options.tpl и переименуем его в catalog_options_stores<br>
 
6. В блоке $FORMS['optioned_item'] = <<<END заменим существующее содержимое на:
 
6. В блоке $FORMS['optioned_item'] = <<<END заменим существующее содержимое на:
 
<source lang="html4strict">
 
<source lang="html4strict">
Строка 28: Строка 30:
 
</li>
 
</li>
 
</source>
 
</source>
7. Если хотим Вы водить информацию о резервах, то в блоке $FORMS['optioned_block'] = <<<END напишем макрос:
+
7. Если хотим Вы водить информацию о резервах, то в блоке $FORMS['optioned_block'] = <<<END напишем макрос:<br>
%data getProperty(%id%, 'reserved', 'reserved_int')%
+
%data getProperty(%id%, 'reserved', 'reserved_int')%<br>
8. Скопируем шаблон \templates\demoold\tpls\data\catalog_opisanie.tpl и переименуем его в reserved_int.tpl
+
8. Скопируем шаблон \templates\demoold\tpls\data\catalog_opisanie.tpl и переименуем его в reserved_int.tpl<br>
 
6. Заменим существующее содержимое на:
 
6. Заменим существующее содержимое на:
 
<source lang="php">
 
<source lang="php">
Строка 47: Строка 49:
 
</source>
 
</source>
  
Результат:
+
Результат:<br>
 
+
[[Файл:Article33.png]]
  
 
'''XSLT'''
 
'''XSLT'''
Строка 89: Строка 91:
 
</thead>  
 
</thead>  
 
</source>
 
</source>
Результат:
+
Результат:<br>
 
+
[[Файл:Article34.png]]
 +
<br>
 
Так же Вы можете реализовать автоматическое списание со складов по статье: [[Списание со складов]]
 
Так же Вы можете реализовать автоматическое списание со складов по статье: [[Списание со складов]]
  
 
2.8.6.1
 
2.8.6.1
 
[[Категория:Верстка в XSLT]][[Категория:Верстка в TPL]][[Категория:Модуль Каталог]]
 
[[Категория:Верстка в XSLT]][[Категория:Верстка в TPL]][[Категория:Модуль Каталог]]

Версия 21:52, 30 марта 2013

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

2.8.6.1