通过magento中的块编码进行多重布局

时间:2013-12-31 09:55:29

标签: php magento magento-1.7

我是magento的新手。我没有权限修改控制器文件。所以我正在用块创建新模块以使我的要求有效。现在一切正常。

但是,现在根据条件,我需要加载不同的布局。 (一个带有左侧边栏,另一个没有左侧边栏)。我必须通过块代码加载布局xml文件。

我不知道如何处理阻止。任何人都可以帮助我吗?

5 个答案:

答案 0 :(得分:1)

您好,您可以将模板设置为布局xml,如下所示

<reference name="root">   
      <action method="setTemplate"><template>page/1column.phtml</template></action>   
    </reference>
<reference name="root">   
      <action method="setTemplate"><template>page/2columnleft.phtml</template></action>   
    </reference>

答案 1 :(得分:1)

您可以尝试以下解决方案。 首先,您不能轻易地为特定页面添加两种不同的布局

<checkout_index_cart>
<reference name="root">
 <action method="setTemplate"><template>page/2columns-left.phtml</template></action>
</reference>
...
<checkout_index_cart>

<checkout_onepage_index>

<reference name="root">
 <action method="setTemplate"><template>page/1column.phtml</template></action>
</reference>
...
<checkout_onepage_index>

答案 2 :(得分:1)

在辅助函数

中定义的条件的基础上更改页面布局
<reference name="root">
        <action method="setTemplate"><template helper="modulename/getNewLayoutupdate"/></action>
</reference>

这是辅助函数,相应地有条件

  public function getNewLayoutupdate(){

    $page_layout = Mage::getStoreConfig('customize_your_own');

    switch($page_layout)
    {
        case 'empty':
            $page_layout = 'page/empty.phtml';
            break;
        case 'one_column':
            $page_layout = "page/1column.phtml";
            break;
        case 'two_columns_left':
            $page_layout = 'page/2columns-left.phtml';
            break;
        case 'two_columns_right':
            $page_layout = 'page/2columns-right.phtml';
            break;
        case 'three_columns':
            $page_layout = 'page/3columns.phtml';
            break;
        default:
            $page_layout = 'page/2columns-right.phtml';
    }

    return $page_layout;

}

答案 3 :(得分:1)

我已经修好了自己。

在块中,更改了布局,而不是删除left侧边栏。

protected function _prepareLayout() {


        if($my_condition)
        {        

            $this->getLayout()->getBlock('root')->setTemplate("page/1column.phtml");

        }

        parent::_prepareLayout();        
        return $this;
    }

答案 4 :(得分:0)