模块创建,公共部分

我们继续使用来自题为创建完全兼容模块:需要遵循的规则的章节的 Topolino 示例,并创建一个非常简单的模块,该模块显示 Topolino 的 GIF 图片,其中包含用户可编辑的 3 个预定义名称列表。这是一个无意义的模块,但它足够简单,每个人都能理解。我们将使用的数据库是 MySQL,但通过更改一些细节,该示例适用于所有数据库。首先,让我们看看我们将构建的每个模块的框架

<?php
if (!eregi("modules.php", $PHP_SELF)) {
die ("You can't access this file directly...");
}
$index = 1;
require_once("mainfile.php");
$module_name = basename(dirname(__FILE__));
get_lang($module_name);
include("header.php");
include("footer.php");
?> 

重要提示:在进行任何操作之前,必须创建一个名为“modules/Topolino”的文件夹,我们刚刚创建的文件(以及其他内容)必须命名为 index.php,并且必须位于该文件夹中。

我们在数据库中创建一个名为 nuke_topolino 的表,其结构如下

我们手动插入(使用 PHPMyAdmin - 请参阅第 11 章中题为PHPMyadmin,通过网络管理 MySQL的章节 - 或等效的界面)我们感兴趣的 3 个人的姓名,请参阅图 9-1(为了简单起见,该模块不允许您添加或取消人员,而只允许编辑已存在的人员)。

图 9-1。PHPMyAdmin:插入值

PHPMyAdmin:插入值

注意:可以在每个函数的末尾包含页脚。这是一种稍微复杂一点的解决方案,因为我们必须编写更多行代码,但我必须强调许多模块都使用了它。

一旦数据库表准备就绪,我们就可以开始享受创建代码的乐趣,这些代码将返回我们的输出。我们的输出将是一个简单的查询,其中包含一个循环,该循环将返回数据库中插入的值(世界上最简单的事情,天哪!)。

注意!!!

为了保持数据库的抽象性,使其能够以独立的方式在各种数据库上工作,我们不能使用 MySQL 爱好者通常使用的经典 PHP 语法; -),相反,我们必须使用文件 include/sql_layer.php中说明的语法

我们将编译的查询将以以下方式构造

$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 < br >";
}

非常简单,不是吗?好的!在转到此模块的管理员界面之前,我们将开始对其进行修改,目的是使其具有最低限度的样式尊严。

我建议

我们可以通过渲染所有与 PHP-Nuke 多语言系统兼容的模块来做到这一点:我们定义将组成我们需要的两个短语的抽象,在文件 lang-english.php 中,我们必须插入

<?php
define("_BENVETOPOMOD", "Topolino Module, Welcome!");
define("_DESCRITOPOMOD", "This is an example module that serves to illustrate how a PHP-Nuke module is created");
>

记住在我们的语言文件夹中插入一个名为 index.htm 的文件!我们需要它来保护该文件夹的内部免受不必要的导航。我们几乎到了前端部分的末尾,现在我们必须将样式部分插入到我们创建的代码中,并将所有内容组装起来。我们取出之前构建的两个代码片段(初始代码片段和我们创建的代码片段),并将样式修改加入其中

<?php if (!eregi("modules.php", $PHP_SELF)) 
{ die ("You can't access this rows directly..."); } 
$index = 1; require_once("mainfile.php"); 
$module_name = basename(dirname(__FILE__)); 
get_lang($module_name); 
include("header.php"); 
echo "<br>"; 
echo""._BENVETOPOMOD.""; 
echo "<br><br>"; 
opentable();
echo "<br>"; 
echo""._DESCRITOPOMOD.""; 
echo "<br><br>"; 
$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 <br>";
} 
closetable();
include("footer.php");
?>

我们只添加了文本、一些用于标题的换行符,以及一个“Opentable();”和一个“Closetable();”来包含文本。结果可以在图 9-2中看到

图 9-2。示例模块

示例模块