Обозреватели событий 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, то вы, возможно, забыли очистить кэш другим способом, отличным от того, как вы делаете это локально.

В конечном счете, ваш модуль выглядит отлично, за исключением различий в регистре псевдонима класса и объявления наблюдателя.

Другие вопросы по тегам