由于这两天一直研究XOOPS的模块,所以找到了这篇很好的模块开发快速入门。
看了以后,就兴致勃勃的来开发模块了,可是开发的过程中遇到一些问题。
应该是我看的太快了,要学而时习之啊。因此翻译在这里。
==============
作者:Surance Yin
邮箱:[email protected]
主页:http://www.fltek.com.cn
=================
第四章――xoops区块
Part 1 Building a simple module
Part 2 - using Smarty templates in a module
Part 3 - Building an AJAX module
Xoops中,区块是一个非常重要的概念, 不过开发区块并不是很容易,尤其是options,所以我写了这个教程。
一个xoops区块包含2部分:
1- 一个php 函数,用来控制区块内容
2- 一个smarty模板,用来控制区块的显示.
以下是 xoops_version.php 中的定义,我们从这里讲起
第一步- 设置 xoops_version.php
打开 tutorial/xoops_version.php. 在?>之前输入:
// Blocks $modversion['blocks'][1]['file'] = "tutorial_block.php"; $modversion['blocks'][1]['name'] = 'Block for Tutorial'; $modversion['blocks'][1]['description'] = 'This is a Block for the tutorial module'; $modversion['blocks'][1]['show_func'] = "tut_blockList"; $modversion['blocks'][1]['template'] = 'tutorial_block.html'; |
$modversion['blocks'][1]['file'] = "tutorial_block.php";第一行告诉xoops 那个文件来控制区块内容. 1个文件可以有很多个函数。我习惯把所有的函数都放在同一个文件里面,除非函数太庞大了。这样的话,可以很方便的通过文件来找函数。
$modversion['blocks'][1]['name'] = 'Block for Tutorial';这里是区块的名称。最好采用语言文件来定义这些东西,不过为了简单起见,我直接写在这里了。
$modversion['blocks'][1]['description'] = 'This is a Block for the tutorial module';非常容易明白,这里是区块的描述。会显示在区块管理界面的。
$modversion['blocks'][1]['show_func'] = "tut_blockList";这里是用来控制区块的内容的函数名称。我的经验是,尽量在函数名称前面,加上区块名称前缀,这样不会和xoops自带的函数混淆。我以前出现过这样的问题,你也要提起注意哦.
$modversion['blocks'][1]['template'] = 'tutorial_block.html';这里是区块用到的 smarty 模板。
小贴士
当创建一个模块的时候, xoops_version.php中的数字都是这样的:
// Templates $modversion['templates'][1]['file'] = 'tut_form.html'; $modversion['templates'][1]['description'] = ''; $modversion['templates'][2]['file'] = 'tut_client_list.html'; $modversion['templates'][2]['description'] = ''; $modversion['templates'][3]['file'] = 'tut_main.html'; $modversion['templates'][3]['description'] = ''; |
如果只有两三个模板,数字的控制还相对容易,但是如果有40多个的时候,控制数字就成了一个非常繁琐的工作。怎么解决这个问题呢?很简单,使用一个计数变量。
// Templates $i=1; $modversion['templates'][$i]['file'] = 'tut_form.html'; $modversion['templates'][$i]['description'] = ''; $i++; $modversion['templates'][$i]['file'] = 'tut_client_list.html'; $modversion['templates'][$i]['description'] = ''; $i++; $modversion['templates'][$i]['file'] = 'tut_main.html'; $modversion['templates'][$i]['description'] = ''; $i++; |
这样就可以很方便的创建模板了,不用担心序号了。因为变量$i负责计数。它从1开始,然后每次加1
第二步- 创建必须的文件
创建2个文件夹:
tutorial/blocks
tutorial/templates/blocks
在tutorial/blocks中,创建一个文件tutorial_block.php ,输入以下代码:
<?php function tut_blockList(){ $block=array(); $block['mytext']="Hello world! This is my new Block!"; return $block; } ?> |
注意事项:
- 这个函数必须返回一个名为 $block的变量
- $block必须为一个数组.
- 可以向这个数组内放任何东西,包括另外一个关联数组。
- 区块可以在模块之外的地方调用,因此如果你包含了其他的文件,务必保证区块可以知道被包含文件的确切位置。
在 tutorial/templates/blocks创建一个文件tutorial_block.html ,输入以下代码
重新安装一下这个模块,就可以在区块管理页面中看到 'Block for Tutorial'这个区块了,使它可见,然后到首页去看一下效果。.
恭喜你,已经创建了第一个区块!
第三步- 创建options(参数)
这个机制可以让我们创建更加灵活的区块。
打开 tutorial/xoops_version.php输入如下红色的内容:
// Blocks $modversion['blocks'][1]['file'] = "tutorial_block.php"; $modversion['blocks'][1]['name'] = 'Block for Tutorial'; $modversion['blocks'][1]['description'] = 'This is a Block for the tutorial module'; $modversion['blocks'][1]['show_func'] = "tut_blockList"; $modversion['blocks'][1]['template'] = 'tutorial_block.html'; $modversion['blocks'][1]['edit_func'] = "tut_blockList_edit"; $modversion['blocks'][1]['options'] = 'Hello|1'; |
第一行告诉Xoops 区块的编辑函数是什么。这个函数必须也在tutorial_block.php中。第二行指定了参数默认值。这个区块中,有2个 options, 默认值分别为 "Hello" 和 "1". 采用'|'分隔.
打开 tutorial/blocks/tutorial_block.php
Replace all code with this:
<?php function tut_blockList($options){ $block=array(); $block['textOne']=$options[0]; $block['textTwo']=$options[1]; return $block; } function tut_blockList_edit($options){ $form = "Option 1: <input type='text' size='9' name='options[0]' value='$options[0]' />"; $form .= "<br />"; $form .= "Option 2: <input type='text' size='1' name='options[1]' value='$options[1]' />"; $form .= "<br />"; return $form; } ?> |
现在创建了一个新的函数 (tut_blockList_edit) ,这个函数用来设置区块。函数的声明表明 tut_blockList 它接受xoops传过来的参数 ($options)
注意事项
- 这个函数必须返回一个叫做$form的变量.
- $form必须是一个字符串,而不是数组。
- 可以有多个参数。
- Xoops 会自行存储这些参数到xoops的数据库,所以你不用担心保存、更新这些参数的值。
- $form中必须有参数命名的表单内容.
- options(参数)必须从0开始,比如 name='options[0]'.
打开 tutorial/templates/blocks/tutorial_block.html输入
<p>My First option is: <{$block.textOne}></p> <p>My Second option is: <{$block.textTwo}></p> |
好,为了让参数正常运行,我们需要重新安装这个模块。
重新安装后,设置区块可见,这首页,可以看到2个参数,一个是'Hello' ,另一个是 '1'. 从后台改变这2个参数,会发现首页也会跟着改变
哈!成功了!
Part 5 - Guidlines for Module Development