5

有没有一种方法可以通过使用在我们自己的模块上设置的系统变量来动态更改 Magento 页面(比如说产品类别页面)的布局?我希望能够通过我自己的模块管理配置面板设置我的类别页面的默认布局。这样每次我想更改某个 magento 页面的默认布局时,我就不必处理那些令人困惑的 XML 布局文件。

我知道,在 phtml 文件中,我们可以通过调用Mage::getStoreConfig('module/scope/...')使用该系统变量来简单地调用我们自己的模块的系统变量。但是,如果我们想使用该系统变量来更改默认情况下在 XML 布局文件中设置的整个布局,该怎么办。

我看不到任何方法可以在 XML 布局文件中提取该系统变量值。

但我很确定必须有正确的方法来做到这一点。到目前为止,这是我得到的最接近的线索

Magento - xml布局,为ifconfig指定值?

但是,对于我真正想要实现的目标,我仍然找不到任何直接的答案

这是我的 config.xml 的内容

<config>
    <modules>
        <Prem_Spectra>
            <version>0.1.0</version>
        </Prem_Spectra>
    </modules>

    <global>
        <models>
            <spectra>
                 <class>Prem_Spectra_Model</class>
            </spectra>
        </models>

        <helpers>
            <prem_spectra>
                <class>Prem_Spectra_Helper</class>
            </prem_spectra>
        </helpers>

    </global>
</config>
4

3 回答 3

10

这可以很容易地使用布局 xml 和助手中的简单方法来实现。我没有看到这里对观察员有任何要求,也没有任何其他过于详尽的要求。

因此,根据您从自己的模块存储配置值更改所有类别页面布局的要求,您将在布局 xml 中需要以下内容:

<catalog_category_view>
    <reference name="root">
        <action method="setTemplate">
            <template helper="yourmodule/switchTemplate" />                  
        </action>
    </reference>
</catalog_category_view>

以及您的模块默认助手中的以下内容:

public function switchTemplate()
{
    $template = Mage::getStoreConfig('path_to/yourmodule/config');
    return $template;
}
于 2012-07-21T17:25:14.140 回答
-1

我们在谈论根元素的模板,所以 3columns、2columns 等等?正确的?

实现一个观察者,监听事件controller_action_layout_generate_blocks_before然后在观察者中获取block并设置模板

Mage::app()->getLayout()->getBlock('root')->setTemplate($myFancyTemplatePath);

这应该这样做。

其他想法,试试这个事件controller_action_layout_load_before,但我认为这还为时过早。

于 2012-07-21T16:26:32.210 回答
-2

除了Fabian的回答:

您也许可以扩展“显示模式”类别的功能。使用controller_action_layout_load_before事件然后检索类别的显示模式并为其创建 XML 更新句柄。

    $category = Mage::registry('current_category');
    $handle = 'category_displaymode_' . strtolower($category->getDisplayMode());

    $layout = $observer->getEvent()->getLayout();
    $layout->getUpdate()->addHandle($handle);

这样,您可以在 local.xml 中预先定义各种布局,并通过调整管理中类别编辑页面上的“显示模式”下拉菜单轻松地在它们之间切换。

通过在管理员中进行一些调整,您可以将其他显示模式添加到下拉列表中,以使更多类型的自定义显示模式 xml 更新句柄可用。

于 2012-07-21T17:24:44.670 回答