进入后台第一个文件./admin.php
很自然的想到,是调用了./admin/admin.htm模板.
现在打开./admin.php
有:
require_once PrintEot('admin');
要在注意这里PrintEot是在./admin/admincp.php
里定义的函数,主要和./global.php里定义的PrintEot
区别是路径调用了./template/admin/$template.$EXT;
而不是调用./template/wind/$template.$EXT;
打开./admin/admin.htm
找到
include_once PrintEot('left');
打开./admin/left.htm
找到$leftinfo
首先在./admin.php
找到require_once('./admin/admincp.php')
在./admin/admincp.php找到
require_once('./admin/left.php')
在./admin/left.php找到
require_once GetLang('left')
看看GetLang是什么函数
在./admin/admincp.php找到
function GetLang($lang,$EXT="php"){
global $tplpath;//
if($lang=='email'){
$path=file_exists("./template/$tplpath/lang_$lang.$EXT") ? "./template/$tplpath/lang_$lang.$EXT" : "./template/wind/lang_$lang.$EXT";
return $path;
} else{
$path=file_exists("./template/cp_$tplpath/cp_lang_$lang.$EXT") ? "./template/cp_$tplpath/cp_lang_$lang.$EXT" : "./template/admin/cp_lang_$lang.$EXT";
}
return $path;
}
分析一下上面的参数是怎么传递的,GetLang('left') 传递参数left
$lang=left,$EXT="php"
下面的if判断语句,$lang!='email'所以执行后面的$path="./template/admin/cp_lang_left.php";
现在打开./tempate/admin/cp_lang_left.php
$lang=array(
'信息管理'=>array(
'announcement'=>"◇ <a href=http://www.51one.net/tobbs/phpwind/'admin.php?adminjob=announcement&action=add'>发布</a> | <a href=http://www.51one.net/tobbs/phpwind/'admin.php?adminjob=announcement'>管理</a> 公告<br>",
'mailuser'=>"◇ <a href=http://www.51one.net/tobbs/phpwind/'admin.php?adminjob=mailuser'>Email 群发</a><br>",
'sendmsg'=>"◇ <a href='admin.php?adminjob=sendmsg'>短消息群发</a><br>",
'giveuser'=>"◇ <a href='admin.php?adminjob=giveuser'>节日礼物赠送功能</a><br>",
)
);
我们再cp_lang_left.php文件里得到$lang这个数组了
回到./admin/left.php文件里
找到下面的代码:
$leftdb=$lang;
unset($lang);
$leftinfo='';
foreach($leftdb as $key=>$left){
$left && $output1="<td bgcolor='$b'>$cptop<span class=bold>$key</span></td></tr><tr><td bgcolor='$b'>";
$output2='';
foreach($left as $key=>$value){
if($rightset[$key])
$output2.=$value;
}
if($output2){
$output1.=$output2."$cpbottom</td></tr>";
}else{
unset($output1);
}
$leftinfo.=$output1;
}
$lang是刚才的二维数组,
foreach()数组遍历,最后赋值给$leftinfo
好,在./template/left.htm 就可以把$leftinfo输出了。
从$leftinfo可以得到
我们在后台http://localhost/admin.php?
浏览器查看源文件得到如下连接
<td bgcolor='#F5F5FF'><table width=95% align=center cellspacing=0 cellpadding=0 bgcolor='#6A71A3'><tr><td><table width=100% cellspacing=1 cellpadding=3>
<tr><td class=head><span class=bold>信息管理</span></td></tr>
<tr><td bgcolor='#F5F5FF'>◇ <a href=http://www.51one.net/tobbs/phpwind/'admin.php?adminjob=announcement&action=add'>发布</a> | <a href=http://www.51one.net/tobbs/phpwind/'admin.php?adminjob=announcement'>管理</a> 公告</td></tr></table>
</td></tr></table></td></tr>
从前面的帖子中已经分析了,$adminjob传递的变量值announcemnet到./admin.php中,
在admin.php判断.require_once(./admin/announcement.php)中.
重新打开./admin/announcement.php
elseif($action=='add'){
if(!$step){
$groupid=$rightset['gid'];
include PrintEot('notice');exit;
}
这里就跳转到include PrintEot('notice');
看下面这段html的提交公告代码
<form name='FORM' method="post" action="$basename">
<table width=95% align=center cellspacing=0 cellpadding=0 bgcolor=$a>
<tr><td><table width=100% cellspacing=1 cellpadding=3>
<tr><td colspan="2" class=head><b>更新论坛公告</b></td></tr>
<!--
EOT;
if($action=='add'){print<<<EOT
-->
<tr bgcolor=$b><td width="21%" >公告范围:</td>
<td width="79%"><select name=fid>
<!--
EOT;
if($groupid!='5'){print<<<EOT
-->
<option value='-1'>整个社区</option>
<!--
EOT;
}print<<<EOT
-->
$forumcache</select></td></tr>
<!--
EOT;
}print<<<EOT
-->
<tr bgcolor=$b><td width="21%" >标题</td>
<td width="79%"><input type="text" size="45" name="newsubject" value="$subject"></td></tr>
<tr bgcolor=$b><td width="21%" valign="top">公告内容:<br>公告中可以使用 html 代码支持换行</td>
<td width="79%">
<!--
EOT;
print<<<EOT
-->
<textarea name="newmessage" cols="60" rows="10">$content</textarea>
</td></tr>
<input type=hidden value=$aid name=aid>
<input type=hidden value=2 name=step>
<input name=action type=hidden value="$action">
</table></td></tr></table><br><center><input type="submit" name="add" value="提 交"></form>
<!--
EOT;
}include_once PrintEot('adminbottom');
?>
-->
提交路径$basename
这在announcement.php里定义了该变量
$basename="admin.php?adminjob=announcement";
其中html代码中的变量:$fid,$newsubject,$content就是要插入数据库和写入缓存文件的
在这里我只注重把他们文件调用过程的思路串通,
没具体的一步步说明,我想通过写一个小功能的类似于phpwind(后台发布,前台显示,中间插入数据库和缓存文件)。
并且发出来,供大家调试,这样就更加容易理解了。
下次就准备写一个类似于phpwind小功能,具体的写过程我都会贴出

