9.4. 模块创建,管理员部分

是时候创建模块的管理部分了。在这个非常简单的模块中,唯一将在数据库上运行的功能是我们可以修改我们创建的三种语言之一的文本的功能。首先,我们必须创建要插入到文件夹中的文件

重要的是要记住我们在 第 6.1 节 中刚刚说过的内容

管理

包含 4 个子目录(links、language、case、modules),用于管理各种管理模块。 存放文件的文件夹是 modules/admin/ 。

相反,admin/links 文件夹表示管理模块必须为该特定模块在 admin 中调用和定位一种语言。

示例(FAQ 模块的管理)

if (($radminsuper==1) OR ($radminfaq==1)) {
adminmenu("admin.php?op=FaqAdmin ", "" _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 文件,但它们用于不同的操作。 第一个使用默认方案调用文件,而第二个则允许插入新类别。

这是通过像第一个 case 中的 "admin.php?op=FaqAdmin" 和第二个 case 中的 "admin.php?op=FaqCatGo" 这样的字符串发生的。

我们现在将按以下顺序创建文件

为了在模块文件夹 (modules/topolino.php) 中创建文件,我们必须具有这种类型的结构

文件起始部分的语法如下

<?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 之后立即包含 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");
}

非常重要的是要注意一些事项

  1. 我们插入的变量将被检查,实际上您可以看到变量 “$idtopo” 被插入到使用的变量之间。

  2. 在 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 下载并进行研究)。