2013-09-07 6 views
0

Я изо всех сил пытался заставить модуль моего наблюдателя работать. Я использую 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)); 
       //}//    

} 
?> 

Любая помощь будет оценена по достоинству, поскольку я не могу понять, как это получается. Заранее спасибо за вашу помощь.

+0

попробуйте позвонить класс в XML-файл, как Pinnacle_Autoarchive_Model_Observer

+0

Опускаем 'var_dump (__ __ METHOD); выход;' в начале своего наблюдателя, чтобы проверить, если он стреляет или нет. –

+0

Алан - где именно я должен добавить var_dump? – Matt

ответ

0

вы можете использовать эту ссылку

http://snipplr.com/view/56959/

А также сделать свой и т.д./модули/config.xml

или вы можете сравнить ваш существующий код с этим вы можете убедиться найти ваше решение добавьте свой код после сохранения метода, когда место заказа.

надеюсь, что это обязательно поможет.

0

Похоже, что ваш config.xml является проблемой. У вас есть наблюдатель, определенный внутри adminhtml вместо global.

<?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> 

     <events> 
      <sales_order_save_after> 
        <observers> 
         <pinnacle_autoarchive> 
          <type>model</type> 
          <class>Pinnacle_Autoarchive_Model_Observer</class> 
          <method>salesOrderSaveAfter</method> 
         </pinnacle_autoarchive> 
        </observers> 
       </sales_order_save_after> 
     </events> 

    </global>   
</config> 
+0

Шон - Я изменил xml на выше, как было предложено. Не получайте никаких ошибок, но не получаете атрибут, изменяющийся либо после изменения статуса заказа, «заканчивается». Любые идеи о том, как проверить, стреляли они или нет? Правильно ли указан код для изменения атрибута? Любые советы были бы замечательными - еще раз спасибо за вашу помощь. – Matt

+0

В вашем наблюдателе поместите 'die ('test');' в 'public function salesOrderSaveAfter ($ observer) {'. Когда наблюдатель срабатывает, он должен остановиться, и вы увидите «тест» на экране. – seanbreeden

+0

Хорошо, я попробую. Еще раз спасибо за подсказку. – Matt