ecmall二次开发技术积累.docx
《ecmall二次开发技术积累.docx》由会员分享,可在线阅读,更多相关《ecmall二次开发技术积累.docx(116页珍藏版)》请在冰豆网上搜索。
ecmall二次开发技术积累
ecmall-knowledge-baseecmall-development-knowledge-detail.html
ecmall解释
php
/**
* ecmall框架核心文件,包含最基础的类与函数
*StreamliningcomesfromSparrowPHP@Garbin
*
*@authorGarbin
*/
/*---------------------以下是系统常量-----------------------*/
/*记录程序启动时间*/
define('START_TIME',ecm_microtime());
/*判断请求方式*/
define('IS_POST',(strtoupper($_SERVER['REQUEST_METHOD'])=='POST'));
/*判断请求方式*/
define('IN_ECM',true);
/*定义PHP_SELF常量*/
define('PHP_SELF', htmlentities(isset($_SERVER['PHP_SELF'])?
$_SERVER['PHP_SELF']:
$_SERVER['SCRIPT_NAME']));
/*当前ecmall程序版本*/
define('VERSION','2.0final');
/*当前ecmall程序Release*/
define('RELEASE','20090821');
/*---------------------以下是PHP在不同版本,不同服务器上的兼容处理-----------------------*/
/*在部分IIS上会没有REQUEST_URI变量*/
$query_string=isset($_SERVER['argv'][0])?
$_SERVER['argv'][0]:
$_SERVER['QUERY_STRING'];
if(!
isset($_SERVER['REQUEST_URI']))
{
$_SERVER['REQUEST_URI']=PHP_SELF.'?
'.$query_string;
}
else
{
if(strpos($_SERVER['REQUEST_URI'],'?
')===false&&$query_string)
{
$_SERVER['REQUEST_URI'].='?
'.$query_string;
}
}
functionview($mess){
if(is_array($mess)===true){
$mess=highlight_string('
php'.var_export($mess,true),true);
}
exit($mess);
}
/*---------------------以下是系统底层基础类及工具-----------------------*/
classecmall
{
/*启动*/
functionstartup($config=array())
{
/*
ecmall:
:
startup(array(
'default_app'=> 'default', //默认执行文件,
'default_act'=> 'index',//默认执行方法
'app_root' => ROOT_PATH.'/app',//默认执行文件的路径
'external_libs'=> array(//通用引入文件
ROOT_PATH.'/includes/global.lib.php',
ROOT_PATH.'/includes/libraries/time.lib.php',
ROOT_PATH.'/includes/ecapp.base.php',
ROOT_PATH.'/includes/plugin.base.php',
ROOT_PATH.'/app/frontend.base.php',
ROOT_PATH.'/includes/subdomain.inc.php',
),
));
*/
/*加载初始化文件*/
require(ROOT_PATH.'/eccore/controller/app.base.php'); //基础控制器类
require(ROOT_PATH.'/eccore/model/model.base.php');//模型基础类
//每次都有一堆的文件引入.
if(!
empty($config['external_libs']))
{
foreach($config['external_libs']as$lib)
{
require($lib);
}
}
/*数据过滤*/
if(!
get_magic_quotes_gpc())
{
$_GET=addslashes_deep($_GET);
$_POST =addslashes_deep($_POST);
$_COOKIE=addslashes_deep($_COOKIE);
}
/*请求转发作用不大,可直接写死*/
$default_app=$config['default_app']?
$config['default_app']:
'default';
$default_act=$config['default_act']?
$config['default_act']:
'index';
//处理GET,抓取app及act参数.
// http:
//127.0.0.1/ecmall/index.php?
app=message&act=inbox 很容易看得出来.
$app=isset($_REQUEST['app'])?
trim($_REQUEST['app']):
$default_app;
$act=isset($_REQUEST['act'])?
trim($_REQUEST['act']):
$default_act;
//根据app参数来引入相应的文件.$config['app_root']变量是路径.
$app_file=$config['app_root']."/{$app}.app.php";
//文件判断
if(!
is_file($app_file))
{
exit('Missingcontroller');
}
//引入文件.
require($app_file);
//定义两个常量,估计日后常用..
define('APP',$app);
define('ACT',$act);
//ucfirst,假设第一个字为小写,即转大写.
//也是组合成相应的类名,classMessageAppextendsMemberbaseApp可以看得出来.
$app_class_name=ucfirst($app).'App';
/*实例化控制器*/
$app =new$app_class_name();
//c()函数即将当前的实例引用给$GLOBALS['ECMALL_APP']
c($app);
//执行$act方法
$app->do_action($act); //转发至对应的Action
//空白方法,未添加功能.
$app->destruct();
}
}
/**
*所有类的基础类
*
*@authorGarbin
*@usagenone
*/
classObject
{
var$_errors=array();
var$_errnum=0;
function__construct()
{
$this->Object();
}
functionObject()
{
#TODO
}
/**
*触发错误
*
*@authorGarbin
*@param string$errmsg
*@returnvoid
*/
function_error($msg,$obj='')
{
if(is_array($msg))
{
$this->_errors=array_merge($this->_errors,$msg);
$this->_errnum+=count($msg);
}
else
{
$this->_errors[]=compact('msg','obj');
$this->_errnum++;
}
}
/**
*检查是否存在错误
*
*@authorGarbin
*@returnint
*/
functionhas_error()
{
return$this->_errnum;
}
/**
*获取错误列表
*
*@authorGarbin
*@returnarray
*/
functionget_error()
{
return$this->_errors;
}
}
/**
*语言项管理
*
*@authorGarbin
*@paramnone
*@returnvoid
*/
classLang
{
/**
*获取指定键的语言项
*
*@authorGarbin
*@param none
*@returnmixed
*/
function&get($key='')
{
$vkey=$key?
strtokey("{$key}",'$GLOBALS[\'__ECLANG__\']'):
'$GLOBALS[\'__ECLANG__\']';
$tmp=eval('if(isset('.$vkey.'))return'.$vkey.';else{return$key;}');
return$tmp;
}
/**
*加载指定的语言项至全局语言数据中
*
*@authorGarbin
*@paramnone
*@returnvoid
*/
functionload($lang_file)
{
static$loaded=array();
$old_lang=$new_lang=array();
$file_md5=md5($lang_file);
if(!
isset($loaded[$file_md5]))
{
$new_lang=Lang:
:
fetch($lang_file);
$loaded[$file_md5]=$lang_file;
}
else
{
return;
}
$old_lang=&$GLOBALS['__ECLANG__'];
if(is_array($old_lang))
{
$new_lang=array_merge($old_lang,$new_lang);
}
$GLOBALS['__ECLANG__']=$new_lang;
}
/**
*获取一个语言文件的内容
*
*@authorGarbin
*@param string$lang_file
*@returnarray
*/
functionfetch($lang_file)
{
returninclude($lang_file);
}
}
functionlang_file($file)
{
returnROOT_PATH.'/languages/'.LANG.'/'.$file.'.lang.php';
}
/**
*配置管理器
*
*@authorGarbin
*@usagenone
*/
classConf
{
/**
*加载配置项
*
*@authorGarbin
*@param mixed$conf
*@returnbool
*/
functionload($conf)
{
$old_conf=isset($GLOBALS['ECMALL_CONFIG'])?
$GLOBALS['ECMALL_CONFIG']:
array();
if(is_string($conf))
{
$conf=include($conf);
}
if(is_array($old_conf))
{
$GLOBALS['ECMALL_CONFIG']=array_merge($old_conf,$conf);
}
else
{
$GLOBALS['ECMALL_CONFIG']=$conf;
}
}
/**
*获取配置项
*
*@authorGarbin
*@param string$k
*@returnmixed
*/
functionget($key='')
{
$vkey=$key?
strtokey("{$key}",'$GLOBALS[\'ECMALL_CONFIG\']'):
'$GLOBALS[\'ECMALL_CONFIG\']';
returneval('if(isset('.$vkey.'))return'.$vkey.';else{returnnull;}');
}
}
/**
*获取视图链接
*
*@authorGarbin
*@param string$engine
*@returnobject
*/
function&v($is_new=false,$engine='default')
{
include_once(ROOT_PATH.'/eccore/view/template.php');
if($is_new)
{
returnnewecsTemplate();
}
else
{
static$v=null;
if($v===null)
{
switch($engine)
{
case'default':
$v=newecsTemplate();
break;
}
}
return$v;
}
}
/**
* 获取一个模型
*
* @authorGarbin
* @param string$model_name
* @param array $params
* @param book$is_new
* @returnobject
*/
function&m($model_name,$params=array(),$is_new=false)
{
static$models=array();
$model_hash=md5($model_name.var_export($params,true));
if($is_new||!
isset($models[$model_hash]))
{
$model_file=ROOT_PATH.'/includes/models/'.$model_name.'.model.php';
if(!
is_file($model_file))
{
/*不存在该文件,则无法获取模型*/
returnfalse;
}
include_once($model_file);
$model_name=ucfirst($model_name).'Model';
if($is_new)
{
returnnew$model_name($params,db());
}
$models[$model_hash]=new$model_name($params,db());
}
return$models[$model_hash];
}
/**
*获取一个业务模型
*
*@paramstring$model_name
*@paramarray$params
*@parambool$is_new
*@returnobject
*/
function&bm($model_name,$params=array(),$is_new=false)
{
static$models=array();
$model_hash=md5($model_name.var_export($params,true));
if($is_new||!
isset($models[$model_hash]))
{
$model_file=ROOT_PATH.'/includes/models/'.$model_name.'.model.php';
if(!
is_file($model_file))
{
/*不存在该文件,则无法获取模型*/
returnfalse;
}
include_once($model_file);
$model_name=ucfirst($model_name).'BModel';
if($is_new)
{
returnnew$model_name($params,db());
}
$models[$model_hash]=new$model_name($params,db());
}
return$models[$model_hash];
}
/**
*获取当前控制器实例
*
*@authorGarbin
*@returnvoid
*/
functionc(&$app)
{
$GLOBALS['ECMALL_APP']=&$app;
}
/**
*获取当前控制器
*
*@authorGarbin
*@returnObject
*/
function&cc()
{
return$GLOBALS['ECMALL_APP'];
}
/**
*导入一个类
*
*@authorGarbin
*@returnvoid
*/
functionimport()
{
$c=func_get_args();
if(empty($c))
{
return;
}
array_walk($c,create_function('$item,$key','include_once(ROOT_PATH.\'/includes/libraries/\'.$item.\'.php\');'));
}
/**
*将default.abc类的字符串转为$default['abc']
*
*@authorGarbin
*@param string$str
*@returnstring
*/
functionstrtokey($str,$owner='')
{
if(!
$str)
{
return'';
}
if($owner)
{
return$owner.'[\''.str_replace('.','\'][\'',$str).'\']';
}
else
{