Magento 1.9.2.1 - Наблюдател: catalog_product_save_before не се задейства

Претърсих не знам колко страници в Google, преди да реша да напиша този въпрос, и знам, че вече има някои много хубави отговори от Мариус и Алън Сторм на много подобни въпроси, но за съжаление не можах да демистифицирам защо моята наблюдателят не стреля както трябва.

Не е първият път, когато играя с наблюдатели и прочистих кеша или от администратора, и ръчно папката var/cache, опитах различни работещи синтаксиси за извикване на модела (complete_model_path_with underscore,module/model,uppercase, smallcase ). Имам други наблюдатели, които работят добре всеки ден на една и съща инсталация и се опитах да го направя по абсолютно същия начин без успех. Също така се опитах да се обадя със сингълтон вместо модел. Опитах трите изгледа на обхват (глобален, интерфейс и adminhtml). Търсих всяко пряко или косвено презаписване на ядрото, все още е възможно да съм пропуснал скрит в друг модул, но почти винаги използвам модули от известни разработчици, които спазват повечето стандарти на Magento.

Има част от моя код:

app/code/local/NameSpace/Module/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>

app/code/local/NameSpace/Module/Model/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;
    }

}

АКТУАЛИЗИРАНЕ

app/etc/modules/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>

Дори се опитах да добавя произволни символи в кода, за да провокирам фатална грешка, но тя никога не се извиква. Може да е много проста моя грешка, всичко, което знам е, че внимателно пренебрегнах кода си и изглежда не мога да намеря проблема.

Моля, опитайте се да коментирате, преди да дадете отговор, тъй като вече опитах много решения и може би вече вашето.

Благодаря ви много предварително за вашата помощ, всяко предложение ще бъде оценено!


person ElGatito    schedule 06.11.2015    source източник
comment
опитвали ли сте да използвате дебъгер? опитахте ли да създадете модул за него? ако сте го направили, къде сте запазили манифеста на модула?   -  person iam-decoder    schedule 06.11.2015
comment
@iam-decoder благодаря ви за коментара. Не съм пробвал никакъв дебъгер, бихте ли ми предложили такъв? Този наблюдател всъщност е част от напълно функционален и работещ модул, доколкото знам, трябва да работи. Съжалявам, но не съм сигурен, че разбирам какво имате предвид под манифест?   -  person ElGatito    schedule 06.11.2015
comment
XDebug се справя добре за мен през годините и манифестът е XML файлът на модула. тъй като вашият модул работи, спазихте ли структурата на папките на модула? Трудно е да се каже лесно без това XML парче   -  person iam-decoder    schedule 06.11.2015
comment
Имате предвид този файл: app/etc/modules/NameSpace_Module.xml?   -  person ElGatito    schedule 06.11.2015
comment
да, има структура на папки, която трябва да се следва, за да може модулът да контролира действията там. Не знам дали вече сте го прочели добре, но може да ви помогне Аш Смит - Използване на наблюдатели в Magento   -  person iam-decoder    schedule 06.11.2015
comment
Актуализирах въпроса и добавих към него съдържанието на XML файла на модула.   -  person ElGatito    schedule 06.11.2015


Отговори (1)


Има моменти, в които се питам;

- Наистина ли съм разработчик?

Тези моменти, в които целият ми сложен код е проверен и напълно функционален по всички възможни начини, освен нещо толкова основно и малко.

След като проверих дали моят модел на наблюдател наистина съществува в Magento:

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

Mage::init();

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

Така е, разбрах също, че резултатът е обикновен текст...

Добавянето на <?php преди всеки php код винаги е добра идея!

person ElGatito    schedule 08.11.2015