0

オブザーバーモジュールを機能させるのに苦労しています。Magento 1.7.0.2 を使用していますが、XML についてはすべて正しいようです。エラーはありませんが、起動しているとは思いません。次のように、sale_order_save_after イベントで 3 つのことを実行する必要があります。

注文ステータスが「完了」の場合は、次の手順を実行します。

1) カスタム属性の「location」を「SOLD」に変更します

2) 可視性をカタログ/検索からカタログに変更します。

3) 割り当てられたすべてのカテゴリから注文中のすべての製品を削除して、1 つの新しいカテゴリ (ID:80) にします。

最後に、キャッシュを保存/更新します。私のphpコードは完全ではありませんが、少なくとも起動したいと思います. 最初のステップと2番目のステップは機能するはずですが、プログラムでカテゴリを変更する方法がわかりません。

これが私がコードのために持っているものです:

アプリ/コード/ローカル/ピナクル/オートアーカイブ/etc/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>     

アプリ/コード/ローカル/ピナクル/オートアーカイブ/モデル/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));
                //}//            

}
?>

これをうまく機能させることができないようです。よろしくお願いします。

4

2 に答える 2

0

このリンクを使用できます

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

また、etc/modules/config.xml を作成します

または、既存のコードをこれと比較することもできます。注文時にメソッドを保存した後にコードを追加するソリューションを確実に見つけることができます。

これが確実に役立つことを願っています。

于 2013-09-07T05:31:15.613 に答える
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> 
于 2013-09-07T13:52:51.970 に答える