西部数码主机 | 阿里云主机| 虚拟主机 | 服务器 | 返回乐道官网
当前位置: 主页 > php教程 > magento教程 >

magento控件(widgets)概念和应用

时间:2016-01-26 09:05来源: 作者: 点击:
magento最终还是引入了这个概念,这是大势所趋。 什么是magento 控件(widgets)? magento控件(widgets)其实就是预定义好的并且带有配置参数前端版块(frontend block)。定义好magento控件(widgets)后,不

magento控件(widgets)其实就是预定义好的并且带有配置参数前端版块(frontend block)。定义好magento控件(widgets)后,不懂技术的人也可以通过后台将前端版块(frontend block)调用到magento网站的各类页面,并可以通过预定义好的参数做一些基本控制,比如前端版块(frontend block)在前台展示的位置。magento 网站或商店的管理员通过后台管理界面调用magento控件(widgets)我们称之为magento控件(widgets)的一个实例(或实例化,有点类似类和对象)。从这个意义上说,你定义好一个magento控件(widgets)后,你可以在前台调用N次控件的实例。

说了太多的概念,举个例子吧!比如你有一个显示最新产品的block,如果你没有定义成magento控件(widgets),那么只有你或懂magento的人才会调用,而且只能在模板中调用。但是如果定义成magento控件(widgets),不懂技术的店主自己就可以在后台调用,而且可以通过后台界面控制这个block的位置,产品数量等参数。

那么如何创建一个magento widgets呢?

1、首先要创建一个模块架构。比如我的模块名称为FeaturedCatalog

app/code/community/FeaturedCatalog/

—————————————————–/etc/config.xml

—————————————————–/Helper

—————————————————–/Block

config.xml是模块的基本配置文件,用来定义这个模块版本信息,同时还要声明这个模块中涉及到的block类,helper类的基础类名,也就是这些类各自的前缀。

 

   

       

            0.0.1

       

   

   

       

           

                Mzcart_FeaturedCatalog_Helper

           

       

       

            

                Mzcart_FeaturedCatalog_Block

            

       

   

 

现在假设说我们已经定义好了两个Block,一个是推荐新商品,一个是热销商品,现在的目录结构应该是

app/code/community/FeaturedCatalog/

—————————————————–/etc/config.xml

—————————————————–/Helper

—————————————————–/Block

—————————————————–/Block/New.php

—————————————————–/Block/Bestsale.php

2、然后向magento注册新的模块,在app/etc/modules/目录下创建一个xml文件,文件名不限,不过通常命名规则是package_module.xml的格式,所以,我们这边就叫mzcart_featuredcatalog.xml



    
        
            true
            community
            
                
            

        Mzcart_FeaturedCatalog>

 

    

 
3、向magento声明定义magento 控件(widgets),任何一个模块如果有涉及到magento 控件(widgets)都要在模块的etc目录下创建widgets.xml向magento声明它定义了哪些magento 控件(widgets)。
 

 

   

        New Catalog

        featured new catalog by store owner

   

   

        Best sale Catalog

        featured b catalog by store owner

   

 

上面的这个widgets.xml文件示例说明了向magento声明widgets至少要包含的内容:
a 、给magento 控件(widgets)起一个唯一的名字如,featuredcatalog_new
b、声明magento 控件(widgets)的name
c、声明magento 控件(widgets)的描述
d、最重要的一点,通过type属性指定调用的block类,这个用法和模板开发中layolut文件的用法是类似的。
 
现在模块的文件目录结构应该是
app/code/community/FeaturedCatalog/

 

—————————————————–/etc/config.xml

—————————————————–/etc/widgets.xml

 

—————————————————–/Helper

—————————————————–/Block

—————————————————–/Block/New.php

—————————————————–/Block/Bestsale.php

 
4、至此,基本上算是完成了。然而最核心的步骤还是如何定义block类,这类block(就是将要被调用来声明widget的block)通常要实现Mage_Widget_Block_Interface接口类。这个类定义了三个所有block类都需要实现的方法:
a、toHtml() 用来生成html以供输出
b、addData(array $arr), setData($key, $value = null) 用来实现在magento后台配置block的参数
看下面的代码,你可能会问,那为什么还要继承Mage_Core_Block_Abstract,有两个理由:
a、在这个类里面已经定义toHtml,基本符合我们需求,这样我们就不需要再定义了,代码重得利用嘛
b、addData、setData这两个方法也在Mage_Core_Block_Abstract这个类的父类Varien_Object中实现了,节省代码也节省时间啊
 
class Mzcart_FeaturedCatalog_Block_New
    extends Mage_Core_Block_Abstract
    implements Mage_Widget_Block_Interface
{

 

    /**
     * get featured new catalog list
     *
     * @return string
     */
    protected function _toHtml()
    {
        $html = '...';
        return $html;
    }

}

 
注:最后要提的是,之所以在这个类中实现的是_toHtml方法,是因为由于toHtml方法在Mage_Core_Block_Abstract父类中被定义成final了,所以不能在子类中重新定义。不过由于这个方法在父类的实现调用了_toHtml方法,所以,我们可以通过重定义_toHtml方法来实现重定义toHtml方法。
(责任编辑:好模板)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
栏目列表
热点内容