如何重写或者扩展
magento
内置
Block
Block
是
magento
中一个很重要的组长部份,在安装了
magento
后,
magento
自身带了很多的模块,模块中有很多的
Block,
一般一个
Block
对应一个模板文件表示
html
的输出
.
如果我们要修改
magento
增加其功能适应自己的需求,一般都会涉及到要扩展原来的
magento.
下面我们通过一个例子说明怎么扩展
Block
如在上面的图中我们增加了‘打印’按钮
(1):
新建好如下
Adminhtml
和他下面的目录和文件
.
View.php:
<?php
class
DEMO_Adminhtml_Block_Sales_Order_View
extends
Mage_Adminhtml_Block_Sales_Order_View
{
public
function
__construct
()
{
parent
::
__construct
();
$this
->_addButton(
'order_print'
,
array
(
'label'
=> Mage::helper(
'sales'
)->__(
'Print'
),
//'onclick'
=>
"popWin('/sales/order/print/order_id/{$this->getOrder()->getId()}')",
'onclick'
=>
'popWin(/''
.
$this
->getPrintUrl()
.
'/',/'printwin/',/'width=800,height=600,resizable=yes,scrollbars=yes/')'
,
));
}
public
function
getPrintUrl()
{
return
$this
->getUrl(
'*/sales_print/print'
);
}
}
红色部份类为原有
block
的类,我们必须继承原有的类来扩展
block
的功能。在这个
block
中,我们可以增加新的方法或者
override
父类方法来增加其功能。在他的模板文件中可以使用
$this
来引来此类,从而可以调用此类中的公用方法
config.xml
<?xml
version="1.0"?>
<config>
<modules>
<
DEMO_Adminhtml>
<version>0.1.0</version>
</
DEMO_Adminhtml>
</modules>
<global>
<blocks>
<adminhtml>
<rewrite>
<sales_order_view>
DEMO_Adminhtml_Block_Sales_Order_View</sales_order_view>
</rewrite>
</adminhtml>
</blocks>
</global>
</config>
注意这里的
sales_order_view
被新的类所代替
,
而此类继承了原先的类,所以原本功能不会受影响
(2):app/etc/modules/
DEMO_All.xml
<?xml
version="1.0"?>
<config>
<
DEMO_Adminhtml>
<active>true</active>
<codePool>local</codePool>
</
DEMO_Adminhtml>
</modules>
</config>
指明模块代码存放的路经
.
(3):
说明
在
design/adminhtml/default/default/layout/sales.xml
中引用了此
block
<reference
name="content">
<block
type="adminhtml/
sales_order_view
"
name="sales_order_edit"></block>
</reference>
一般
block
都有一个如
:
template="sales/order/view/info.phtml"
的属性,如果没有指明,此可以去这个
block
中这个类中去查找,很有可能在构选方法中用形如
:
$this-
>setTemplate(
'widget/form/container.phtml'
)
进行了设置
.