官方系列教材 - Joomla模块开发教程

介绍在如何从0开发一个模块

上一节已经成功的安装了模块,在这一节,我们将介绍如何写代码来实现业务逻辑。

实现思路

我们模块的目标是实现滚动图片新闻模块,选择系统的文章作为数据源,让管理员选择一个文章分类,然后读取这个分类里面的所有文章,剩下的就是前台展示问题了。要完成这个事情,需要做两件事,第一在后台提供一个选择分类的表单,第二个就是通过查询数据库获得指定分类中的文章。下面就看如何解决这两个问题

增加配置参数

首先为了给后台的管理界面增加选择分类的配置参数,我们修改了mod_zmaxslidernews.xml这个文件,在之前的fieldset节点下面增加了一个field节点。代码如下:

<?xml version="1.0" encoding="utf-8"?>
<extension type="module" version="3.0" client="site" method="upgrade">
	<name>滚动图片新闻模块</name>
	<author>ZMAX程序人</author>
	<creationDate>2022-10-01</creationDate>
	<copyright>Copyright (C) 2005 - 2022 南宁市程序人软件科技有限责任公司. All rights reserved.</copyright>
	<license>GNU General Public License version 2 or later; see LICENSE.txt</license>
	<authorUrl>www.zmax99.com</authorUrl>
	<version>0.0.2</version>
	<description>将指定分类的文章用滚动图片新闻的方式来展示</description>
	<files>
		<filename module="mod_zmaxslidernews">mod_zmaxslidernews.php</filename>
		<filename >helper.php</filename>
		<folder>tmpl</folder>
	</files>
	<config>
		<fields name="params">
			<fieldset name="basic" >
				<field 
					name="catid"
					type="category"
					extension="com_content"
					label="选择分类"
					description="当前分类的文章将会已滚动图片新闻的方式来展示"
					/>
			</fieldset>
		</fields>
	</config>
</extension>

做完了这些,如果你此时重新打包并且安装模块(也可以直接修改安装好的模块的xml文件),就会看到管理界面出现的配置选项了,模块的所有的配置参数存储为json格式,由系统自动维护。在上面我们使用了category这种字段类型,以方便管理员设置需要展示的分类。更多关于表单字段的用法,大家可以参考本站的Joomla开发手册中的表单字段章节,在这里就不做展开了。后台截图如下:

这样我们就完成了提供参数设置了。

获得文章列表

在模块开发中,一般我们将helper.php作为模块的模型文件,所有的和数据库的交互一般都会在helper.php中完成,入口点文件只是简单的调用这个文件中的方法来获得数据。修改了helper.php文件,代码如下:

defined('_JEXEC') or die;

class ModZmaxslidernewsHelper
{
	static function getItems($params)
	{
		//STEP 1:获得设置的分类id
		$catid = $params->get("catid",0);
		
		//STEP 2:查询数据库,获得文章列表
		$db = \JFactory::getDBO();
		$query = $db->getQuery(true);
		$query->select("id,catid,title,alias,images")->from("#__content");
		$query->where("catid=".$db->quote($catid));
		$db->setQuery($query);
		$items = $db->loadObjectList();
		return $items;
	}
}

关于以上代码的说明

1,ModZmaxslidernewsHelper 这个类名是任意取的,但为了方便阅读,我们一般会约定其规范如下:

  class mod + 模块的名称 + Helper

所有类的命名建议采用驼峰式。这是规则,记住就行了。 

2,如何获得后台的设置参数?

模块的配置参数由系统进行存储,当模块类实例化的时候,系统会将后台的设置参数 注入到插件中,在上面我们实际上实现的是一个静态的getItems方法,这个方法需要提供一个参数,一般是模块的后台设置,这是一个JRegitry对象,提供了setget方法来对设置参数进行操作。get方法接受两个参数,一个是属性名,一个是默认值。更多关于JRegirstry类的用法,可以查看本站的相关文档。在上面我们调用了$params->get("catid",0);获得了后台设置的文章分类

3,数据库的操作

	//STEP 2:查询数据库,获得文章列表
		$db = \JFactory::getDBO();
		$query = $db->getQuery(true);
		$query->select("id,catid,title,alias,images")->from("#__content");
		$query->where("catid=".$db->quote($catid));
		$db->setQuery($query);
		$items = $db->loadObjectList();

 上面代码是非常典型的joomla数据库查询方法,使用非常的方便,首先通过工厂获得数据库对象,然后通过数据库对象获得一个查询对象。joomla默认对sql查询语句做了封装,基本上每一个常用的sql的关键词都对应joomla的同名方法,更多关于数据库的使用,可以查看本站相关的教材。

模块的入口点文件

在Joomla中,模块的执行入口是从入口点文件开始,在入口点文件中,主要完成两件事,第一就是调用helper.php这个模型文件获得数据,然后加载tmpl下面的模板文件,将模型的数据注入到tmpl/default.php这个模板文件中。修改后的入口点文件zmaxslidernews.php文件,代码如下:

defined('_JEXEC') or die;

\JLoader::register('ModZmaxslidernewsHelper', __DIR__ . '/helper.php');
$items = ModZmaxslidernewsHelper::getItems($params);
if(!$items || empty($items))
{
	return ;
}
require JModuleHelper::getLayoutPath('mod_zmaxslidernews', $params->get('layout', 'default'));

上面的代码是通用的模块入口点代码,基本上所有的模块入口点文件都一样。首先加载helper.php文件,然后调用模型里面的getItems方法获得数据,最后加载默认的模板文件。

注意,在入口点文件中平白多出了$params这个变量,$params是系统自动注入的,每一个模块都有,代表了模块的后台参数。 

模块的模板文件

tmpl目录下的default.php文件就是模块的模板文件,也就是入口点文件中 require JModuleHelper::getLayoutPath('mod_zmaxslidernews', $params->get('layout', 'default')); 的作用。为了便于演示,我们在模板中将模型数据简单的打印出来。default.php代码如下:

<?php
defined('_JEXEC') or die;
echo "<pre>";
	print_r($items);
echo "</pre>";
?>
<h1>Hello Joomla module!</h1>

发布模块,测试效果

将以上代码重新打包称一个zip文件,然后重新安装,进行测试。如何在前台展示模块,请查看本站相关的教材,在此不在展开。下面是模块在前台展示的截图:

这样从后台设置到前台内容输出我们就完成了。剩下的就是通过css和js来完成我们需要的效果。由于本篇篇幅过长,将在下一节中继续。

更多

[下载文件:]mod_zmaxslidernewsv0.0.2_2022-10-02_for_j4x.zip

作者: 樱木花道

Joomla程序员,从J1.5到J4.x始终都在做Joomla相关开发定制工作,有超过10年行业经验,国内Joomla扩展开发商ZMAX团队的核心成员

作者网站:ZMAX程序人

评论 (0)

  • 最新在前
  • 最佳在前