ecmallwidgets掛件開發詳解
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>
相關文章
- jQuery外掛開發模式詳解jQuery模式
- 郵件開發:SMTP協議詳解協議
- Vue.js 外掛開發詳解Vue.js
- 郵件開發:POP3協議詳解協議
- Vue3 外掛開發詳解嚐鮮版Vue
- 【開發篇sql】 條件和表示式(三) Null詳解SQLNull
- EasyPR--開發詳解(6)SVM開發詳解
- Android"掛逼"修練之行--微信小程式逆向輔助外掛工具開發詳解Android微信小程式
- OD外掛詳解
- spket外掛詳解
- linux if [條件] 詳解Linux
- iOS開發之 Autolayout 詳解iOS
- 詳解JavaScript模組化開發JavaScript
- 【iOS開發】iOS 動畫詳解iOS動畫
- 雲端計算學習路線教程大綱課件:Mount 掛載詳解
- Java 併發開發:Lock 框架詳解Java框架
- IE條件註釋詳解
- wordpress外掛開發01-原理講解
- 郵件開發:接收解析郵件
- Spark開發-WordCount詳細講解Spark
- iOS 開發之照片框架詳解iOS框架
- Android開發規範詳解Android
- ANDROID開發之SQLite詳解AndroidSQLite
- Android開發 - RecyclerView 類詳解AndroidView
- Android開發 - Movie 類詳解Android
- linux 條件變數詳解Linux變數
- Android郵件傳送詳解Android
- Android郵件傳送詳解 .Android
- 研發流程在敏捷開發中的詳解敏捷
- SpringMVC【開發Controller】詳解SpringMVCController
- iOS 靜態庫詳解與開發iOS
- 影視APP開發基礎功能詳解APP
- 前端開發:HTTP狀態碼詳解前端HTTP
- Spark開發-WordCount流程詳細講解Spark
- 移動端開發viewport用法詳解View
- 快點說小程式開發詳解
- EasyPR--開發詳解(8)文字定位
- [Java開發之路](5)異常詳解Java