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

转载 2011年01月14日 15:38:00

 

如何重写或者扩展 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' ) 进行了设置 .

Magento的block重写规则

Magento的block重写规则是帮助和模型覆盖相似。Magento的遵循MVC模式,但在Magento块是额外的一层。块类特定模板块呈现数据。Magento的介绍伟大的模板设计系统block制度。...
  • rogerbakerpeng
  • rogerbakerpeng
  • 2011年05月25日 14:46
  • 2750

Magento Controller Rewrite - Magento 控制器重写

1.首页我们找到需要重写的module,然后打开module 的配置文件,我们以Dipper Module为例:app/code/local/Dipper/Dipper/etc/config.xml ...
  • zjp_php520
  • zjp_php520
  • 2015年11月19日 11:20
  • 710

Magento调用Block方法集合

在CMS的Page中调用 1. 在CMS的Page编辑里面的Desig/Page Layout中进行编辑Layout Update XML来达到添加Block的目的,这个里面与在layout.xml...
  • happiniess
  • happiniess
  • 2013年04月10日 11:41
  • 416

16. Magento模板及布局文件中引用Static Block的方法

Static Block是Magento提供的非常实用的一种Block类型。通过Static Block,可以让不懂代码的店铺管理员轻易修改网站中的一些动态内容,而不需要修改Magento的核心代码。...
  • enlyhua
  • enlyhua
  • 2015年07月21日 13:57
  • 464

Magento不启用URL重写,网址加上index.php的设置

后台: System -> Configuration -> Web -> Search Engines Optimization -> Use Web Server Rewrites...
  • github_26672553
  • github_26672553
  • 2015年05月30日 16:49
  • 593

8.修改、扩展、重写Magento代码

作为一个开发者的你,肯定要修改Magento代码去适应你的业务需求,但是在很多时候我们不希望修改Magento的核心代码,这里有很多原因,例如将来还希望升级Magento、还想使用更多的Magento...
  • enlyhua
  • enlyhua
  • 2015年05月08日 17:53
  • 910

magento Url重写方法

用户友好的Url重写是所有网站都需要的一个功能,在magento系统中,实现URL重写有多种方法,下面这几个方法的url重写优先级是逐渐降低的,也就是说方法1要比方法2先执行 1、在后台的catal...
  • clh604
  • clh604
  • 2012年11月13日 15:42
  • 3581

magento2 如何在phtml中调用另一个block的template

在magento 1.x,你可以在任何其他模板/打印任何模块的模板块调用(PHTML)与下面的代码文件: ...
  • MrWangc
  • MrWangc
  • 2016年11月25日 11:12
  • 668

Varnish cache for Magento

Varnish cache for Magento 实际方案 1. Magento 1.8.1+ 2. Extensi AOE_STATIC
  • u012413865
  • u012413865
  • 2014年05月23日 16:25
  • 596

如何修改、扩展并重写Magento代码

如何修改、扩展并重写Magento代码
  • cstopery
  • cstopery
  • 2014年06月23日 15:32
  • 1279
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:如何重写或者扩展magento内置Block
举报原因:
原因补充:

(最多只允许输入30个字)