Я изо всех сил пытался заставить модуль моего наблюдателя работать. Я использую Magento 1.7.0.2, и все кажется правильным для XML. Нет ошибок, но я не думаю, что это стрельба. Я хочу, чтобы это сделать три вещи на sale_order_save_after событие следующим образом:Magento 1.7 Модуль наблюдателя
Если статус заказа является «Complete», то сделайте следующее:
1) Изменение пользовательского атрибута «местоположение», чтобы «ПРОДАНО»
2) Измените видимость из каталога/Поиск в каталог.
3) Удалить все продукты на заказ от всех назначенных им категорий только одна новая категория (которая ID: 80)
И, наконец, сохранение/кэша обновления. Мой php-код не является полным, но мне бы хотелось, чтобы он срабатывал. Первый шаг и второй шаг должны работать, а не уверен, как обращаться с изменением категорий программно.
Вот что у меня есть для кода:
App/код/Local/Pinnacle/Autoarchive/и т.д./config.xml
<?xml version="1.0" encoding="UTF-8"?>
<config>
<modules>
<Pinnacle_Autoarchive>
<version>0.0.1</version>
</Pinnacle_Autoarchive>
</modules>
<global>
<models>
<Pinnacle_Autoarchive>
<class>Pinnacle_Autoarchive_Model</class>
</Pinnacle_Autoarchive>
</models>
</global>
<adminhtml>
<events>
<sales_order_save_after>
<observers>
<pinnacle_autoarchive>
<type>model</type>
<class>pinnacle_autoarchive/observer</class>
<method>salesOrderSaveAfter</method>
</pinnacle_autoarchive>
</observers>
</sales_order_save_after>
</events>
</adminhtml>
</config>
App/код/Local/Pinnacle/Autoarchive/Модель/Observer.php
<?php
/*
* Auto Archive all products on last order when status is complete
*/
class Pinnacle_Autoarchive_Model_Observer
{
public function salesOrderSaveAfter($observer)
{
$order = $observer->getEvent()->getOrder();
$orderStatus = $order->getStatus();
if ($orderStatus == 'complete') {
$items = $order->getAllItems();
foreach ($items as $item) {
$productsToUpdate[] = $item->getProductId();
}
$theAttributeToUpdate = 'location';
$theAttributeValue = 'SOLD';
Mage::getSingleton('catalog/product_action')->updateAttributes($productsToUpdate, array($theAttributeToUpdate => $theAttributeValue), 0);
}
if ($orderStatus == 'complete') {
$items = $order->getAllItems();
foreach ($items as $item) {
$productsToUpdate[] = $item->getProductId();
}
$theAttributeToUpdate = 'visibility';
$theAttributeValue = 'Catalog';
Mage::getSingleton('catalog/product_action')->updateAttributes($productsToUpdate, array($theAttributeToUpdate => $theAttributeValue), 0);
}
//if ($orderStatus == 'complete') {
//$items = $order->getAllItems();
//foreach ($items as $item) {
// $productsToUpdate[] = $item->getProductId();
//}
//Mage::getSingleton('catalog/product_action')->$productsToUpdate->setCategoryIds(array(80));
//}//
}
?>
Любая помощь будет оценена по достоинству, поскольку я не могу понять, как это получается. Заранее спасибо за вашу помощь.
попробуйте позвонить класс в XML-файл, как Pinnacle_Autoarchive_Model_Observer –
Опускаем 'var_dump (__ __ METHOD); выход;' в начале своего наблюдателя, чтобы проверить, если он стреляет или нет. –
Алан - где именно я должен добавить var_dump? – Matt