`

ecmall widgets 挂件开发详解

 
阅读更多
Ecmall挂件开发
实质上是后台开发很多页面,分别去调用程序展示这些页面,达到首页内容更换很快的目的,这样做减少后续开发,开发人员只需开发挂件就可以了,至于位置可随意定.(还需调整html,但是起码后台取数据不用做了)
流程介绍:
1:ecmall模板页面调用widget页面(整个过程比较复杂)
  <!--{widgets page=index area=cycle_image}-->
参数:page:指明页面是index页面
     Area:指明显示的区域。(相当于告诉程序生成的页面是放在那里的)
2:经过ecmall模板引擎重新生成一个临时php文件,上面那句代码被解析成这样的php代码。
<!--{widgets page=index area=cycle_image}-->
                     ||
<?php $this->display_widgets(array('page'=>'index','area'=>'cycle_image')); ?>

3:查看下display_widgets()方法的源码
/**
* 视图回调函数[显示小挂件]
*
* @author    Garbin
* @param     array $options
* @return    void
*/
function display_widgets($options) {
$area = isset ( $options ['area'] ) ? $options ['area'] : '';
$page = isset ( $options ['page'] ) ? $options ['page'] : '';
if (! $area || ! $page) {
return;
}
include_once (ROOT_PATH . '/includes/widget.base.php');

/* 获取该页面的挂件配置信息 */
$widgets = get_widget_config ( $this->_get_template_name (), $page );

/* 如果没有该区域 */
if (! isset ( $widgets ['config'] [$area] )) {
return;
}

/*将该区域内的挂件依次显示出来 */
foreach ( $widgets ['config'] [$area] as $widget_id ) {
$widget_info = $widgets ['widgets'] [$widget_id];
$wn = $widget_info ['name'];
$options = $widget_info ['options'];

$widget = & widget ( $widget_id, $wn, $options );
$widget->display ();
}
}

/**
* 获取当前使用的模板名称
*
* @author    Garbin
* @return    string
*/
function _get_template_name() {
return 'default';
}

/**
*    获取指定风格,指定页面的挂件的配置信息
*
*    @author    Garbin
*    @param     string $template_name
*    @param     string $page
*    @return    array
*/
function get_widget_config($template_name, $page)//default index
{
    static $widgets = null;
    $key = $template_name . '_' . $page;
    if (!isset($widgets[$key]))
    {
        $tmp = array('widgets' => array(), 'config' => array());
        $config_file = ROOT_PATH . '/data/page_config/' . $template_name . '.' . $page . '.config.php';
        if (is_file($config_file))
        {
            /* 有配置文件,则从配置文件中取 */
            $tmp = include_once($config_file);
        }

        $widgets[$key] = $tmp;
    }

    return $widgets[$key];
}


/**
*    获取挂件实例
*
*    @author    Garbin
*    @param     string $id
*    @param     string $name
*    @param     array  $options
*    @return    Object Widget
*/
function &widget($id, $name, $options = array())
{
    static $widgets = null;
    if (!isset($widgets[$id]))
    {
        $widget_class_path = ROOT_PATH . '/external/widgets/' . $name . '/main.widget.php';
        $widget_class_name = ucfirst($name) . 'Widget';
        include_once($widget_class_path);
        $widgets[$id] = new $widget_class_name($id, $options);
    }

    return $widgets[$id];
}

    /**
     *    显示
     *
     *    @author    Garbin
     *    @param    none
     *    @return    void
     */
    function display()
    {
        echo $this->get_contents();
}

    /**
     *    将取得的数据按模板的样式输出
     *
     *    @author    Garbin
     *    @return    string
     */
    function get_contents()
    {
        /* 获取挂件数据 */
        $this->assign('widget_data', $this->_get_data());

        /*可能有问题*/
        $this->assign('options', $this->options);
        $this->assign('widget_root', $this->widget_root);

        return $this->_wrap_contents($this->fetch('widget'));
    }


实例开发:
1:在页面上添加要展示的页面模块
<div class="left" area="bottom_foot" widget_type="area">
    <!--{widgets page=index area=bottom_foot}-->
</div>
2:修改工程目录下/data/page_config/default.index.config.php添加该模块的相关信息
   'widgets' => 
  array (
     '_widget_1000' => 
                 array (
                 'name' => 'test',
                 'options' => 
                             array (
                             'ad_image_url' => 'data/files/mall/template/200908070207084061.gif',
                             'ad_link_url' => '',
                              ),
                 ),
  ),
  'config' => 
    array(
      'bottom_foot' => 
      array (
            0 => '_widget_1000',
            ),
),

3:在工程目录external/widgets建name(跟上面定义的name要一致)目录,然后再建文件main.widget.php  
  class TestWidget extends BaseWidget{
    var $_name = 'test';
    function _get_data(){
      $test_mod=&m('test');
      $users=$test_mod->getAll("select * from ecm_member");
          return $users;
    }
  }  
4:在includes/model下建模型文件(同数据库交互)
  class TestModel extends BaseModel{
      
     
   }
5:在同级目录创建widget.html文件(该模板为展示内容)
<div class="module_common">
    <h2><b class="news" title="NEWS公告栏"></b></h2>
    <div class="wrap">
        <div class="wrap_child">
            <ul class="news_list">
                <!--{foreach from=$widget_data item=user}-->
                <li>{$user[user_name]}</li>
                <!--{/foreach}-->
            </ul>
        </div>
    </div>
</div>
分享到:
评论

相关推荐

    ECMALL 挂件开发指南

    ### ECMALL挂件开发指南详解 #### 一、概述 ECMALL是一款非常流行的电子商务平台系统,它提供了丰富的插件和挂件支持,使得开发者能够根据自己的需求定制各种功能和服务。本文将详细介绍ECMALL挂件开发的过程及...

    ECMall挂件开发指南.rar

    "ECMall挂件开发指南"是针对该平台挂件开发的一份详细教程,旨在帮助开发者了解如何为ECMall创建自定义功能模块,即挂件。 挂件在ECMall中扮演着重要角色,它们可以增加网站的功能性和互动性,而无需修改核心代码,...

    ECMall挂件开发文档

    ### ECMall挂件开发知识点详解 #### 一、什么是ECMall挂件? 挂件(Widget)是指一种可让用户在ECMall系统中任意页面的任意位置以任意样式显示任意数据的小型应用或功能模块。它能够有效地解决传统Web应用程序中...

    ecmall挂件

    Ecmall挂件是针对Ecmall电子商务平台设计的一系列装饰性组件,旨在提升网站的视觉效果和用户体验。Ecmall是一款开源的电子商务系统,它提供了丰富的功能和高度的可定制性,允许商家根据自己的需求打造个性化的在线...

    ECMALL 仿京东分类挂件(gbk版)

    ECMALL是一款基于PHP开发的电子商务系统,专为中小企业提供在线商城解决方案。"仿京东分类挂件(gbk版)"是针对ECMALL系统的一个定制化插件,旨在模仿京东网站的商品分类展示方式,提升用户在浏览商品分类时的体验。...

    ECMALL后台二次开发详解

    ### ECMALL后台二次开发详解 #### 一、引言 ECMALL是一款非常流行的开源电子商务系统,它提供了强大的功能和灵活的扩展性,使得开发者能够根据业务需求进行定制化的二次开发。本文将详细介绍如何对ECMALL后台进行...

    4ECMALL框架核心ECMALL.PHP文件详解.pdf

    4ECMALL框架核心ECMALL.PHP文件详解.pdf

    Ecmall挂件开发

    对于ecmall挂件的开发很有帮助,方便初学都进行学习,大家一起进步哟,加油!!!

    ecmall仿淘宝商城店铺分类挂件.rar

    《ECMall仿淘宝商城店铺分类挂件详解》 ECMall是一款开源的电子商务系统,致力于为中小企业提供全面的网上购物解决方案。而“仿淘宝商城店铺分类挂件”则是针对ECMall平台开发的一款功能组件,旨在提升用户体验,...

    ECMALL热门销售挂件

    ECMALL是一款基于PHP开发的开源电子商务系统,其设计目标是为企业提供一个灵活、可扩展的在线购物平台。"ECMALL热门销售挂件"是一个专门为ECMALL平台设计的功能模块,用于展示店铺中最畅销的商品,吸引顾客注意力,...

    Ecmall二次开发结构图

    在进行Ecmall的二次开发时,了解其运行机制和流程至关重要。本文将详细解析Ecmall的主要组成部分和核心功能,帮助开发者更好地理解和定制Ecmall。 首先,Ecmall的入口文件`ecmall.php`定义了一系列常量,如`START_...

    ecmall支付方式开发指南

    总之,开发ECMall的支付方式是一个结合了技术实现和业务逻辑的过程,需要开发者对ECMall系统架构、第三方支付平台API有深入的理解,同时具备良好的编程实践和测试习惯。通过遵循官方文档的指导,开发者可以高效地...

    Ecmall二次开发完整教程

    在Ecmall的二次开发过程中,开发者需要深入理解其架构、模板系统、数据操作以及自定义函数等核心概念,以实现对系统的扩展和定制。本教程将详细讲解这些关键知识点,帮助你成为一名熟练的Ecmall开发者。 首先,了解...

    Ecmall二次开发手册

    本手册着重于Ecmall2.X版本的二次开发指导,将详细介绍系统结构、框架、模块扩展、个性化定制等方面的知识。 在深入了解Ecmall二次开发之前,我们需要先了解Ecmall的基本架构和运行环境。Ecmall使用ThinkPHP框架...

    ecmall二次开发汇总

    《ECMall二次开发详解》 ECMall是一款开源的电子商务平台,专为中小型企业设计,具有丰富的功能和良好的可扩展性。对于开发者而言,进行ECMall的二次开发是提升其功能、优化用户体验以及满足特定业务需求的重要手段...

    ECMall开发帮助文档

    本文将深入探讨ECMall开发中的关键知识点,包括插件、二次开发、功能清单、挂件、模块、数据表、系统架构以及支付方式的开发。 1. **插件开发**: 插件是ECMall增强功能和个性化定制的主要手段。开发者可以通过...

    ecmall二次开发技术积累

    《ECMall二次开发技术深度解析》 ECMall是一款基于PHP语言的开源电子商务系统,其二次开发技术涉及广泛,涵盖了框架结构、核心文件解析、功能实现等多个层面。本篇文章将深入探讨ECMall的二次开发知识,为开发者...

    Ecmall使用手册(站长)

    ECMall的挂件、插件和模块机制使得二次开发变得简单。开发者可以通过阅读官方提供的API文档和示例代码,快速上手开发自己的组件。同时,由于ECMall的代码结构清晰,注释丰富,即便是初学者也能较快理解并动手实践。 ...

Global site tag (gtag.js) - Google Analytics