Magento 1.9.2.1 - 观察者:catalog_product_save_before不解雇

时间:2015-11-06 04:46:27

标签: php events magento-1.9 observers

我已经搜索过,在决定撰写此问题之前我不知道有多少Google页面,而且我知道MariusAlan Storm已经有一些非常好的答案给了非常相似的问题但不幸的是,我没有能够揭开观察者为什么不应该开火的神秘面纱。

这不是我第一次和观察者一起玩,而且我已经从管理员和手动var / cache文件夹刷新了缓存,我尝试了不同的工作语法来调用模型(complete_model_path_with下划线,模块/ model,uppercase,lowercase)。我有其他观察员每天在同一个安装上工作正常,我尝试以完全相同的方式做到没有成功。我也尝试用singleton而不是model来调用。我已经尝试了三个范围视图(全局,前端和adminhtml)。我已经搜索了任何直接或间接的核心覆盖,我仍然可能错过了隐藏在其他模块中的一个,但我几乎总是使用来自尊重大多数Magento标准的知名开发人员的模块。

我的代码中有一部分:

应用程序/代码/本地/命名空间/模块的/ etc /的 config.xml中

<global>
  <models>
    <module>
      <class>NameSpace_Module_Model</class>
      <resourceModel>module_mysql4</resourceModel>
    </module>
  </models>
  <events>
    <catalog_product_save_before>
      <observers>
        <module>
          <type>singleton</type>
          <class>NameSpace_Module_Model_Observer</class>
          <method>catalogProductSaveBefore</method>
        </module>
      </observers>
    </catalog_product_save_before>
  </events>
</global>

应用程序/代码/本地/命名空间/模块/型号/的 Observer.php

class NameSpace_Module_Model_Observer
{   

    public function catalogProductSaveBefore(Varien_Event_Observer $observer)
    {
        $product = $observer->getEvent()->getProduct();
        file_put_contents("OBSERVER.TXT","FIRED");
        echo "hello";
        exit();

        return $this;
    }

}

更新

应用程序的/ etc /模块/的 NameSpace_Module.xml

<?xml version="1.0"?>
<config>
  <modules>
    <NameSpace_Module>
      <active>true</active>
      <codePool>local</codePool>
      <version>0.1.0</version>
      <depends>
          <Mage_Catalog />
      </depends>
    </NameSpace_Module>
  </modules>
</config>

我甚至尝试在代码中添加随机字符来解释致命错误,但它永远不会被调用。这可能是我的一个非常简单的错误,我所知道的是我小心翼翼地忽略了我的代码而且我似乎无法找到问题。

在回答之前请尝试发表评论,因为我已经尝试了很多解决方案,也许已经尝试过了。

非常感谢您的帮助,任何建议都将不胜感激!

1 个答案:

答案 0 :(得分:4)

有些时候我在问自己;

  

- 我真的是开发人员吗?

这些时刻我的所有复杂代码都以所有可能的方式得到验证和完全功能,除了基本和小的东西。

在验证我的观察者模型是否确实存在于Magento内部之后:

require_once('/home/user/public_html/app/Mage.php');

Mage::init();

$observer = Mage::getModel('module/observer');

确实如此,我也意识到输出很简单 text ......

在任何PHP代码之前添加<?php总是一个好主意!