1

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

如果我将它放在<default>标签中,它将显示在整个网站中,但我想做类似的事情<mymodule_default>,这可能吗?

我知道我可以把我的块放在每个layout_handler喜欢的地方:

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

还是不是更可取?

谢谢

4

3 回答 3

1

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

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

并且page/2columns-left.phtml具有您左侧列的内容。

将此 xml 文件放在您的 app/design/frontend/default/THEME NAME/template/layout/module.xml

不要忘记告诉你的模块配置文件(config.xml)。应该是这样的

<config>
...
<frontend>
<layout>
          <updates>
            <modulename>
              <file>modulename.xml</file>
            </modulename>
          </updates>
        </layout>
  ...
</frontend>
</config>

更新:

根据magento的布局规则,你可以<default>在你的模块中添加。因此它可以设置该模块对该模块中的所有页面(控制器)都可用。而已。如果您有任何疑问,请告诉我。

于 2014-12-26T11:30:02.763 回答
1

有一种更优雅的方法可以做到这一点:

在您的模块 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>
于 2019-04-12T03:51:38.980 回答
0

在另一个网站上得到了答案,在这里复制:

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

public function preDispatch()
{
  parent::preDispatch();
  $this->getLayout()->getUpdate()
       ->addHandle('mymodule_default');
}

<update handle="mymodule_default"/>在所有<mymodule_controllername_actionname>手柄中都有说明

例子:

<mymodule_controllername_actionname>
    <update handle="mymodule_default"/>
    ...
<mymodule_controllername_actionname>
于 2014-12-26T11:40:35.307 回答