private:koding:hostcms:modules:shop:cart:markup

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

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'​));​
private/koding/hostcms/modules/shop/cart/markup.1485167659.txt.gz · Last modified: 23.01.17 в 13:34 by maximzasorin_gmail.com