Magento如何为所有控制器定义布局句柄

Magento如何为所有控制器定义布局句柄,magento,layout,Magento,Layout,我正在寻找解决方案来定义整个控制器的布局句柄,而不是控制器的动作。例如,我想定义: <mymodule_index></mymodule_index> 而不是 <mymodule_index_index></mymodule_index_index> <mymodule_index_someaction></mumodule_index_someaction> 谢谢。您可以通过运行以下命令添加布局句柄: $upd

我正在寻找解决方案来定义整个控制器的布局句柄,而不是控制器的动作。例如,我想定义:

<mymodule_index></mymodule_index>

而不是

<mymodule_index_index></mymodule_index_index>
<mymodule_index_someaction></mumodule_index_someaction>


谢谢。

您可以通过运行以下命令添加布局句柄:

$update=$this->getLayout()->getUpdate();
$update->addHandle('mymodule_index')


然后,您可以将这段代码添加到控制器中受保护的“\u initHandles”函数中,您将为每个操作运行该函数。

请尝试下面的代码

 public function indexAction(){
    {
    ... 
    $update = $this->getLayout()->getUpdate();
     $update->addHandle('mymodule_index');
     $this->loadLayoutUpdates();
     $this->generateLayoutXml()->generateLayoutBlocks();
     $this->renderLayout();

    }
    public function samelocationAction(){
    {
    ... 
    $update = $this->getLayout()->getUpdate();
     $update->addHandle('mymodule_index');
     $this->loadLayoutUpdates();
     $this->generateLayoutXml()->generateLayoutBlocks();
     $this->renderLayout();

    }

我找到了解决办法。在下一次更新中,您必须提供如下内容:

<companies_catalog>
    <label>Companies (All Pages)</label>
    <reference name="root">
        <action method="setTemplate"><template>page/2columns-left.phtml</template></action>
    </reference>
    <reference name="left">
        <block type="businesscategory/companies_navigation" name="companies.navigation" before="-" template="businesscategory/companies/navigation.phtml" />
    </reference>
</companies_catalog>

<companies_catalog_index>
    <label>Companies (All Pages)</label>
    <update handle="companies_catalog" />
    <reference name="content">
        <block type="businesscategory/companies_list" name="companies.list" template="businesscategory/companies/list.phtml" />
    </reference>
</companies_catalog_index>

<companies_catalog_view>
    <label>Company page</label>
    <update handle="companies_catalog" />
    <reference name="content">
        <block type="businesscategory/companies_view" name="company.info" template="businesscategory/companies/view.phtml" />
    </reference>
</companies_catalog_view>

公司(所有页面)
第页/2列-left.phtml
公司(所有页面)
公司网页
在我的控制器中,我(重新)实现了这个方法

public function loadLayout($handles = null, $generateBlocks = true, $generateXml = true)
    {
        return parent::loadLayout(array('default','mymodule_index'),$generateBlocks,$generateXml);
    }
这将为每个控制器的操作添加一个名为mymodule_index的更新句柄(不会丢失默认的)。
您需要在每个控制器的操作中调用loadLayout(),但这就是magento的工作方式…

好问题Styopchik只是想工作:)好的,我按照您写的做了。当我转储布局更新时,会得到“公司索引”。但是,当我为添加布局更新时,它不会对我的页面进行任何更改。有什么想法吗?您是否运行了
$this->loadLayoutUpdates()在渲染布局之前?是的,没有成功。我想对此进行投票,但它缺少太多重要的细节。在这种情况下,您仍然需要为每个操作定义一个布局。我给你的解决方案允许你为每个动作保留一个布局句柄,并且只覆盖你需要的动作。我会投票支持这个解决方案的!这是一个代码实例,然后根据需要应用于所有领域。我消除了在代码的其他地方插入冗余行。为了清楚起见,您需要在xml中添加一个句柄
——这是所引用的xml定义。