【问题标题】:Magento how to define layout handle for all controllerMagento 如何为所有控制器定义布局句柄
【发布时间】:2014-04-13 15:19:54
【问题描述】:

我正在寻找解决方案来为 controller_action 的整个控制器定义布局句柄。例如我想定义:

<mymodule_index></mymodule_index>

而不是

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

谢谢。

【问题讨论】:

  • 好问题 Styopchik
  • 只是想工作:)

标签: magento layout


【解决方案1】:

你可以通过运行这个来添加一个布局句柄:

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

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

【讨论】:

  • 好的,我照你说的做了。当我转储布局更新时,我得到“companes_index”。但是,当我为 添加布局更新时 - 它不会对我的页面进行任何更改。有什么想法吗?
  • 您在渲染布局之前是否运行了$this-&gt;loadLayoutUpdates();
  • 是的,但没有成功。
  • 我想投赞成票,但它缺少太多关键细节。
【解决方案2】:

在我的控制器中,我已经(重新)实现了这个方法

public function loadLayout($handles = null, $generateBlocks = true, $generateXml = true)
    {
        return parent::loadLayout(array('default','mymodule_index'),$generateBlocks,$generateXml);
    }

这将为每个控制器的操作添加一个名为 mymodule_index 的更新句柄(不会丢失默认句柄)。 您需要在每个控制器的操作中调用 loadLayout(),但这就是 magento 的工作原理......

【讨论】:

  • 我会随时为这个解决方案投票!这是一个代码实例,可以根据需要全面应用。我消除了在代码的其他地方插入多余的行。为清楚起见,您需要在 xml 中添加句柄 &lt;mymodule_index&gt; - 这是引用的 XML 定义。
【解决方案3】:

请尝试下面的代码......

 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();

    }

【讨论】:

    【解决方案4】:

    我找到了解决方案。在每次下一次更新中,您必须像这样提供&lt;update handle="" /&gt;

    <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>
    

    【讨论】:

    • 在这种情况下,您仍然必须为每个动作定义一个布局。我给你的解决方案是让你为每个动作保留一个布局句柄,并且只覆盖你需要的动作。
    猜你喜欢
    • 1970-01-01
    • 2013-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多