2019独角兽企业重金招聘Python工程师标准>>>

实质上是后台开发很多页面,分别去调用程序展示这些页面,达到首页内容更换很快的目的,这样做减少后续开发,开发人员只需开发挂件就可以了,至于位置可随意定.(还需调整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>

转载于:https://my.oschina.net/u/779687/blog/117307

ecmall挂件开发相关推荐

  1. ecmall widgets 挂件开发详解

    Ecmall挂件开发 实质上是后台开发很多页面,分别去调用程序展示这些页面,达到首页内容更换很快的目的,这样做减少后续开发,开发人员只需开发挂件就可以了,至于位置可随意定.(还需调整html,但是起码 ...

  2. ecmall 挂件html位置,ecmall 挂件和模板的制作方法

    ecmall是国内不错的商城系统,适合国内人的使用习惯: 但自从2.0以后,没有专门的广告系统,对于中小网站来说,是个苦恼. 看了一下官方挂件的说明,决定自己动手改一个吧. 第 一步: 了解首页模板结 ...

  3. linux压缩指定时间的文件,Linux下压缩某个文件夹(文件夹打包)

    tar -zcvf /home/xahot.tar.gz /xahot tar -zcvf 打包后生成的文件名全路径 要打包的目录 例子:把/xahot文件夹打包后生成一个/home/xahot.ta ...

  4. ECMall如何在后台添加模板编辑页

    2019独角兽企业重金招聘Python工程师标准>>> 编辑文档admin\app\template.app.php. 获取ECMall编辑页面列表 1 /** 2  *    获取 ...

  5. Ecmall 的增删改操作

    ecmall的add,edit,find操作,这个是我们对ecmall数据库开发以及操作最常用的操作,我们在ecmall中,只要找到了id键,我们就可以对ecmall的数据库表进行操作.ecmall的 ...

  6. ECMALL目录结构设置与数据库表

    [Ecmall]ECMALL目录结构设置与数据库表 最近在做ecmall的开发,ecmall在开源方面还有待进步啊,官方没有提供开发文档,也没有关于系统架构组织的贡献,使用者都要自己从0开始,官方论坛 ...

  7. 在php中调用java接口吗,php 调用 java 接口

    php 需要开启 curl模块 /* * HTTP 请求函数封装 */ function http_request_cloudzone($url, $data){ //var_dump($url.&q ...

  8. java知识体系介绍

    国内最牛七星级团队马士兵.高淇等11位十年开发经验专家录制 目 录 百战程序员Java1573题 2百战程序员介绍 3JavaSE编程基础 9第一章 初识Java 9阶段项目课程1 11第二章 数据类 ...

  9. ecmall 如何新增挂件

    不知到该怎么开始介绍,就直接说了,比如要在商城首页上添加一个自己开发测试用的挂件 1.找到模版文件夹的index.html,路径:themes/mall/default/index.html 自己选一 ...

最新文章

  1. 根据listObject中的某个字段排序
  2. Web 标准实践系列(一)——Google 的首页
  3. 信息收集——Office钓鱼
  4. loadrunner11录制不成功解决方法
  5. 11月13号例会记录
  6. 苹果之父乔布斯:我是如何东山再起的
  7. 浏览器工作原理(一):浏览器的进程与线程
  8. 收银系统服务器ip设置,如何修改打印机IP地址?
  9. Setinterl全面介绍
  10. 银行系统开发 经验谈
  11. 8串口服务器芯片,塔石串口服务器的芯片W7500
  12. 汉诺塔游戏玩法介绍(攻略和编程实现)
  13. 将腾讯云对象存储挂载到云服务器
  14. Python操作Excel(一)
  15. 创建自己的人脸识别程序
  16. 科技百咖 | 天威诚信:韶光与共,不负前路
  17. 学平面UI设计选择哪个培训机构好
  18. CentOS6.4离线安装mysql5.6.22
  19. 前端React项目的Next.js项目通过CSS引入自定义字体文件
  20. 新品营销,如何找到更具“确定性”的答案?

热门文章

  1. codevs——1742 爬楼梯
  2. hadoop面试题答案
  3. 我的INI 配置文件读写动态库
  4. Expression Blend实例中文教程(13) - 控件模板快速入门ControlTemplates
  5. Redis ZSet 的几种使用场景
  6. 服务端/web+客户端模式配置
  7. 畅享9能更新鸿蒙吗,Mate 9也能升级!鸿蒙系统正式发布:老用户爽了
  8. php计算一段时间工作日,PHP计算8小时工作日的一半
  9. 使用Docker安装Redis
  10. Hibernate自动创建表