现在是创建模块的管理部分的时候了。在这个非常简单的模块中,唯一能在数据库上运行的功能将是修改我们创建的三种语言之一的文本。首先,我们必须创建要插入到文件夹中的文件
重要的是要记住我们在第 6 章中名为目录结构的章节中刚刚说过的内容
文件夹 admin/links 则表示管理模块必须调用并在 admin 中为该特定模块定位一种语言。
示例(FAQ 模块的管理)
if (($radminsuper==1) OR ($radminfaq==1)) { adminmenu("admin.php?op=FaqAdmin ", "" _FAQ." ", "faq.gif"); }
此模块
验证管理权限(此模块可以设置为由超级管理员或管理员查看)
它传递一个 “CASE”(op=FaqAdmin),指示 admin.php 文件(包含所有管理模块)要调用的模块,关联一个值以便翻译术语 “FAQ”,并关联一个用于可视化管理的图像(faq.gif)。
文件夹 admin/case 则用于定义在每个指定情况下要使用的模块。当使用同一个 admin 文件时,我们需要使用 CASE 语句执行更多操作时,这非常重要
case1 = insert case2 = cancel etc...
实际上,它说明了要调用哪个模块来验证 CASE 条件。例如,在 FAQ 模块中有很多 case,以下是最后 2 个
case "FaqAdmin": case "FaqCatGo": include ("admin/modules/adminfaq.php"); break;
这两个 CASE 语句都调用 adminfaq.php 文件,但它们用于不同的操作。第一个使用默认方案调用文件,第二个则给出 O:K. 来插入新类别。
这通过诸如第一个 case 中的 “admin.php?op=FaqAdmin” 和第二个 case 中的 “admin.php?op=FaqCatGo” 这样的字符串发生。
我们现在将按以下顺序创建文件
admin/modules/topolino.php
admin/case/case.topolino.php
admin/links/links.topolino.php
为了在模块文件夹(modules/topolino.php)内创建文件,我们必须具有这种类型的结构
文件的起始部分(所有模块都相似)
定义必要的函数。
定义必要的 case 以调用管理模块的各种函数。
文件的结尾部分。
文件的起始部分的语法如下
<?php if (!eregi("admin.php ", { die ("Access Denied"); } $result = sql_query("select radminsuper, admlanguage from "$prefix."_authors to where aid=' $aid '", $dbi); list($radminsuper, $admlanguage) = sql_fetch_row($result, $dbi); if ($radminsuper==1) {
文件的这一部分控制调用它的用户的管理权限,对要使用的语言的控制,以及(在本模块中没有)对管理员权限的控制。管理员可能只对模块具有部分管理权限,或者某些模块只能由超级管理员管理。在我们的特定情况下,该模块只能由超级管理员管理,因为控制只是
if ($radminsuper==1)
如果存在一些特定权限(例如在评论模块中),则要控制的权限将是
if (($radminreviews==1) OR ($radminsuper==1))
实际上,在新模块上激活两级权限并不简单,您必须在 nuke_authors 表中指定一个新字段来指定权限,然后修改 admin/modules/authors.php 添加新模块的复选框,并修改相应的 UPDATE 查询。
让我们回到我们的模块,语法的初始部分是强制性的
<?php if (!eregi("admin.php ", { die ("Access Denied"); } $result = sql_query("select radminsuper from "$prefix."_authors to where aid=' $aid '", $dbi); list($radminsuper) = sql_fetch_row($result, $dbi); if ($radminsuper==1) { and that end is instead: } else { echo "Access Denied"; } >
我们在中间找到的所有内容都是管理函数和必须检查的 case,我们现在将继续构建它们。为了构建管理函数,有一些规则要遵循
我们必须在函数的开头包含一个 header,在结尾包含一个 footer
include("header.php"); include("footer.php");
我们必须在 header 之后立即包含 GraphicAdmin(); 函数。它将显示导航面板,该面板通向所有其他管理链接。我们现在要创建的函数是
显示数据库记录
选择记录并将其插入到可修改的文本字段中
通过在文本字段中插入修改后的值来修改数据库中的记录。
这是完成记录选择的函数的代码
function mousedisplay() { global $admin, $bgcolor2, $prefix, $dbi, $multilingual; include ("header.php"); GraphicAdmin(); Opentable(); $resultpersons = sql_query("SELECT idperson, nameperson FROM ".$prefix."_topolino", $dbi); for ($m=0; $m < sql_num_rows($resultpersons, $dbi); $m++) { list($idperson, $nameperson) = sql_fetch_row($resultpersons, $dbi); echo "$idperson - $nameperson < to href=\"admin.php=mouseselect & idtopo=$idperson \" > Select mouse </to > < br > "; } closetable(); include("footer.php"); }
要实现的下一个函数是对应于选择三个记录之一的函数
function mouseselect() { global $admin, $bgcolor2, $prefix, $dbi, $multilingual, $idtopo; include ("header.php"); GraphicAdmin(); Opentable(); $resultpersons = sql_query("SELECT idperson, nameperson FROM "$prefix."_topolino to where idperson=' $idtopo '", $dbi); for ($m=0; $m < sql_num_rows($resultpersons, $dbi); $m++) { list($idperson, $nameperson) = sql_fetch_row($resultpersons, $dbi); echo "< form action=\"admin.php\" method=\"post\">"; echo "< input type=\"text\" name=\"nameperson \ "size=\"20\" maxlength=\"20 \ "value=\"$personname \" >< br >< br > "; echo "< input type=\"hidden\" name=\"idperson\"value=\"$idtopo\" > "; echo "< input type=\"hidden\" name=\"op \ "value=\"mousemodify\" > "; echo "< input type=\"submit\" value=\""._ADDTOPO."\" > "; echo "</form >"; } closetable(); include("footer.php"); }
非常重要的是要注意一些事项
我们将插入的变量将被检查,实际上您可以看到变量 “$idtopo” 被插入在使用的变量之间。
在 CASE 语句中检查的值通过隐藏的表单字段传递给我们
(< input type=\"hidden\"name=\"op\"value=\"mousemodify\">).
我们考虑的最后一个函数是对应于更新数据库中值的函数(在这里我们也添加了我们感兴趣的两个变量($nameperson,$idperson))
function mousemodify() { global $admin, $bgcolor2, $prefix, $dbi, $multilingual, $idtopo, $nameperson, $idperson; include ("header.php"); GraphicAdmin(); Opentable(); sql_query("update "$prefix."_topolino set nameperson=' $nameperson' where idperson=$idperson", $dbi); echo"OK "; die(mysql_error()); closetable(); include("footer.php"); }
最后两个要插入的元素是 CASE 语句的定义(即,根据传递给模块的变量调用哪个函数)和文件的关闭。
case 的定义
switch($op) { case "": mousedisplay(); break; case "topolino": mousedisplay(); break; case "mouseselect": mouseselect(); break; case "mousemodify": mousemodification(); break; } Closing of the file: } else { echo "Access Denied"; } >
case 定义页面非常容易构建,它收集包含在文件 admin/modules/topolino.php 中的 case,并将它们放在文件 admin/case/case.topolino.php 中
这是语法
<?php if (!eregi("admin.php ", { die ("Access Denied"); } switch($op) { case "topolino": include("admin/modules/topolino.php"); break; case "mouseselect": include("admin/modules/topolino.php"); break; case "mousemodify": include("admin/modules/topolino.php"); break; } >
我们必须做的最后两件事是编译文件 admin/links/link.topolino.php 和创建一个语言模块:编译文件 link.topolino.php
<?php if ($radminsuper==1) { adminmenu("admin.php?op=topolino ", "" _EDITTOPOLINO." ", "topolino.gif"); } >
其中:admin.php?op=topolino 定义了必须调用哪个模块,“ _EDITTOPOLINO” 是要翻译的术语(它必须在 admin/language 中编译)。对于语言模块的修改,我建议您参考前面的段落,并注意一点。管理部分的语言文件是通用的(admin/language),相关的语言必须添加到已存在的语言的末尾。还有一件事,此示例的语法并不完美,使其完美运行超出了本文的范围,但它确实说明了模块的操作(您可以在 www.spaghettibrain.com 下载它,以便您可以进行研究)。