gpt4 book ai didi

Magento:在结构 block "content"末尾添加内容 block

转载 作者:行者123 更新时间:2023-12-04 05:04:19 25 4
gpt4 key购买 nike

我正在尝试向 Magento 添加一个内容 block ,它应该在主要内容下方的每一侧都可见。我想用一个自定义扩展来存档它,所以我可以复制这个扩展,它可以在不触及核心设计文件的情况下工作。
我的扩展包括以下布局更新:

<default>
<reference name="content">
<block type="mymod/blockname" name="myblockname" after="-" template="mymod/block.phtml"/>
</reference>
</default>

我的问题是,属性 after="-"不管用。该 block 始终显示在内容 block 的顶部。似乎 beforeafter没有任何后果。
如果我将 block 移动到页脚,属性 beforeafter工作正常。

如何将我的 block 放在 block “内容”的底部

最佳答案

据我所知,问题在于您在“默认”布局句柄中指定了您的 block ,而“内容” block 中的大部分内容是由稍后应用的其他布局句柄添加的。这就是为什么在您的 XML 注册文件中添加的依赖项(Fabian 提到)没有帮助。

请根据您的需要考虑这两个选项:

1.如果您真的想在所有前端页面上包含您的 block

在您的 XML 布局文件(local.xml 或自定义文件)中,添加新的布局句柄 :

<?xml version="1.0" encoding="UTF-8"?>
<layout version="0.1.0">

<!-- your other adjustments for default, category_product_view and so on go here -->

<add_my_block>
<reference name="content">
<block type="mymod/blockname" name="myblockname" after="-" template="mymod/block.phtml"/>
</reference>
</add_my_block>
</layout>

现在你 创建事件观察者将您的布​​局句柄注入(inject)到您的布局中:
    <?php

class YourCompany_YourExtension_Model_Observer
{
/**
* Adds a block at the end of the content block.
*
* Uses the event 'controller_action_layout_load_before'.
*
* @param Varien_Event_Observer $observer
* @return YourCompany_YourExtension_Model_Observer
*/
public function addBlockAtEndOfMainContent(Varien_Event_Observer $observer)
{
$layout = $observer->getEvent()->getLayout()->getUpdate();
$layout->addHandle('add_my_block');
return $this;
}
}

那你 注册事件观察者在您的 XML 扩展配置文件 (config.xml) 中:
<?xml version="1.0" encoding="UTF-8" ?>
<config>
<modules>
<YourCompany_YourExtension>
<version>0.0.1</version>
</YourCompany_YourExtension>
</modules>

<frontend>
<events>
<controller_action_layout_load_before>
<observers>
<mymod_add_block_at_end_of_main_content>
<type>singleton</type>
<class>mymod/observer</class>
<method>addBlockAtEndOfMainContent</method>
</mymod_add_block_at_end_of_main_content>
</observers>
</controller_action_layout_load_before>
</events>
<!-- declaring your layout xml etc. -->
</frontend>

<global>
<!-- declaring your block classes etc. -->
<models>
<mymod>
<class>YourCompany_YourExtension_Model</class>
</mymod>
</models>
</global>
</config>

现在你的 block 应该在其他 block 之下。我成功地测试了主页、客户登录页面和类别 View 页面。如果您必须在几个页面上排除您的 block ,您可以检查您的事件观察器是否应该在该特定页面上排除该 block 。

2.如果您只想在某些页面上包含您的 block

添加布局句柄 就像我们之前所做的那样添加到您的 XML 布局文件中,但不是创建和注册事件观察器,只需 告诉您的 XML 布局文件使用自定义布局句柄 在某些领域:
<?xml version="1.0" encoding="UTF-8"?>
<layout version="0.1.0">

<catalog_category_default>
<update handle="add_my_block" />
</catalog_category_default>

<catalog_category_layered>
<update handle="add_my_block" />
</catalog_category_layered>

<cms_page>
<update handle="add_my_block" />
</cms_page>

<!-- and so on -->

<add_my_block>
<reference name="content">
<block type="mymod/blockname" name="myblockname" after="-" template="mymod/block.phtml"/>
</reference>
</add_my_block>

</layout>

关于Magento:在结构 block "content"末尾添加内容 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11577155/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com