微擎框架分析–应用入口到应用模块分析
微擎代码从应用入口到应用模块分析
微擎应用模块链接:
./index.php?c=home&a=welcome&do=account_ext&m=module_name
一: 点击此链接后,将执行 web/scource/home/welcom.ctrl.php文件中的$do == ‘account_ext’ 页面加载 template(‘home/welcome-ext’);
二:
跳转到home/welcome-ext界面后,通过ajax向url(‘module/welcome/get_module_info’, array(‘m’ => $modulename, ‘uniacid’ => $redirect_uniacid))请求跳转连接
三:
ajax请求web/scource/module/welcome.ctrl.php文件中的$do == ‘get_module_info’
if ($do == 'get_module_info') {
$uni_modules_talbe = table('uni_modules');
$uni_modules_talbe->searchWithModuleName($module_name);
$module_info = $uni_modules_talbe->getModulesByUid($_W['uid'], $uniacid);
$module_info = current($module_info['modules']);
$module_info['welcome_display'] = false;
$site = WeUtility::createModule($module_name);
if (!is_error($site) && method_exists($site, 'welcomeDisplay')) {
$module_info['welcome_display'] = true;
$module_info['direct_enter_status'] = module_get_direct_enter_status($module_name);
}
$data = array(
'module_info' => $module_info,
);
iajax(0, $data);
}
获取链接,location.href = redirect_url;跳转执行
web/scource/module/welcome.ctrl.php文件中的$do == ‘welcome_display’ 或者$do == ‘display’
四:
if ($do == 'display') {
$notices = welcome_notices_get();
template('module/welcome');
}
if ($do == 'welcome_display') {
$site = WeUtility::createModule($module_name);
if (!is_error($site)) {
$method = 'welcomeDisplay';
if(method_exists($site, $method)){
define('FRAME', 'module_welcome');
$entries = module_entries($module_name, array('menu', 'home', 'profile', 'shortcut', 'cover', 'mine'));
$site->$method($entries);
exit;
}
}
}
welcome_display将执行addons/应用模块标识/module.php文件中的public function welcomeDisplay() {}方法可进行页面跳转到自己模块主目录或者主文件(自定义)。
public function welcomeDisplay() {
global $_GPC,$_W;
ob_end_clean();
$last_info = explode(',', $_GPC['__lastvisit_'.$_W['uid']]);
$version_info = strstr($last_info[1], 'version_id');
if (!empty($version_info)) {
$version_arr = explode('=', $version_info);
$url = $this->createWebUrl('dashboard', array('act' => 'display', '_n' => 0, 'version_id' => $version_arr[1]));
} else {
$url = $this->createWebUrl('dashboard', array('act' => 'display', '_n' => 0));
}
@header('Location: '.$url);
exit;
}
页面跳转执行应用模块相应的文件。
五:
跳转的页面
protected function createWebUrl($do, $query = array()) {
$query['do'] = $do;
$query['m'] = strtolower($this->modulename);
return wurl('site/entry', $query);
}
生成的跳转链接: http://yjn.localhost.com/web/index.php?c=site&a=entry&act=display&_n=0&do=dashboard&m=模块名
执行 web/source/site/entry.ctrl.php文件。
执行代码
$_GPC['__entry'] = $entry['title'];
$_GPC['__state'] = $entry['state'];
$_GPC['state'] = $entry['state'];
$_GPC['m'] = $entry['module'];
$_GPC['do'] = $entry['do'];
$_W['current_module'] = $module;
$site = WeUtility::createModuleSite($entry['module']);
define('IN_MODULE', $entry['module']);
if (!is_error($site)) {
if ($_W['role'] == ACCOUNT_MANAGE_NAME_OWNER) {
$_W['role'] = ACCOUNT_MANAGE_NAME_MANAGER;
}
$sysmodule = module_system();
if (in_array($m, $sysmodule)) {
$site_urls = $site->getTabUrls();
}
$method = 'doWeb' . ucfirst($entry['do']);
exit($site->$method());
}
itoast("访问的方法 {$method} 不存在.", referer(), 'error');
执行 addons/应用模块/site.php下的doWebDashboard方法进行相关逻辑模块的执行。
本文来自投稿,不代表微擎百科立场,如若转载,请注明出处:https://www.w7.wiki/code/2558.html