This shows you the differences between two versions of the page.
Next revision | Previous revision | ||
private:koding:hostcms:modules:shop:cart:markup [23.01.17 в 13:34] maximzasorin_gmail.com создано |
private:koding:hostcms:modules:shop:cart:markup [29.06.17 в 15:42] (current) Артем Куц ↷ Операцией перемещения обновлены ссылки |
||
---|---|---|---|
Line 6: | Line 6: | ||
Для реализации подобного механизма можно использовать данное решение. | Для реализации подобного механизма можно использовать данное решение. | ||
+ | |||
+ | Стандартного механизма для хранения наценки по каждому товару в корзине и заказе не предусмотрено, поэтому необходимо придумать механизм хранения этой информации. Изначально, когда заказ еще не создан будем хранить информацию о наценках в сессии, когда пользователь оформит заказ эта информация запишется в доп. свойство заказа и с помощью наблюдателей будет прикрепляться к товарам заказа. Цена товаров, для которых будет выбрана наценка, будет подменятся с помощью наблюдателя при выводе корзины, будут учитываться данные сессии или данные из доп. свойства заказа. | ||
+ | |||
+ | ===== Константы ===== | ||
+ | |||
+ | Добавляем константу ''MARKUP_FOR_TEST_PRODUCTS'' со значением равным величину наценки. | ||
+ | |||
+ | ===== Доп. свойство для заказа ==== | ||
+ | |||
+ | Идем в заказы интернет-магазина и добавляем новое доп. свойство с названием «Системная информация о наценках», типом «Большое текстовое поле» и XML-тегом ''markups'', запрещаем множественные значения. Это поле будет использоваться решением для хранения информации о наценках на товары заказа. | ||
===== XSL-шаблон ===== | ===== XSL-шаблон ===== | ||
Line 21: | Line 31: | ||
Для начала необходимо загрузить 4 наблюдателя. | Для начала необходимо загрузить 4 наблюдателя. | ||
- | ==== Наблюдатель для вывода наценки в заказе и ЦА ==== | + | ==== Наблюдатель для вывода наценки в заказе и ЦА (1) ==== |
- | * Загружаем файл: [[private:koding:hostcms:shop:cart:markup:additionalfields.php|/modules/shop/order/item/observer/additionalfields.php]] | + | * Загружаем файл: [[private:koding:hostcms:modules:shop:cart:markup:additionalfields.php|/modules/shop/order/item/observer/additionalfields.php]] |
* Добавляем в bootstrap.php:<code php>Core_Event::attach('shop_order_item.onCallmarkup', array('Shop_Order_Item_Observer_AdditionalFields', 'onCallmarkup'));</code> | * Добавляем в bootstrap.php:<code php>Core_Event::attach('shop_order_item.onCallmarkup', array('Shop_Order_Item_Observer_AdditionalFields', 'onCallmarkup'));</code> | ||
- | ==== Наблюдатель для подмены цены товара ==== | + | ==== Наблюдатель для подмены цены товара (2) ==== |
+ | |||
+ | Загружаем файл: [[private:koding:hostcms:modules:shop:cart:markup:addmarkuptoprice.php|/modules/shop/item/controller/observer/addmarkuptoprice.php]] | ||
+ | |||
+ | ==== Наблюдатель для прикрепления наценки к корзине (3) ==== | ||
+ | |||
+ | Загружаем файл: [[private:koding:hostcms:modules:shop:cart:markup:attachmarkup.php|/modules/shop/cart/controller/show/observer/attachmarkup.php]] | ||
+ | |||
+ | ===== Формы центра администрирования ===== | ||
+ | |||
+ | Идем в раздел Системы → Формы центра администрирования, находим форму «Список товаров в заказе», добавляем к ней поле новое поле «Наценка» с ключевым полем ''markup'' и типом «Вычисляемое поле (Используется обратный вызов функции)». | ||
+ | |||
+ | Это поле будет формироваться наблюдателем (1), подключенным в bootstrap.php и в центре администрирования должно выглядеть так: | ||
- | Загружаем файл: [[private:koding:hostcms:shop:cart:markup:addmarkuptoprice.php|/modules/shop/item/controller/observer/addmarkuptoprice.php]] | + | {{:private:koding:hostcms:shop:cart:pasted:20170123-150540.png}} |
- | ==== Наблюдатель для прикрепления наценки к корзине ==== | + | * Необходимо обратить внимание, что стоимость товара здесь выводится с учетом наценки, а наценка выступает в качестве информационного поля. Для вывода цены без наценки можно использовать метод ''Shop_Order_Item_Observer_AdditionalFields::onCallprice_without_markup'', создав аналогично полю ''markup'' поле ''price_without_markup'', а оригинальное поле с ценой из форм ЦА удалить. При этом в карточке товара в заказе все равно будет выводится цена товара с наценкой. |
- | Загружаем файл: [[private:koding:hostcms:shop:cart:markup:attachmarkup.php|/modules/shop/cart/controller/show/observer/attachmarkup.php]] | ||
- | | ||
===== ТДС корзины ===== | ===== ТДС корзины ===== | ||
==== Настройки страницы ==== | ==== Настройки страницы ==== | ||
- | - Код вывода краткой корзины обопрачиваем в наблюдатель:<code php> | + | - Код вывода краткой корзины оборачиваем в наблюдатель:<code php> |
Core_Event::attach('Shop_Item_Controller.onAfterCalculatePrice', array('Shop_Item_Controller_Observer_AddMarkupToPrice', 'onAfterCalculatePrice'));</code>После вывода:<code php>Core_Event::detach('Shop_Item_Controller.onAfterCalculatePrice', array(' | Core_Event::attach('Shop_Item_Controller.onAfterCalculatePrice', array('Shop_Item_Controller_Observer_AddMarkupToPrice', 'onAfterCalculatePrice'));</code>После вывода:<code php>Core_Event::detach('Shop_Item_Controller.onAfterCalculatePrice', array(' | ||
Shop_Item_Controller_Observer_AddMarkupToPrice', 'onAfterCalculatePrice'));</code>Должно быть так:<code php>Core_Event::attach('Shop_Item_Controller.onAfterCalculatePrice', array('Shop_Item_Controller_Observer_AddMarkupToPrice', 'onAfterCalculatePrice')); | Shop_Item_Controller_Observer_AddMarkupToPrice', 'onAfterCalculatePrice'));</code>Должно быть так:<code php>Core_Event::attach('Shop_Item_Controller.onAfterCalculatePrice', array('Shop_Item_Controller_Observer_AddMarkupToPrice', 'onAfterCalculatePrice')); |