Обозреватели событий Magento или пользовательские модули не работают на производстве
Я пытаюсь использовать несколько классов и модулей-наблюдателей для Magento, которые все помещаются в app / code / local. Все они работают на моей локальной рабочей станции, но НЕ будут работать, когда я копирую их в производство через FTP. Я схожу с ума, пытаясь понять, что происходит. Весь мой код кажется звуковым. Вот пример наблюдателя:
Приложение / код / местные /Mural/ Ценообразование / модель /Observer.php
<?php
class Mural_Pricing_Model_Observer {
public function setMuralPricing($observer) {
echo 'We did it!';
die();
}
}
Приложение / код / местные /Mural/ и т.д. /config.xml
<?xml version="1.0"?>
<config>
<modules>
<Mural_Pricing>
<version>0.0.1</version>
</Mural_Pricing>
</modules>
<global>
<models>
<Mural_Pricing>
<class>Mural_Pricing_Model</class>
</Mural_Pricing>
</models>
</global>
<adminhtml>
<events>
<sales_quote_add_item>
<observers>
<Mural_Pricing>
<class>mural_pricing/observer</class>
<method>setMuralPricing</method>
</Mural_Pricing>
</observers>
</sales_quote_add_item>
</events>
</adminhtml>
</config>
приложение / и т.д. / модули /Mural_Pricing.xml
<?xml version="1.0"?>
<config>
<modules>
<Mural_Pricing>
<codePool>local</codePool>
<active>true</active>
<depends>
<Mage_Catalog />
</depends>
</Mural_Pricing>
</modules>
</config>
Как я уже сказал, это прекрасно работает локально, но не в производстве, с несколькими различными наблюдателями и модулями. Разочарование. Заранее спасибо!
1 ответ
Первое, что я замечаю, это то, что ваша декларация mural_pricing/observer::setMuralPricing()
на вашем наблюдаемом событии.
Если вы посмотрите на конфигурационный XML, вы регистрируете модели в этом модуле как Mural_Pricing/...
согласно этому XML:
<models>
<Mural_Pricing>
<class>Mural_Pricing_Model</class>
</Mural_Pricing>
</models>
Лучшая практика Magento, кажется, состоит в том, чтобы использовать все строчные буквы для псевдонимов классов, поэтому я предлагаю вам изменить это на mural_pricing
, Это также будет работать, если вы измените декларацию своего наблюдателя на использование эквивалента в верхнем регистре.
С другой стороны, я не думаю, что на самом деле имеет значение, как вы называете этот тег, но <Mural_Pricing>
тег под <observers>
в идеале должно представлять краткое описание того, что делает ваш наблюдатель (опять же, не думаю, что это действительно имеет значение) - например, <mural_pricing_set_pricing>
,
Наконец, нужно сказать - убедитесь, что вы правильно очистили кэш для повторного анализа конфигурации XML. Если вы используете Redis или другую кеширующую архитектуру в производственной среде по сравнению с dev/staging/local, то вы, возможно, забыли очистить кэш другим способом, отличным от того, как вы делаете это локально.
В конечном счете, ваш модуль выглядит отлично, за исключением различий в регистре псевдонима класса и объявления наблюдателя.