Xoops模块开发入门
导航: 上一页 | 首页 | DedeCMS | 帝国CMS | Drupal | PHPCMS | PHP168 | Joomla | PowerEasy | SupeSite
规格表[ ]
我们学习制作的这个模块,目的是要向正在访问该模块的用户表示欢迎。 在未来我们将会扩充这个模块的功能,但是现在先让我们把基本架构弄出来。
- 模块名: Greeter
- 模块目录:greeter
该模块必须能够:
- 它本身要能够在导航菜单中显示
- 支持多语言环境
- 能够向用户说“您好”
目录结构[ ]
假设你已经用骨架代码把目录结构都建好了。如果还没有,现在就请阅读一下《xoops-module-skeleton.doc》。
所创建好的结构看起来就像如下的样子:
XOOPS_ROOT/modules/greeter language english templates
随着时间的推移,我们会在上述目录下面建新的目录和文件,但是现在,请先创建如同上述的结构就行了。
请注意:在以下的描述中,当我给出一个目录名或文件名时,除非有明确地表述,否则它们都对应于XOOPS_ROOT/modules/greeter 。
XOOPS 版本信息[ ]
创建一个文件 /xoops_version.php 其程序代码内容如下:
<?php // 版权信息,说明,等等……放在这里 $modversion['name'] = _MI_GREETER_NAME; $modversion['version'] = 1.00; $modversion['description'] = _MI_GREETER_DESC; $modversion['credits'] = ''; $modversion['author'] = ''; $modversion['help'] = 'help.html'; $modversion['license'] = 'GPL see LICENSE'; $modversion['official'] = 0; $modversion['image'] = 'greeter_slogo.png'; $modversion['dirname'] = 'greeter'; // 管理 $modversion['hasAdmin'] = 0; $modversion['adminmenu'] = ''; // 菜单 $modversion['hasMain'] = 1; // 模板 $modversion['templates'][1]['file'] = 'greeter_greet.html'; $modversion['templates'][1]['description'] = 'To show a welcome menu'; ?>
说明[ ]
_MI_ ...是什么?
任何以 _MI_ 为前缀的词,都是在 /language/schinese/modinfo.php语言文件里面定义的。 我们马上会创建这个文件,但是现在,我们只要知道,这是模块信息,它将被及时显示在用户眼前,因此需要在语言文件里事先定义。
模板
模板(Templates)会在模块安装时被编译,而且保存在数据库中。 因此,你必须让系统知道你将会使用到的每个模板。
模块信息语言文件
编辑 /language/schinese/modinfo.php 而且将下列内容放入其中。
<?php define('_MI_GREETER_NAME', ' Greeter '); define('_MI_GREETER_DESC', ' A simple module that greets the person logged in.'); ?>
说明:稍后我们将会把较多的信息加入这个文件里,但是它仍然是一样的语法。现在如果我们想要增加一个法语的语言文件,我们要做的只是创建 /language/french/modinfo.php,然后放上相同的定义,不过这些定义要改为法语。现在如果某人在法语的语系中使用此系统,Greeter会以他们的语言来显示它的名字和描述。
一个简单的小帮手[ ]
以如下的内容,创建 /header.php :
<?php require '../../mainfile.php'; ?>
这就是一个简单的小帮手。
最主要的文件:index.php[ ]
这个其实也非常容易:
<?php require 'header.php'; $uname = !empty($xoopsUser) ? $xoopsUser->getVar('uname') : _MD_GREETER_ANONYMOUS; //我们必须在引用header之前,设置好Template: $xoopsOption['template_main'] = 'greeter_greet.html'; //引用headers require XOOPS_ROOT_PATH . '/header.php'; $xoopsTpl->assign('greeting', _MD_GREETER_GREETING); $xoopsTpl->assign('uname', $uname); //引用footer require XOOPS_ROOT_PATH . '/footer.php'; ?>
说明
- $xoopsUser
当 /header.php 它的项目包含 ../../mainfile.php 时,很多变量和类就会自行产生。 $xoopsUser 就是其中的一个变量。如果用户已经登录,用户名这个值赋给变量$xoopsUser,否则$xoopsUser仍是空的。因此,我们就可以得知用户的名字或者是游客(anonymous)。
_ MD_GREETER _ ... ? 还要再一次定义语言文件?
说对了!它们就是在语言文件里面用definde定义的,不过这次,它们没有在 /language/schinese/modinfo.php 里面定义,因为这些“_GR_ ...”并不包含模块信息,它们是在 /language/schinese/main.php 这个文件里定义的,稍候我们会创建这个文件。然后他们要处理什么?
- $xoopsTpl
这是另一个变量,当程序引用了 /header.php 时就自动产生了。它也是Smarty类。 在Smarty的速成课程中,他们定义 $xoopsTpl 变量为 $smarty。 它只是你在 $xoopsOption['template_main'] = 'greeter_greet.html'模板中所创建的 Smarty类。
为了完整的利用这些功能,你可能需要学习Smarty。 而我现在并不会在这里使用它的完整功能。
[ ]
这只是 header 与 footer。在这里你要知道的重要一点是:
- 你必须将它们包含(include)进来
- 在还没把XOOPS_PATH . '/header.php'包含之前,你不能使用$xoopsTpl
- 所有$xoopsTpl操作必须在两个require语句之间完成
/language/schinese/main.php[ ]
这个文件也很简单,和 /language/schinese/modinfo.php 差不多。 以下就是内容:
<?php define('_GR_GREETING', ' 你好,'); define('_GR_ANONYMOUS',' 游客'); ?>
/templates/greeter_greet.html[ ]
这个文件是个真实的Smarty 模板文件。 它也很简单。
<p> <{$greeting}> <{$uname}> </p>
重要说明: 在 XOOPS 中,所有的Smart 程序代码的Smarty标签都是 <{...}> 而不是像Smartys速成课程中所说的 {...} 标签。 {...} 是无法在XOOPS里工作的。请牢记!
现在,<{$greeting}> 就从 /index.php里面的 $xoopsTpl->assign('greeting', ...); 获取已经定义好的值;<{$uname}> 也是一样的作用。
准备好了吗?[ ]
好了。 我认为我们已经完成使这个模块运行的所有必要工作。我们来个测试吧! 我不打算在这里讲述如何安装这个模块。你应该已经知道该怎么做了。 但是我要说,如果每个步骤都准确无误地完成,那么你应该可以在 Admin/Modules 的页面上看到 欢迎您这个模块。安装它,然后回到你的首页。你应该看见 欢迎您 出现在你的导航菜单上。点击它,看看它工作得如何!
你应该看到和下面类似的画面:
你好,admin
如果是你自己登录的话,当然就是“你好,你的名字”。或者,如果没有登录,就显示“你好,游客”。
注意:如果你只看见一个空白页,你应该试着更新模块。进入System Admin -> Modules,然后点击greeter module 旁边的update module按钮。如果还是显示空白页,建议返回检查,这是一项艰苦的工作,但是欢迎来到开发者的世界。我保证我们都曾经历过。