我们继续使用来自题为创建完全兼容模块:需要遵循的规则的章节的 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,并且必须位于该文件夹中。
idperson:这是一个包含人员 ID 的单元格(int 11,主键)
nameperson:这是一个包含人员姓名的单元格(varchar 60)
我们手动插入(使用 PHPMyAdmin - 请参阅第 11 章中题为PHPMyadmin,通过网络管理 MySQL的章节 - 或等效的界面)我们感兴趣的 3 个人的姓名,请参阅图 9-1(为了简单起见,该模块不允许您添加或取消人员,而只允许编辑已存在的人员)。
ID 1:Topolino
ID 2:Minnie
ID 3:Pluto
注意:可以在每个函数的末尾包含页脚。这是一种稍微复杂一点的解决方案,因为我们必须编写更多行代码,但我必须强调许多模块都使用了它。
注意!!! |
为了保持数据库的抽象性,使其能够以独立的方式在各种数据库上工作,我们不能使用 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中看到