现在的位置: 首页 > 综合 > 正文

如何重写或者扩展magento内置Block

2013年06月08日 ⁄ 综合 ⁄ 共 1703字 ⁄ 字号 评论关闭

 

如何重写或者扩展


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'



)




进行了设置


.


抱歉!评论已关闭.