joomla1.5模块开发和插件开发详解带实例
这是一个模块和插件开发实例详解文档,模块实现的是图片幻灯片方式切换,图片是自带的banner组件管理器来管理,对于图片可以只显示某一个分类下面的,切换方式可以选择多种,插件就是实现如何过滤文章中出现的email,凡是写了email的就自动过滤.从分析来看,是没有什么难度的,这里主要是开发的步骤,我在这里从开头到一个开发,打包成可以供所有joomla安装的zip文件为止,算是一个功能完成.
1.建立模块文件结构,样式如下图的文件结构
Mod_banner模块文件夹,所有模块必须以mod_为前缀.banner就是模块名称
Images文件夹,用来放样式中用的图片还有模块所需的jquery库,jquery插件,减少文件夹数量,就不单独建文件夹了.
Tmpl 模块模版文件夹.
Default.php 模版显示样式文件,必须的文件.
Index.html 防止文件直接被调用,用于安全考虑.
Helper.php 功能实现文件,里面主要写功能实现.
Index.html 防止文件被直接调用,所有模块文件夹,子文件夹都应该加上这个文件.
Mod_banner.php 模块入口文件,必须的文件
Mod_banner.xml 参数配置和打包安装文件
2.文件建立好以后,先来写xml这个文件吧,内容如下:
//后边是注释
<?xml version="1.0" encoding="utf-8"?>
<install type="module" version="1.5.0">
<name>Banner Change</name>//模块显示名称
<author>Yoby</author>//作者
<creationDate>2012 07</creationDate>//创建日期
<copyright>Copyright (C) 2012 - 2020 Open Source Matters. All rights reserved.</copyright>//版权
<license>http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL</license>//软件协议
<authorEmail>logove@qq.com</authorEmail>//作者邮箱
<authorUrl>www.joomla.org</authorUrl>//插件连接地址
<version>1.5.0</version>//插件版本
<description>Banner Change Module !</description>//模块功能描述
<files>//用来描述模块的所有用到的文件,在安装的时候根据这个来复制到模块对应路径
<filename module="mod_banner">mod_banner.php</filename> //文件
<filename module="mod_banner">helper.php</filename>
<filename module="mod_banner">index.html</filename>
<folder>tmpl</folder> //文件夹,子文件和文件夹不用再次描述
<folder>images</folder>
</files>
<params addpath="/administrator/components/com_banners/elements">//模块配置参数,addpath是用来加载组件里面定义的表单元素,这里是广告的分类
<param name="change" type="list" default="0" label="Change Mode">//list列表类型表单元素,这里是广告切换样式,有3种默认,数字样式,按钮样式
<option value="0">Default</option>
<option value="1">Number</option>
<option value="2">Button</option>
</param>
<param name="changetime" type="text" default="3000" label="Change Time (ms)"/>//文本框类型,这里是 切换时间,微秒,1000为1秒
<param name="adnumber" type="text" default="4" label="AD Number"/>//广告显示数量
<param name="catid" type="category" section="com_banner" default="" label="Category" />//广告分类,这里用到了banner组件的广告分类
<param name="width" type="text" default="468" label="AD Width"/>//显示广告宽度
<param name="height" type="text" default="60" label="AD Height"/>//显示广告高度
<param name="moduleclass_sfx" type="text" default="" label="Module Class Suffix"/>//模块显示样式附加类
</params>
<params group="advanced"> //高级配置,一般模块都加上这个配置参数,保持和官方一样标准
<param name="cache" type="list" default="0" label="Caching" description="Select whether to cache the content of this module"> //是否使用缓存
<option value="1">Use global</option>
<option value="0">No caching</option>
</param>
<param name="cache_time" type="text" default="900" label="Cache Time" description="The time before the module is recached" />//缓存时间
</params>
</install>
3.mod_banner.php文件和helper.php文件编写
Mod_banner.php是入口文件,模块就是从这里执行的,
第一行代码 defined( '_JEXEC' ) or die( 'Restricted access' );
这是为了防止文件被其他程序随便调用,出于安全考虑,所有joomla组件插件模块等php文件都应该开头写上这一行代码.
第二行代码 require_once (dirname(__FILE__).DS.'helper.php');
加载helper.php功能文件,里面定义了这个模块所实现的功能,主要是数据处理,最后返回数据处理结果.
第三行 $list = modBannerHelper::getList($params);
这里是返回helper.php里面函数 getlist结果,这里是广告数据
不一样的模块,这里可以写不同的返回结果,
最后一行,require(JModuleHelper::getLayoutPath('mod_banner'));
通过助手类提供的函数加载模版,必须这样写,参数就是模块名称.
每个组件的入口文件至少包括第一行,最后一行.
第二行只有用到助手文件才需要写.
第三行可以根据实际功能来写,还可以添加更多代码来实现.
Helper.php文件是一个类,
定义格式
class modBannerHelper{
function custom(){
//content
}
}
里面的方法就是用来做数据处理或功能的,返回值供模版使用.
4.default.php,模块模版文件,主要就是前台显示布局,有些模块把所有的功能处理也写在这里,这个文件是模块必须的,一般混写HTML和PHP代码.
5.总结模块开发:
A.模块配置在xml文件中定义,在helper.php或default.php中调用,通过$params->get('custom')读取配置参数在程序中应用.
B.数据处理中的数据库连接步骤;
$db = JFactory::getDBO(); //建立数据库连接
$query = "select * from #__table"; //SQL查询语句
$db->setQuery($query); //执行查询
$rs = $db->LoadObjectList();//得到结果集对象
C.对建立好的模块压缩成zip文件,就得到了标准模块.
6.截图
后台参数说明,
change module显示样式切换,有三种;
change time自动切换时间,默认3s;
ad number设置广告数量,对于数字有效;
item类别,不选择就是所有广告类;
Ad width,广告宽度,尽量和图片宽度一样
Ad height,广告高度;
Css,这里可以用一个类来些样式
高级参数是设置缓存和时间的.
前台样式图,三种
文章内容邮箱地址过滤插件开发过程:
1.定义插件文件,分别是插件文件filter.php和安装配置文件filter.xml.
2.先来写配置文件,基本上joomla配置文件都有相似的地方,内容如下
<?xml version="1.0" encoding="utf-8"?>
<install version="1.5" method="upgrade" type="plugin" group="content">//定义插件为content
<name>Filter</name>//插件名字
<creationDate>2012-07-31</creationDate>//插件日期
<author>Yoby</author>//作者
<authorEmail>baixy@bodait.com</authorEmail>//邮箱
<authorUrl>http://www.baidu.com</authorUrl>//网址
<copyright>Copyright (C) 2012 Open Source Matters. All rights reserved.</copyright> //版权
<license>GUN</license>//软件协议
<version>1.0</version>//软件版本
<description>This is filter email plugin !</description>//描述
<files>
<filename plugin="filter">filter.php</filename>//安装文件,还有其他的都需要列出来
</files>
<params>//配置参数列表,本插件没有用到,但是预留一个id
<param name="exid" type="text" default="" label="ID" description="description" />//#文本框
</params>
</install>
基本上一个配置安装文件就完成了.接着是定义插件,内容模式如下:
defined('_JEXEC') or die;//防止其他程序加载
$mainframe->registerEvent('onPrepareContent', 'plgContentFilter');//注册一个事件,这里的onPrepareContent是输出文章之前触发事件
function plgContentFilter(&$row, &$params, $page=0) //触发的函数
{
if (is_object($row)) {//判断是否是对象记录集
return plgFilter($row->text, $params);
}
return plgFilter($row, $params);
}
function plgFilter(&$text, &$params)
{
$text = preg_replace("/\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/",'',$text); //正则替换邮箱为空
return true;
}
3.将这两个文件压缩成zip格式,不需要文件夹,直接压缩,然后就可以安装了.截图如下
后台编辑带有邮箱文章
前台显示自动替换掉了邮箱
最后附上文件树形结构图;内容中代码没有使用编辑器,需要代码插件的下载附件吧.包括开发文档哦.
最详细的开发文档,例子说明一切,还有注释,只适合新手,牛人绕行!
by Yoby编辑