我正在尝试将块添加到magento
中的管理订单视图页面我的布局更新
<?xml version="1.0"?>
<layout>
<adminhtml_sales_order_view>
<reference name="order_tab_info">
<block before="order_tab_info" type='vendor/additonal' name="ama_additonal_data" template="vendor/additonal.phtml" >
<action method="setChild">
<name>order_info</name>
<block>order_info</block>
</action>
</block>
<action method="setChild">
<name>order_info</name>
<block>ama_additonal_data</block>
</action>
</reference>
</adminhtml_sales_order_view>
</layout>
我的街区是
class Vendor_ModuleName_Block_Sales_Order_View_AdditonalData extends Mage_Adminhtml_Block_Sales_Order_Abstract{
}
如果我在块文件中进行以下操作
public function __construct(){
var_dump('hey');
die;
}
页面停止显示,但看起来我的块不呈现
为什么?
答案 0 :(得分:1)
您的布局代码不再有效。因为它有一些错误。我会指出我能看到的东西。
描述类型的块不存在
您阻止类型为vendor/additonal
。显然,它是由自定义模块定义的自定义块。这意味着您需要一个类名为Vendor_Modulename_Block_Additional
的块,该块应在位置app/code/local/Vendor/Modulename/Block/Additional.php
中定义。现在,您的块名称为Vendor_ModuleName_Block_Sales_Order_View_AdditonalData
(位置未知,您未提供)。这意味着您在布局中定义的块未定义,magento将在您的日志中引发一些错误(如果您激活了日志)。
不必要的before
声明
请参阅alanstorm的答案THREAD。简而言之,您只能在两种情况下定义before
属性。其中,最常用的案例是第一个案例。那是
您的广告代码应位于
parent block
core/text_list
类型下。
此处保存自定义块的父块为order_tab_info
块。它是一个magento核心定义块。因此,before
属性不起作用。
您正在尝试将自定义块作为块的父级,保留块!!!
在您的区块定义中,您尝试将order_tab_info
区块设置为区块的子级。请注意,您已经在order_tab_info
区域内。这意味着您的块现在是order_tab_info
块的子节点。没有得到我的potrait?好。考虑一位女士带着孩子进入子宫的情况。假设孩子在说..
“嘿,我是我母亲的真正母亲!!!!!”
请参阅。其中没有逻辑。再次在order_tab_info
块内,您再次将自定义块重新定义为其子块。就像,如果母亲(在上面的例子中)说
“嘿,每个人,我现在带的孩子都是我的孩子”
您认为重新定义它是否相关?每个人都能明白,那位女士携带的孩子显然是她的孩子,她是她的母亲。无需重新定义它。所以你在这里想做的事情是完全错误的。
尝试对magento的布局结构做一个好主意。
祝你好运。