Расширение функционала метода emarket basket — различия между версиями
VITL' (обсуждение | вклад) (Новая страница: «Часто возникает ситуация, что необходимо расширить функционал метода emarket basket(), который о…») |
VITL' (обсуждение | вклад) |
||
(не показана 1 промежуточная версия 1 участника) | |||
Строка 1: | Строка 1: | ||
Часто возникает ситуация, что необходимо расширить функционал метода emarket basket(), который отвечает за добавление товара в корзину. В версии системы 2.8.4.3 и ниже в методе '''basket''' еще не прописано событие для кастомизации данного действия, поэтому для решения задачи из нашего примера вынесем метод basket в кастомный файл. | Часто возникает ситуация, что необходимо расширить функционал метода emarket basket(), который отвечает за добавление товара в корзину. В версии системы 2.8.4.3 и ниже в методе '''basket''' еще не прописано событие для кастомизации данного действия, поэтому для решения задачи из нашего примера вынесем метод basket в кастомный файл. | ||
− | '''Задача:''' необходимо при добавлении товара в корзину дать покупателю оставить небольшой комментарий к товару, который он положит в корзину, также этот комментарий необходимо видеть в административной части при просмотре параметров заказа. | + | '''Задача:''' необходимо при добавлении товара в корзину дать покупателю оставить небольшой комментарий к товару, который он положит в корзину, также этот комментарий необходимо видеть в административной части при просмотре параметров заказа. Также, в наш новый метод мы добавим функционал, который позволит увеличивать или уменьшать на единицу количество любого элемента заказа. |
'''Решение:''' | '''Решение:''' | ||
Строка 21: | Строка 21: | ||
</source> | </source> | ||
данный код будет добавлять в элемент заказа переданное значение из поля '''dop_info'''. | данный код будет добавлять в элемент заказа переданное значение из поля '''dop_info'''. | ||
− | + | ||
+ | Для настройки функционала увеличения или уменьшения количества какого-либо элемента заказа, необходимо: | ||
+ | |||
+ | после строки: | ||
+ | <source lang="php"> | ||
+ | $options = getRequest('options'); | ||
+ | </source> | ||
+ | добавить: | ||
+ | <source lang="php"> | ||
+ | $mode_change = (int) getRequest('change_item'); | ||
+ | </source> | ||
+ | и также после строки: | ||
+ | <source lang="php"> | ||
+ | $amount = $amount ? $amount : ($orderItem->getAmount() + 1); | ||
+ | </source> | ||
+ | добавить: | ||
+ | <source lang="php"> | ||
+ | if($mode_change) $amount = ($mode_change == 1) ? $orderItem->getAmount() + 1 : $orderItem->getAmount() - 1; | ||
+ | </source> | ||
+ | |||
+ | Если говорить на примере TPL-шаблонизатора, то при использовании в шаблоне '''tpls/emarket/default.tpl''', в блоке '''order_item''', ссылок: | ||
+ | <pre> | ||
+ | <a href="/emarket/basket/put/item/%id%/?change_item=1">+</a> | ||
+ | <a href="/emarket/basket/put/item/%id%/?change_item=2">-</a> | ||
+ | </pre> | ||
+ | |||
+ | к которым можно прикрепить кнопки, можно увеличивать или уменьшать количество любого элемента заказа на единицу. | ||
+ | |||
+ | Далее, в папке '''classes/modules/emarket/''' необходимо создать файл '''permissions.custom.php''': | ||
<source lang="php"> | <source lang="php"> | ||
<?php | <?php | ||
Строка 66: | Строка 94: | ||
</source> | </source> | ||
После выполнения всех описанных действий, при добавлении покупателем элемента заказа, он может указать краткий комментарий к добавляемому товару, а администратор магазина, при подробном просмотре заказа, этот комментарий сможет прочитать. | После выполнения всех описанных действий, при добавлении покупателем элемента заказа, он может указать краткий комментарий к добавляемому товару, а администратор магазина, при подробном просмотре заказа, этот комментарий сможет прочитать. | ||
+ | [[Категория:Модуль Интернет магазин]] |
Текущая версия на 09:34, 8 октября 2011
Часто возникает ситуация, что необходимо расширить функционал метода emarket basket(), который отвечает за добавление товара в корзину. В версии системы 2.8.4.3 и ниже в методе basket еще не прописано событие для кастомизации данного действия, поэтому для решения задачи из нашего примера вынесем метод basket в кастомный файл.
Задача: необходимо при добавлении товара в корзину дать покупателю оставить небольшой комментарий к товару, который он положит в корзину, также этот комментарий необходимо видеть в административной части при просмотре параметров заказа. Также, в наш новый метод мы добавим функционал, который позволит увеличивать или уменьшать на единицу количество любого элемента заказа.
Решение: Скопируем код метода basket из файла __purchasing.php, в файл classes/modules/emarket/__custom.php и переименуем метод в basket_custom. В новом методе, строку:
$order = self::getBasketOrder(!in_array($mode, array('put', 'remove')));
необходимо изменить на:
$order = $this->getBasketOrder(!in_array($mode, array('put', 'remove')));
После строки:
if($itemType == 'element') {
добавим:
$orderItem->dop_info = htmlspecialchars(getRequest('dop_info'));
данный код будет добавлять в элемент заказа переданное значение из поля dop_info.
Для настройки функционала увеличения или уменьшения количества какого-либо элемента заказа, необходимо:
после строки:
$options = getRequest('options');
добавить:
$mode_change = (int) getRequest('change_item');
и также после строки:
$amount = $amount ? $amount : ($orderItem->getAmount() + 1);
добавить:
if($mode_change) $amount = ($mode_change == 1) ? $orderItem->getAmount() + 1 : $orderItem->getAmount() - 1;
Если говорить на примере TPL-шаблонизатора, то при использовании в шаблоне tpls/emarket/default.tpl, в блоке order_item, ссылок:
<a href="/emarket/basket/put/item/%id%/?change_item=1">+</a> <a href="/emarket/basket/put/item/%id%/?change_item=2">-</a>
к которым можно прикрепить кнопки, можно увеличивать или уменьшать количество любого элемента заказа на единицу.
Далее, в папке classes/modules/emarket/ необходимо создать файл permissions.custom.php:
<?php
$permissions = array('purchasing' => array('basket_custom'));
?>
В шаблонах сайта, должна быть создана форма для добавления товара в корзину, action формы, стандартный, за исключением того, что вместо метода basket необходимо прописать basket_custom. Также в саму форму необходимо добавить input:
<input name="dop_info" style="width: 100px;" type="text" />
В административой части, в модуле Шаблоны данных необходимо открыть на редактирование тип данных Заказ, получить его xml представление, добавив в конце адресной строки браузера: .xml
В полученных данных, будет примерно следующий блок:
<field id="236" name="order_items" title="Наименования заказа" field-type-id="12" visible="visible" guide-id="73">
<type id="12" name="Выпадающий список с множественным выбором" data-type="relation" multiple="multiple"/>
</field>
в которых guide-id="73", тогда открываем на редактирование тип данных с type_id = 73, по ссылке /admin/data/type_edit/73/ . В группу "Свойства наименования" добавим еще одно поле типа Строка, со строковым идентификатором dop_info. Для отображения сохраненного значения, при подробном просмотре заказа, переназначим некоторые шаблоны из файла \styles\skins\mac\data\modules\emarket\order-edit.xsl, если быть точнее добавим к имени элемента заказа, вывод значения из поля dop_info. Для реализации данной части заказа добавим файл: \styles\skins\mac\data\modules\emarket\form.modify.custom.xsl со следующим содержанием:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xlink="http://www.w3.org/TR/xlink">
<xsl:template match="object" mode="order-item-name">
<xsl:value-of select="@name" />
<br/>
<xsl:value-of select="//property[@name = 'dop_info']/value" />
</xsl:template>
<xsl:template match="object[//property/@name = 'item_link']" mode="order-item-name">
<a href="{$lang-prefix}/admin/catalog/edit/{//property/value/page/@id}/">
<xsl:value-of select="@name" />
</a><br/>
<xsl:value-of select="//property[@name = 'dop_info']/value" />
</xsl:template>
</xsl:stylesheet>
После выполнения всех описанных действий, при добавлении покупателем элемента заказа, он может указать краткий комментарий к добавляемому товару, а администратор магазина, при подробном просмотре заказа, этот комментарий сможет прочитать.