Pregunta

En una extensión que estoy trabajando, tengo esta sección en config.xml del módulo -

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

Este funciona correctamente como se esperaba, pero ahora tengo otra situación en la que yo quiero para activar esa actualización de diseño acc. a algunas condiciones. Quiero conseguir el mismo resultado final, pero lograrlo de forma dinámica a partir de código php. ¿Hay alguna manera de insertar dinámicamente ese nodo en la configuración global desde el controlador o observador?

Por cierto, hay un poco más de config también que quiero añadir a eso. Se utiliza para volver a escribir algunas clases de bloques y modelos de Magento. Pero si yo puedo entender cómo insertar a la configuración global mediante programación, creo que voy a ser capaz de añadir que también config de la misma manera.

editar

Solo para aclarar, yo quiero hacer mi trabajo de extensión exactamente como si esta configuración está presente en el archivo config.xml, pero quiero añadir que a partir del código php en lugar de la config.xml.

Para volver a escribir los bloques y modelos, voy como -

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

ACTUALIZACIÓN

Así, utilizando la sugerencia de Fabian, he hecho un poco más progreso. Yo no quitaba nada de la config.xml, yo solía Mage::app()->getConfig()->setNode('path_to_config', '') dentro del controller_action_layout_load_before observador y su ajuste correctamente la configuración. Esto me permitió deshacer todos los modelos y bloquea las reescrituras que hice de configuración de mi módulo. Siguiente en el router, yo era capaz de deshacer la reescritura de controlador que se ha añadido por el módulo.

Ahora sólo hay un problema que queda aquí. El archivo de diseño de una vez cargado se está en caché. Los trabajos solución anterior, siempre y cuando la caché de diseño se ha desactivado de administrador de Magento. Entonces, ¿hay alguna manera de "no almacenar en caché mi extensión en particular"? Esto es sólo para un caso de uso particular, por lo que no estaría mal si puedo hacerlo editando un fichero core

¿Fue útil?

Solución 3

La solución que finalmente se utiliza es para deshacer todos los modelos y bloques vuelve a escribir que he tenido en config.xml del módulo en el observador y controller_action_layout_load_before Después de que vaya a Magento administrador y desactivar la Block HTML y Layout caché.

Otros consejos

Para añadir un archivo de diseño:

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

Para añadir un mango:

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

Para cambiar los ajustes en la configuración:

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

Mientras que la lógica se puede lograr a través de XML diseño, hay dos opciones claras: aplicar un diseño de respuesta (no puede trabajar en base a sus necesidades), o utilizar un subdominio independiente con sus propios ajustes de tema. El enfoque condicional que está usando en ese momento será necesario que añada su condición de muchas claves de caché, y entonces estás en el mismo barco que antes.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a magento.stackexchange
scroll top