【问题标题】:Magento layout replace block with another blockMagento 布局用另一个块替换块
【发布时间】:2014-10-12 01:45:31
【问题描述】:

我想用自定义类型块替换标准布局 catalog.xml 中的块。

<block type="catalog/product_view_attributes" name="product.attributes" as="additional" template="catalog/product/view/attributes.phtml">
    <action method="addToParentGroup"><group>detailed_info</group></action>
    <action method="setTitle" translate="value"><value>Additional Information</value></action>
</block>

我想用我的下面自己的自定义块类型替换上面的标准,但使用相同的“名称”。

<block type="attributesasgroup/groupview" name="product.attributes" as="additional" template="webguys/attributesasgroup/groupview.phtml">
    <action method="addToParentGroup"><group>detailed_info</group></action>
    <action method="setTitle" translate="value"><value>Additional Information</value></action>
</block>

有人可以告诉我最好的方法吗?我不知道要使用的 XML 操作和方法。我需要删除前一个块吗?未设置孩子?如果我添加一个具有相同“名称”和相同父级的块,是否会覆盖现有的具有相同名称的块?

【问题讨论】:

    标签: php magento layout


    【解决方案1】:

    我将在这里解决您的每一个疑问。

    1.如上所示,我是否可以用我的自定义块替换默认块?

    当然可以。您可以在上面的代码中使用自己的块而不是默认块

    2.最好的方法是什么?

    为此,我更喜欢使用local.xmllocal.xml 是一个特殊的布局文件,最终总是由 Magento 处理。即,通过该文件指定的布局更新将在考虑所有其他布局更新文件之后最后考虑并应用。因此,这是更改任何布局更改的简单方法。因此,请将此文件包含在主题的布局目录中,并指定布局更改。

    文件:app/design/frontend/&lt;package&gt;/&lt;theme&gt;/layout/local.xml

    <catalog_product_view>
    
        <remove name="product.attributes" />
    
        <reference name="content">
            <block type="attributesasgroup/groupview" name="product.attributes" as="additional" template="webguys/attributesasgroup/groupview.phtml">
                <action method="addToParentGroup"><group>detailed_info</group></action>
                <action method="setTitle" translate="value"><value>Additional Information</value></action>
            </block>
        </reference>
    
    </catalog_product_view>
    

    我们local.xml 的布局非常简单。首先,它从布局结构中删除默认块。为了使用它,我们为此使用了remove 节点。然后我们将自己的块添加到内容部分。

    在这里,您的块应该在后端定义,这一点很重要。如果未定义,Magento 将无法理解您引用的是哪个块,因此,magento 不会渲染块内的内容。所以确保它是在后端定义的。在上述情况下,为了正确处理您的块,Magento 需要将Namespace_Modulename_Block_Groupview 定义为app/code/local/Namespace/Modulename/Block/Groupview.php(其中Namespace_Modulename 代表您的自定义模块名称,)

    3.如果我添加一个具有相同“名称”和相同父级的块,是否会覆盖现有的具有相同名称的块?

    当然,您可以为您的区块指定默认区块的名称。 在 magento 中,每个块都应该有一个唯一的名称。为了遵守这个规则,我们需要先删除默认块。这将允许我们在自己的块中使用该块名称。否则 Magento 将表现不佳

    注意:有两个操作适用于您的块。它们是addToParentGroupsetTitle。第一个将您的块设置为detailed_info 组,第二个用于为您的块设置标题。

    【讨论】:

      【解决方案2】:

      你的意思是这样吗?

      <reference name="product.attributes">
      
        <action method="setTemplate">
      
           <template>webguys/attributesasgroup/groupview.phtml</template>
      
         </action>
      
           <action method="addToParentGroup"><group>detailed_info</group></action>
          <action method="setTitle" translate="value"><value>Additional Information</value>
      
      </reference>
      

      我们只是为块的实例替换一个新模板,保持所有相同的属性值,如nameas 和其他

      来源http://www.magentocommerce.com/design_guide/articles/intro-to-layouts#head-anatomy-of-a-layout

      【讨论】:

        猜你喜欢
        • 2018-08-25
        • 1970-01-01
        • 2012-03-08
        • 1970-01-01
        • 2016-02-15
        • 2017-03-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多