Ecmall挂件开发

Ecmall挂件开发,下边是互联网分享的一篇关于关键原理以及开发挂件的方法,转自互联网分享给大家:
流程介绍:
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’));
}

实例Ecmall挂件开发:
1:在页面上添加要展示的页面模块
<div 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>
<h2><b title=”测试”></b></h2>
<div>
<div>
<ul>
<!–{foreach from=$widget_data item=user}–>
<li>{$user[user_name]}</li>
<!–{/foreach}–>
</ul>
</div>
</div>
</div>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值