PHP网页游戏学习之Xnova(ogame)源码解读(二)
三、 安装(install/index.php)
这个文件是安装页面,一开始就可以看到定义了两个常量:
define('INSIDE' , true); define('INSTALL' , true);
因为这两个常量在接下来的代码中总是用到,所以在这里先说明下。INSIDE是用来防止攻击的;INSTALL是用来记录现在是否处于安装游戏的进程中。
接下来Include两个文件:extension.inc和common,这两个都是正宗的php文件。首先extension.inc里面加入了防止攻击的代码,并且把php文件的扩展名隐藏起来,就是这句$phpEx = “php”。那么'common.'.$phpEx其实就是common.php了。
includeLang('install/install');
这句是load语言文件,includeLang()函数声明在includes/unlocalised.php文件中,这个文件中还有很多的小函数。
function includeLang ($filename, $ext = '.mo') { global $xnova_root_path, $lang, $user; if ($user['lang'] != '') { $SelLanguage = $user['lang']; } else { $SelLanguage = DEFAULT_LANG; } include ($xnova_root_path . "language/". $SelLanguage ."/". $filename.$ext); }
函数的功能是个根据用户的所用的语种 include 相应的代码,XnovaTC3版本里面是支持每个用户使用不同的语言的,我使用的版本无此功能。
继续往下,取得当前要显示的页面内容,就是到了安装步骤几了;然后进入一个大的switch。在这之前有一个这样的语句:
$MainTPL = gettemplate('install/ins_body');
Gettemplate()函数同样声明在includes/unlocalised.php文件中,
function gettemplate ($templatename) { global $xnova_root_path; $filename = $xnova_root_path . TEMPLATE_DIR . TEMPLATE_NAME . '/' . $templatename . ".tpl"; return ReadFromFile($filename); }
函数的功能是取得一个指定文件的内容,这个指定的文件是这样构成的:
$ugamela_root_path . TEMPLATE_DIR . TEMPLATE_NAME . '/' . $templatename . ".tpl";
TEMPLATE_DIR的值是'templates/',TEMPLATE_NAME的值是'OpenGame',那么前面的 gettemplate
('install/ins_body')就是取得templates/OpenGame/install/ins_body.tpl文件中的内容。这样的函数还有几个,大家都要记住,后面会经常用到。
case ‘intro':
一看就应该知道,是说明介绍的页面,不过里面有个我们首次见到的函数parsetemplate(),声明在includes/unlocalised.php文件中,
function parsetemplate ($template, $array) { return preg_replace('#\{([a-z0-9\-_]*"htmlcode">function display ($page, $title = '', $topnav = true, $metatags = '', $AdminPage = false) { global $link, $game_config, $debug, $user, $planetrow; if (!$AdminPage) { $DisplayPage = StdUserHeader ($title, $metatags); } else { $DisplayPage = AdminUserHeader ($title, $metatags); } if ($topnav) { $DisplayPage .= ShowTopNavigationBar( $user, $planetrow ); } $DisplayPage .= "<center>\n". $page ."\n</center>\n"; // Affichage du Debug si necessaire if ($user['authlevel'] == 1 || $user['authlevel'] == 3) { if ($game_config['debug'] == 1) $debug->echo_log(); } $DisplayPage .= StdFooter(); if (isset($link)) { @mysql_close($link); } echo $DisplayPage; die(); }函数的功能是显示普通用户页眉和管理员页眉的区分,是否显示顶部的信息栏等,此函数中还调用了其他函数,如:StdUserHeader()、AdminUserHeader()、ShowTopNavigationBar()和 StdFooter()都不复杂,其实现都是前面介绍过的 parsetempalte()和gettemplate(),这里就不详细说明了。
下一篇:PHP网页游戏学习之Xnova(ogame)源码解读(一)