但这并不是我们想要的效果。 客户的需求:我们要提供两种信息输入的方式,一种是文件,一种是手动输入。那么我们现在就来实现这个要求。
我们需要给模块增加一些后台配置参数
上面我们提到过xml文件不但和安装程序有关,还能够配置模块。那好,我们修改一下
xml文件。
<?xml version="1.0" encoding="utf-8"?>
<extension type="module" version="2.5.0" client="site" method="upgrade">
<name>Alarm</name>
<author>min.zhang</author>
<version>1.0.0</version>
<description>显示通知信息的模块</description>
<files>
<filename>mod_alarm.xml</filename>
<filename module="mod_alarm">mod_alarm.php</filename>
<filename>index.html</filename>
<filename>helper.php</filename>
<folder>tmpl</folder>
</files>
<config>
<fields name="params">
<fieldset name="basic">
<field
name="inputModle"
type="radio"
default="0"
label="输入模式"
description="选择信息的输入模式 默认为手动输入">
<option value="0">手动输入</option>
<option value="1">从文件输入</option>
</field>
<field
name="content"
type="text"
label="内容"
description="当模式为手动是此处填写你要输出的信息,当模式为文件时,此处为文件的路径名(mod_alarm/)"
>
</field>
</fieldset>
<fieldset name="advanced">
</fieldset>
</fields>
</config>
</extension>
感觉上面代码没什么好解释的。有几个关键词,<field> <fieldset> 其他的就是一些正常的字段了。还是先来看一下效果
于2014-08-20日修改:在joomla中利用XML产生表单是一种很常见的方法,其中对fields和fieldset这两个标签的理解十分重要。我们可以将fields理解为组,将field理解为单独的一个字段。而fieldset可以将一组相关的field放在一起。这个感觉越说越糊涂了。还是先慢慢理解了。
现在后台的管理界面已经有了我们的输入模式了。
如果要继续完成我们的模块,那么现在急切需要解决的一个问题就是 如何实现和后台的通信了。
在上面我们提到了有一个helper.php文件,这个文件的作用是取得和分析数据。mod_alarm.php就是从helper.php中获取数据。
我们先看一下helper.php文件:
defined('_JEXEC') or die('can not access this file!'); /** * helper class for alarm module */ class modAlarmHelper { // get param from module param function getData($params) { $showMode = $params->get('inputModel'); $content = $params->get('content'); echo "showMode value =".$showMode."; echo "content value =".$content."; } }
关于这段代码的说明:这是一个类的实现文件。类名为modAlarmHelper 。注意,这个名称一般是按照命名规范取的。命名规范为mod+模块的名称+Helper. 不能随便命名
于2014-08-20日修改:这个类的名称是可以任意取的,但建议遵循命名规范。
另外在这个类中只实现了一个函数,getData($params),这个函数接受一个参数。然后调用$params的get方法得到我们在后台配置的值。并且将值输出。
很明显这只是一个类。那么我们应该在什么地方使用这个类呢?上面已经提到。mod_alarm.php是这个模块的入口点文件,由他来完成helper类和模块模版(default.php)之间的联系
看一下 mod_alarm.php文件:
// no direct access defined('_JEXEC') or die; // Include the syndioate function only once require_once(dirname(__FILE__).DS.'helper.php'); // new a obj $obj = new modAlarmHelper(); $obj->getData($params);
在解释上面的代码之前,我们先看一下执行的效果:
后台的设置:
前台执行效果:
很明显,我们成功的从后台得到模块的设置参数了,并且在前台也正确输出了。
再来分析一个mod_alarm.php文件的代码:
在这个文件中首先new一个类 modAlarmHelper.然后调用这个类的getData()方法,并且设置了一个参数$params.
于2014-08-20日修改:如果按照joomla推荐的方法,在helper类中使用静态方法,那么这里就不用使用new了。
一切都是很有道理的。除了$params这个变量。我们不经要问了,$params这个变量是什么东西,是从哪里来的。关于这个问题的答案,从执行结果我们就可知道了。$params是一个对象,这个对象主要用来处理模块参数的。是系统为我们维护的。
print_r($params)的执行结果:
JRegistry Object ( [data:protected] => stdClass Object ( [inputModel] => 1 [content] => www.zmax99.com ) )
说明他是一个JRegistry对象。关于JRegistry对象。请参考本网站的相关文章。
评论 (0)