动态添加布局更新XML文件
-
16-10-2019 - |
题
在我正在研究的扩展程序中,我在模块的 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>
更新
因此,使用Fabian的建议,我取得了更多进展。我没有从config.xml中删除任何东西,我使用了 Mage::app()->getConfig()->setNode('path_to_config', '')
在观察者内部 controller_action_layout_load_before
&它正确设置了配置。这使我可以撤消我从模块的配置进行的所有模型和封锁重写。接下来是路由器,我能够撤消由模块添加的控制器重写。
现在这里只有一个问题。加载后的布局文件被缓存。只要从Magento的管理员禁用了布局缓存,上述解决方案就可以使用。那么,有什么方法可以“不缓存我的特定扩展名”?这仅适用于特定的用例,因此,如果我可以通过编辑核心文件来做
解决方案 3
我最终使用的解决方案是撤消我在模块中重写的所有模型和块 config.xml
在里面 controller_action_layout_load_before
观察者及之后转到Magento Admin并禁用 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来实现,但有两个明确的选项:实现响应式设计(可能基于您的需求不起作用),或使用具有自己的主题设置的单独子域。您当前使用的条件方法将需要您将条件添加到许多缓存键,然后您与以前的船相同。