Chr*_*ler 8 magento magento-1.7
我正在尝试向Magento添加一个内容块,该内容块应该在主要内容下方的每一侧都可见.我想用自定义扩展程序对此进行存档,因此我可以复制此扩展程序,并且无需触及核心设计文件即可运行.我的扩展包括以下布局更新:
<default>
<reference name="content">
<block type="mymod/blockname" name="myblockname" after="-" template="mymod/block.phtml"/>
</reference>
</default>
Run Code Online (Sandbox Code Playgroud)
我的问题是,该属性after="-"不起作用.该块始终显示在内容块的顶部.似乎before并after没有任何后果.如果我将块移动到ie footer,属性before并且after工作正常.
如何将块放在块"内容"的底部
Mat*_*eis 21
据我所知,问题是您在"默认"布局句柄中指定了块,而"内容"块中的大多数内容都是由稍后应用的其他布局句柄添加的.这就是为什么XML注册文件中添加的依赖项(Fabian提到)没有帮助.
请根据您的需求考虑这两个选项:
在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>
Run Code Online (Sandbox Code Playgroud)
现在,您创建一个事件观察器,将布局句柄注入到布局中:
<?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;
}
}
Run Code Online (Sandbox Code Playgroud)
然后在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>
Run Code Online (Sandbox Code Playgroud)
现在你的块应该最终低于其他块.我成功测试了主页,客户登录页面和类别视图页面.如果您必须在几页上排除您的块,您可以检查您的事件观察者是否应该在该特定页面上排除该块.
像以前一样为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>
Run Code Online (Sandbox Code Playgroud)