如何重写或者扩展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的model, block 和controller

Magento的二次开发 , 最重要的一点 ,就是尽量不要修改Magento的核心文件.   一旦修改了magento的核心文件,以后如果要对magento进行升级, 那将是一个恶梦, 同时,也容易造...
  • clh604
  • clh604
  • 2012-11-22 11:59
  • 3259

Magento的block重写规则

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

Form技巧:如果在输入Item之后,可以自动执行GO_BLOCK等内置函数

很多时候,我们想实现这样子的操作效果: 当向一个特定的Item输入数据之后,自动触发一系列的动作,例如GO_BLOCK,然后Loop这个Block,向这个Block维护一定的值(或者检查值)。这样子...

Magento调试技巧之查看当前页面缓存过的block

群里有人问到“可以在什么地方看到哪个block有缓存 哪个没有吗”,这里分享一个实用的技巧,步骤如下 一,后台缓存管理打开block 缓存 二,打开前台模板提示 三,前台页面刷新(以详情页为例) ...

开发者创建Magento Static Block的最佳实践

Magento Static Block非常方便管理员通过后台来更改前端的一些表现,如文字,图片等等。在开发中的最佳实践如下,我们需要在如下这个静态模块中添加一个图片,那么是不是就把以下所有的文件全部...

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

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

Magento 新闻模块开发教程 (九) 建立Block

前面八章中我们已经先后建立了文件骨架,激活文件,前后端控制器,配置文件,辅助类,模型,SQL,模板,新闻模块开发的最后一步是创建block在app\code\local\Voodoo\News\Blo...
  • ddjohn
  • ddjohn
  • 2011-07-08 17:08
  • 1725

Is appending block by handle possible in Magento layout xml?

Is appending block by handle possible in Magento layout xml?Posted onFebruary 17, 2011by芳草苑主In the ...

magento缓存系列详解:如何缓存一个block

magento是基于zend framework的,所以cache的使用基本也继承了他的一些特性。我们要知道缓存中有几个重要的概念: 数据本身;数据的标识;缓存生命期;缓存操作接口; Zend_C...

“约定优于配置”与Magento改造尝试四之block、helper和model加载

类似于一样前两章所说,blocks和models的别名都是一样的,当然本章改造目的就是通用别名取代上面这种分别单独配置了。不过这里要先等下,因为我在Mage_Wishlist的config.xml里没...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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