1,ECMall startup函数启动,定义APP常量
$app = isset($_REQUEST['app']) ? preg_replace('/(\W+)/', '', $_REQUEST['app']) : $default_app;
define('APP', $app);
2,frontend.base.php或者backend.base.php构造函数加载语言文件
Lang::load(lang_file('common'));
Lang::load(lang_file(APP));
3,Lang类的加载定义实现
function load($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;
}
加载文件内容数组
function fetch($lang_file)
{
return is_file($lang_file) ? include($lang_file) : array();
}
构建语言文件名称
function lang_file($file)
{
return ROOT_PATH . '/languages/' . LANG . '/' . $file . '.lang.php';
}
file变量即为请求的app名称,在ecmall启动函数中被设置
4,获取加载好的语言数据
app在display数据时使用基类ecapp.base.php的display
里面调用
/* 语言项 */
$this->assign('lang', Lang::get());
设置语言数据
Lang::get 获取预研key值
function &get($key = '')
{
if (Lang::_valid_key($key) == false)
{
return $key;
}
$vkey = $key ? strtokey("{$key}", '$GLOBALS[\'__ECLANG__\']') : '$GLOBALS[\'__ECLANG__\']';
$tmp = eval('if(isset(' . $vkey . '))return ' . $vkey . ';else{ return $key; }');
return $tmp;
}
ecapp.base.php使用基类的app.base.php的assign函数给视图传递变量。
function assign($k, $v = null)
{
$this->_init_view();
if (is_array($k))
{
$args = func_get_args();
foreach ($args as $arg) //遍历参数
{
foreach ($arg as $key => $value) //遍历数据并传给视图
{
$this->_view->assign($key, $value);
}
}
}
else
{
$this->_view->assign($k, $v);
}
}
app.base.php的assign调用_view既是template.php的assign函数为视图添加变量。
function assign($tpl_var, $value = '')
{
if (is_array($tpl_var))
{
foreach ($tpl_var AS $key => $val)
{
if ($key != '')
{
$this->_var[$key] = $val;
}
}
}
else
{
if ($tpl_var != '')
{
$this->_var[$tpl_var] = $value;
}
}
}
5,在视图类中设置模板后,既可以使用了。
ecapp.base.php 的display函数
parent::display($f);
调用父类app.base.php的display函数
既
function display($n)
{
$this->_init_view();
$this->_view->display($n);
}
既调用了template.php的display函数。