Magento通过系统变量动态改变布局

问题描述:

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

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

我没有看到任何方法来拉动XML布局文件上的系统变量值。

但我很确定必须有一个正确的方法来做到这一点。到目前为止,这是我有

Magento - xml layouts, specify value for 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> 

这可以很容易地实现使用布局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; 
} 
+0

谢谢德鲁...我试了一下...但我得到了这个错误:致命错误:类'Mage_Prem_Spectra_Helper_Data'在D:\ xampp \ htdocs \ magento17 \ app \ Mage.php中找不到第546行。我已将该函数添加到我的默认助手。并设置

+0

仍然没有。 :(它输出这个错误:致命错误:Class'Mage_Spectra_Helper_Data'找不到D:\ xampp \ htdocs \ magento17 \ app \ Mage.php 546行 – Kamal 2012-07-22 07:12:08

+0

你可以发布你的模块config.xml的内容,它可能是你没有声明你的帮手节点 – 2012-07-22 07:23:48

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

实现一个观察者,听取事件controller_action_layout_generate_blocks_before,然后让观察者块,并设置模板

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

这应该这样做。

其他想法,请尝试事件controller_action_layout_load_before,但我认为这太早了。

除了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更新句柄可用。