Динамическое добавление обновлений макета XML -файлов

magento.stackexchange https://magento.stackexchange.com/questions/3342

Вопрос

В расширении, над которым я работаю, у меня есть этот раздел в модуле config.xml-

<config>
    <frontend>
        <layout>
            <updates>
                <packagename_modulename module="packagename_modulename">
                    <file>packagename_modulename</file>
                </packagename_modulename>
            </updates>
        </layout>
    </frontend>
</config>

Это работает правильно, как и ожидалось, но теперь у меня есть другая ситуация, когда я хочу активировать этот макет обновления ACC. в некоторых условиях. Я хочу достичь того же конечного результата, но динамически достигаю его от PHP -кода. Есть ли способ динамически вставить этот узел в глобальную конфигурацию из контроллера или наблюдателя?

Кстати, есть еще несколько конфигурации, которые я хочу добавить к этому. Он используется, чтобы переписать некоторые классы блоков и моделей Magento. Но если я смогу понять, как вставить в глобальную конфигурационную программа, я думаю, что смогу добавить эту конфигурацию так же.

РЕДАКТИРОВАТЬ

Просто чтобы уточнить, я хочу заставить свое расширение работать точно так же, как если бы эта конфигурация присутствовала в config.xml файл, но я хочу добавить его из PHP -кода вместо config.xml.

Для переписывания блоков и моделей, я иду-

<config>
    <global>
        <blocks>
            <payment>
                <rewrite>
                    <form_cc>PackageName_ModuleName_Block_Form_Cc</form_cc>
                </rewrite>
            </payment>
        </blocks>
    </global>
</config>

ОБНОВИТЬ

Поэтому, используя предложение Фабиана, я добился большего прогресса. Я ничего не удалил из config.xml, я использовал Mage::app()->getConfig()->setNode('path_to_config', '') Внутри наблюдателя controller_action_layout_load_before И это правильно настроить конфигурацию. Это позволило мне отменить все модели и блоки переписывания, которые я сделал из конфигурации моего модуля. Далее с маршрутизатора я смог отменить переписывание контроллера, которое было добавлено модулем.

Теперь здесь остается только одна проблема. Файл макета после загрузки получает кэширован. Приведенное выше решение работает до тех пор, пока кеш макета был отключен от администратора Magento. Так есть ли способ «не кэшировать мое конкретное расширение»? Это только для конкретного варианта использования, поэтому было бы нормально, если бы я мог сделать это, редактируя основной файл

Это было полезно?

Решение 3

Решение, которое я наконец использовал, заключается в том, чтобы отменить все модели и блоки, которые у меня были в модуле config.xml в controller_action_layout_load_before Наблюдатель и после этого перейти к администратору Magento и отключите Block HTML & Layout кеш.

Другие советы

Чтобы добавить файл макета:

Mage::app()->getLayout()->loadFile($file);

Чтобы добавить ручку:

Mage::app()->getLayout()->getUpdate()->addHandle('your_handle_name');

Чтобы изменить настройки в конфигурации:

Mage::getConfig()->setNode(
    'global/helpers/core/encryption_model',
    'Ikonoshirt_Pbkdf2_Model_Stub_EE'
);

В то время как ваша логика может быть достигнута с помощью макета XML, есть два четких варианта: реализовать адаптивный дизайн (не может работать на основе ваших потребностей) или использовать отдельный поддомен с собственными настройками темы. Условный подход, который вы в настоящее время используете в настоящее время, потребует от вас добавления вашего состояния во многих клавишах кэша, а затем вы находитесь в той же лодке, что и раньше.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top