Php Magento,自定义模块的默认布局

Php Magento,自定义模块的默认布局,php,magento,magento-layout-xml,Php,Magento,Magento Layout Xml,我只想在我的模块的左栏中添加一个块,而不是整个网站 如果我把它放在标签中,它会显示在整个网站上,但我想做一些类似的事情,这可能吗 我知道我可以在每个layout\u处理程序中放置我的块,比如: <mymodule_controllername_actionname> <reference name="left"> <block type="mymodule/block" name="left_navigation" before="-" t

我只想在我的模块的左栏中添加一个块,而不是整个网站

如果我把它放在
标签中,它会显示在整个网站上,但我想做一些类似
的事情,这可能吗

我知道我可以在每个
layout\u处理程序中放置我的块,比如:

 <mymodule_controllername_actionname>
    <reference name="left">
        <block type="mymodule/block" name="left_navigation" before="-" template="mymodule/left-nav.phtml" />
    </reference>
 </mymodule_controllername_actionname>

但这不是我想要的,我想这样做:

 <mymodule_default>
    <reference name="left">
        <block type="mymodule/block" name="left_navigation" before="-" template="mymodule/left-nav.phtml" />
    </reference>
 </mymodule_default>

还是不可取


谢谢

您只能为自定义模块设置布局。例如,您想要一个左侧列,您的布局文件应该如下所示

<?xml version="1.0"?>   
<layout version="0.1.0">   
  <modulename_index_index>   
    <reference name="root">   
      <action method="setTemplate"><template>page/2columns-left.phtml</template></action>   
    </reference>
    <reference name="left">   
      <block type="modulename/left" name="modulename_left" template="modulename/left.phtml"/>   
    </reference>   

  </modulename_index_index>   
</layout>   
<config>
...
<frontend>
<layout>
          <updates>
            <modulename>
              <file>modulename.xml</file>
            </modulename>
          </updates>
        </layout>
  ...
</frontend>
</config>
更新:

根据magento的布局,您可以在模块中添加
。因此,它可以设置该模块中的所有页面(控制器)都可以使用该块。
就这样。如果您有任何疑问,请告诉我。

在另一个网站上获得了答案,请复制到此处:

只能在每个控制器中添加布局更新句柄

public function preDispatch()
{
  parent::preDispatch();
  $this->getLayout()->getUpdate()
       ->addHandle('mymodule_default');
}
或者在所有
句柄中使用指令

例如:

<mymodule_controllername_actionname>
    <update handle="mymodule_default"/>
    ...
<mymodule_controllername_actionname>

...

有一种更优雅的方法:

在module layout.xml中,您可以创建一个句柄,然后每隔一个句柄更新一次,如下所示:

<lista_default>

<reference name="head">

<action method="setText">        
    <text>
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
        <script src="https://cdnjs.cloudflare.com/ajax/libs/tether/1.4.4/js/tether.min.js"></script>
        <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/js/bootstrap.min.js"></script>
    </text>   
</action>

</reference>

</lista_default>

<lista_index_index>

    <update handle="lista_default" />

    <reference name="content">

    </reference>

</lista_index_index>


是的,但这样我必须在每个布局处理程序中写入它,如果我想用其他模块扩展我的模块,并想添加到第一个模块的任何链接,这种方式可能不可能。对不起。我无法理解你。简单点,我不想在每个布局处理程序中都写块,试图找到更好的方法。请检查我的答案。你的意思是像
这样,你的左块将在整个网站上可见,而不仅仅是在你的模块页面/控制器中。这是一个宾果!谢谢你发布这个。