Главная > Magento, PHP > Применение Sales Rules в Magento 1.5.x

Применение Sales Rules в Magento 1.5.x

Так получилось, что последние два проекта на работе были связаны с написанием интернет магазинов на популярном движке magento. Вся сложность заключалась в том, что дизайн, полученный от клиента никак не вписывался в “стандартный” движок magento. Более того в некоторых местах необходимо изменить обыкновенную логику движка, не влезая при этом в код. В связи с этим пришлось решить ряд проблем.

Одной из таких проблем стало применение Sales Rules в ShoppingCart. Добавление, изменение количества и удаление товара было реализовано с помощью ajax.  Для этого были созданы внешние PHP скрипты, использующие классы magento. Здесь возникла проблема. После отработки ajax скрипта и обновлении данных shopping cart к ценам товаров не применяются правила скидок (SalesRules). После продолжительных поисков в сторону решения наткнулся на одну статью. Оказывается, правила скидок применяются в ценам по определенным событиям специальными объектами (Observers). И работают они в backend’е и frontend’е по-разному в зависимости от того, в каком окружении (areas) происходит работа (frontend, admin).

Простейший Ajax скрипт выглядит следующим образом:

include_once 'app/Mage.php'; // подключение файла ядра
$app = Mage::app(); // инициализация приложения
Mage::app()->getLocale()->setLocale('nl_NL');
Mage::app()->getTranslator()->init('frontend', true);
..........................................................

Подключается основной файл ядра magento, инициализируется приложение, а далее выполняются необходимые действия. Например, для добавления товара в карту происходит следующее:

$session = Mage::getSingleton('core/session', array('name'=>'frontend'));
$cart = Mage::helper('checkout/cart')->getCart();
......................................................
$cart->addProduct($product, $qty);
$session->setLastAddedProductId($product->getId());
$session->setCartWasUpdated(true);
$cart->save();
......................................................

Очевидно в этом случае, magento грузит observer’ы которые прописаны в config.xml в разделе. Таким образом, чтобы решить проблему, надо “указать magento” в каком окружении мы хотим работать:

Mage::app()->loadArea($area);

В данном случае это FRONTEND. Для этого необходимо сразу после инициализации приложения добавить строку такого вида:

Mage::app()->loadArea(Mage_Core_Model_App_Area::AREA_FRONTEND);

Добавить комментарий

Fill in your details below or click an icon to log in:

Логотип WordPress.com

You are commenting using your WordPress.com account. Log Out / Изменить )

Фотография Twitter

You are commenting using your Twitter account. Log Out / Изменить )

Фотография Facebook

You are commenting using your Facebook account. Log Out / Изменить )

Connecting to %s

Follow

Get every new post delivered to your Inbox.