2013-08-26 95 views
4

我試圖在管理員cp中更新產品時觸發觀察者。記錄更新。Magento觀察員不是射擊

的Config.xml

<?xml version="1.0"?> 
<config> 
    <modules> 
     <Mod_Products> 
      <version>1.0.0</version> 
     </Mod_Products> 
    </modules> 

    <models> 
     <Mod_Products> 
      <class>Mod_Products_Model</class> 
     </Mod_Products> 
    </models> 

    <events> 
     <catalog_product_save_after> 
      <observers> 
       <Mod_Products_stock> 
        <type>singleton</type> 
        <class>Mod_Products_Model</class> 
        <method>logUpdate</method> 
       </Mod_Products_stock> 
      </observers> 
     </catalog_product_save_after> 
    </events> 
</config> 

Observer.php

class Mod_Products_Model_Observer { 
    public function logUpdate($observer) { 
     $event = $observer->getEvent()->getControllerAction()->getFullActionName(); 

     Mage::log('Event Fired: ' . $event); 
     Mage::log(json_encode($observer->getEvent())); 
    } 
} 

有沒有錯誤,並在日誌中沒有輸出。

+0

我假設你有一個'應用程序/ etc/modules/Mod_Products.xml'活動設置爲true並標有正確的代碼池? – Jason

+0

一個竅門是,如果你在開發服務器上,在不同的地方放置'死亡'語句。這有助於我確認一個文件沒有被自動加載器找到/加載,或者一個函數沒有被調用(而不是結果根本就不是我認爲的那樣) – 2014-09-26 18:40:35

回答

0

讓我們通過這些文件一個接一個。

應用的/ etc /模塊/ Mod_Products.xml

<?xml version="1.0"?> 
<config> 
    <modules> 
     <Mod_Products> 
      <!-- Change to Community codePool if in app/code/community --> 
      <codePool>local</codePool> 
      <active>true</active> 
     </Mod_Products> 
    </modules> 
</config> 

應用程序/代碼/本地/ MOD /產品的/ etc/config.xml中

<?xml version="1.0"?> 
<config> 
    <modules> 
     <Mod_Products> 
      <version>1.0.0</version> 
     </Mod_Products> 
    </modules> 

    <!-- Marking models as global sometimes helps --> 
    <global> 
     <models> 
      <Mod_Products> 
       <class>Mod_Products_Model</class> 
      </Mod_Products> 
     </models> 
    </global> 

    <events> 
     <catalog_product_save_after> 
      <observers> 
       <mod_products_model_observer> 
        <type>singleton</type> 
        <class>Mod_Products_Model_Observer</class> 
        <method>logUpdate</method> 
       </mod_products_model_observer> 
      </observers> 
     </catalog_product_save_after> 
    </events> 
</config> 

應用程序/代碼/local/Mod/Products/Model/Observer.php

class Mod_Products_Model_Observer { 
    public function logUpdate($observer) { 
     $event = $observer->getEvent()->getControllerAction()->getFullActionName(); 

     Mage::log('Event Fired: ' . $event); 
     Mage::log(json_encode($observer->getEvent())); 
    } 
} 

請注意文件名和目錄,以及我更新的config.xml中不同的xml句柄。讓我知道這是否適合你。

+0

所以我只是通過這些,使他們相同,檢查名稱,我還沒有得到任何結果。 – SlateEntropy

+0

那麼,爲什麼這是被接受的答案?你是如何讓你的觀察者被Magento拾起的? –

0

你的配置內部的類必須是觀察類,所以更改爲:

<class>Mod_Products_Model_Observer</class> 
+0

仍然沒有出現在日誌文件中 – SlateEntropy

+1

不可能我用這個事件這樣' Test_Obs_Model_Catalog_Product_Observer saveAfter '所以它應該是工作。我已通過在管理員中保存產品對其進行了測試。 – Emi

+0

剛注意到這個Confix.xml?希望這只是一個錯字,文件是config.xml – Emi

0

對於遇到此問題的人可能的解決方案是您的Magento應用程序可能沒有適當的權限來寫入app/var文件夾。特別是如果您正在使用基於UNIX/Linux的操作系統。

要解決此問題,只需將您的終端找到您的Magento應用程序的根目錄即可。一旦你在那裏,請使用以下命令給你的文件夾var適當的權限:

sudo chmod 777 -R var/

一旦我這樣做,我的應用程序能夠登錄並創建文件夾結構下的其他文件夾。

0

我在同樣的情況下掙扎,最後問題是Mage_Log沒有工作!嘗試使用像死(「我在這裏」);而不是法師::日誌()進行跟蹤,看看它是否來到你的課或不?如果是這樣,請嘗試通過配置打開Mage_Log:開發者:日誌設置(啓用=是)。 同時檢查Mage_Log是否啓用配置:高級

2

不知道爲什麼op接受Jason的答案,但並沒有真正解決它,但這裏是未來的求職者的正確答案(我注意到這是從Emi評論他的自己的回答):缺少adminhtml標籤!

的配置應該是這樣的(假設我沒有錯過任何東西):

<adminhtml> 
    <events> 
     <catalog_product_save_after> 
      <observers> 
       <Mod_Products_stock> 
        <type>singleton</type> 
        <class>Mod_Products_Model</class> 
        <method>logUpdate</method> 
       </Mod_Products_stock> 
      </observers> 
     </catalog_product_save_after> 
    </events> 
</adminhtml> 

希望這會有所幫助。

0

一旦我得到了同樣的問題,我解決了只需通過刷新系統緩存,所以你也可以嘗試刷新緩存刷新其配置。

-1

檢查您的模塊是否存在於"disable module output"並啓用
System -> configuration -> advenced ->禁用模塊輸出。
並檢查您的系統日誌文件