У меня вопрос, как запустить действие после успешного заказа (с идентификатором 11)?
Из предыдущих вопросов я прочитал, что мне нужно создать наблюдателя для checkout_onepage_controller_success_action
но мало что объясняется после этого.
Ниже приведен код, который (из того же предыдущего вопроса) я использовал для изменения продукта:
$special_cat = 11; // Special product category
$customerId = Mage::getSingleton('customer/session')->getCustomerId();
$lastOrderId = Mage::getSingleton('checkout/session')->getLastOrderId();
$order = Mage::getSingleton('sales/order');
$order->load($lastOrderId);
$allitems = $order->getAllItems();
foreach($allitems as $item)
{
$product = Mage::getModel('catalog/product')->load($item->getProductId());
$categoryIds = $product->getCategoryIds();
if (in_array($special_cat, $categoryIds)) {
$mem_group_id = $item->getSku(); // $item->getSku() is customer group name
$customer_detail = Mage::getSingleton('customer/session')->getCustomer();
$customer_detail->setGroupId($mem_group_id);
$customer_detail->save();
}
}
Нужно ли создавать для этого расширение или мне нужно редактировать файлы ядра? Где я должен создать Обозреватель?
Да. Вам нужно создать расширение для этого. Это не имеет большого значения. Таким образом, вы хотите изменить группу пользователей для клиента после успешного выполнения заказа. Правильно ?. Для этого вам нужно наблюдать за процессом оформления заказа и указать в нем свой код. И ты был прав, checkout_onepage_controller_success_action
является правильным наблюдателем для этого.
Ну вот..
Приложение / код / местные / пакета / MODULENAME / и т.д. / config.xml
<?xml version="1.0"?>
<config>
<modules>
<Packagename_ModuleName>
<version>0.1.0</version>
</Packagename_ModuleName>
</modules>
<global>
<models>
<modulename>
<class>Packagename_ModuleName_Model</class>
<resourceModel>modulename_mysql4</resourceModel>
</modulename>
</models>
<events>
<checkout_onepage_controller_success_action> <!-- identifier of the event we want to catch -->
<observers>
<checkout_onepage_controller_success_action_handler> <!-- identifier of the event handler -->
<type>model</type> <!-- class method call type; valid are model, object and singleton -->
<class>modulename/observer</class> <!-- observers class alias -->
<method>changeUserGroup</method> <!-- observer's method to be called -->
<args></args> <!-- additional arguments passed to observer -->
</checkout_onepage_controller_success_action_handler>
</observers>
</checkout_onepage_controller_success_action>
</events>
</global>
</config>
Вот Packagename_ModuleName_Model
это ваш новый класс. а также changeUserGroup
это ваш новый метод. Здесь только мы разместим наш код для изменения группы пользователей.
так,
Приложение / код / местные / пакета / MODULENAME / Модель / Observer.php
<?php
class Packagename_ModuleName_Model_Observer
{
public function changeUserGroup(Varien_Event_Observer $observer)
{
//$customer = $observer->getCustomer();
$special_cat = 11; // Special product category
$customerId = Mage::getSingleton('customer/session')->getCustomerId();
$lastOrderId = Mage::getSingleton('checkout/session')->getLastOrderId();
$order = Mage::getSingleton('sales/order');
$order->load($lastOrderId);
$allitems = $order->getAllItems();
foreach($allitems as $item)
{
$product = Mage::getModel('catalog/product')->load($item->getProductId());
$categoryIds = $product->getCategoryIds();
if (in_array($special_cat, $categoryIds)) {
$mem_group_id = $item->getSku(); // $item->getSku() is customer group name
$customer_detail = Mage::getSingleton('customer/session')->getCustomer();
$customer_detail->setGroupId($mem_group_id);
$customer_detail->save();
}
}
}
}
И, наконец, включите ваш модуль,
приложение / и т.д. / модули / Packagename_ModuleName.xml
<?xml version="1.0"?>
<config>
<modules>
<Packagename_ModuleName>
<active>true</active>
<codePool>local</codePool>
<version>0.1.0</version>
</Packagename_ModuleName>
</modules>
</config>
Обычно мы получаем детали от $observer
когда мы что-то наблюдаем. Но в вашем случае customer_id
а также order-id
доступен в сессии. Таким образом, мы можем получить эти вещи из сессии. Вот и все.
Если у вас есть какие-либо сомнения, пожалуйста, оставьте комментарий здесь.
Никогда не рекомендуется редактировать основные файлы. Если вы хотите изменить функциональность Magento по умолчанию, вам следует переопределить определенные файлы.
Вот хороший учебник по переопределению
Гораздо лучший способ — создать расширение и наблюдать за конкретными событиями. В вашем случае соблюдайте sales_order_place_after событие и проверить, содержит ли заказ товар с идентификатором 11 или нет? Если да, то измените группу клиентов.
Для получения дополнительной информации о наблюдателе Проверь это.
Надеюсь, поможет.
нет необходимости создавать расширение для него.
Просто зайдите в вашу onepage_controller_action и добавьте следующий код.
$mem_catid = 982; //CATEGORY ID products to filter
$_customerId = Mage::getSingleton('customer/session')->getCustomerId();
$lastOrderId = Mage::getSingleton('checkout/session')->getLastOrderId();
$order = Mage::getSingleton('sales/order');
$order->load($lastOrderId);
$allitems = $order->getAllItems();
foreach($allitems as $item)
{
$product = Mage::getModel('catalog/product')->load($item->getProductId());
$categoryIds = $product->getCategoryIds();
if (in_array($mem_catid, $categoryIds)) {
$mem_group_id = $item->getSku(); // $item->getSku() is customer group name
$customer_detail = Mage::getSingleton('customer/session')->getCustomer();
$customer_detail->setGroupId(6);//add customer group id here which you want to set.
$customer_detail->save();
}
}