Joomla(4) 创建Modules ,模块开发

简介

模块是页面扩展轻量级方式,相对组件更为灵活。模块通常用来做页面中不太复杂的一小块,并且能够跨越不同的组件。

 Joomla 的标准安装后,你可以看到许多模块的例子,菜单,最新新闻,登录框等等

这个教程阐述如何编写一个简单的 Hello world 模块,通过这个教程,你可以学到一个模块的基本文件结构。而通过基本机构可以扩展生成更为复杂的模块。

 

文件架构

标准的模块开发共有四个基本文件:

mod_helloworld.php - 模块的主入口,主要执行一些必须的初始化工作,调用 helper 或缺必要的数据,并引入模板。

mod_helloworld.xml - 这个文件主要包含模块的信息,主要定义安装时必须的文件以及模块的参数。

helper.php - 这个文件包含 helper 类,这个类主要用来获取模块要显示的信息(通常是从数据库或其他的源)

tmpl/default.php - 模块的模板,这个文件采用 mod_helloworld.php 返回的数据生成页面要显示的 html

 

创建 mod_helloworld.php

mod_helloworld.php 主要进行以下工作:

引入 helper.php 文件helper.php 文件包含是获取必要数据的类调用合适的 helper 类,并返回数据。

helper 类在helper.php 中定义,这个文件通过 require_once 声明来引入:

require_once __DIR__ . '/helper.php';

我们的 helper 类现在还没定义,但是以后你可以看到,包含一个方法 getHello()。对于我们这个简单的例子,这样做并不是必须的,因为这个方法返回的信息“Hello, World”可以直接简单的包含在模板中。

我们的模块现在没有用到参数,但是为了以后扩展模块的时候方便,我们把参数传递给helper的方法。

helper 类的方法用以下的方式调用:

$hello = modHelloWorldHelper::getHello( $params );

完整的 mod_helloworld.php 文件


<?php

/**

* Hello World! Module Entry Point

*/

// no direct access

    defined( '_JEXEC' ) or die( 'Restricted access' );

// Include the syndicate functions only once

    require_once( dirname(__FILE__).DS.'helper.php' );

    $hello = modHelloWorldHelper::getHello( $params );

    require( JModuleHelper::getLayoutPath( 'mod_helloworld' ) );


我们还没有解释第一行,第一行主要是定义这个文件属于一个 Joomal 应用,并用来防止注入和其他潜在的风险。

 

创建 helper.php

helper.php 这个文件包含 helper 类,这个类主要用来获取模块要显示的数据。我们已经说过,现在这个 helper 类只有一个方法 getHello(),这个方法返回‘Hello, World

以下是 helper.php 的代码:

<?php

/**

* Helper class for Hello World! module

*/

class modHelloWorldHelper

{

/**

* Retrieves the hello message

*

* @param array $params An object containing the module parameters

* @access public

*/

function getHello( $params )

{

return 'Hello, World!';

}

}

没有对定我们必须这样命名我们的 helper 类,但是这样命名有利于我们找到和统一。

一些复杂的模块可以在 helper 的方法中包含数据库请求和其他功能。

 

创建 tmpl/default.php

default.php 是模板文件,他的代码如下

<?php // no direct access

defined( '_JEXEC' ) or die( 'Restricted access' ); ?>

<?php echo $hello; ?>


注:模板文件和 mod_helloworld.php 是同一个变量作用域,也就是说,在mod_helloworld.php 中定义的变量 $hello 可以直接在模板文件中使用,而不必额外的声明或者函数调用。

 

创建 mod_helloworld.xml

mod_helloworld.xml 主要是用来指定那些文件安装时候要拷贝以及告诉模块管理器那些蚕食用来配置模块,同样也指定模块相关一些其他信息。

mod_helloworld.xml 代码如下:


<?xml version="1.0" encoding="utf-8"?>

<install type="module" version="1.5.0">

<name>Hello, World!</name>

<author>John Doe</author>

<version>1.5.0</version>

<description>A simple Hello, World! module.</description>

<files>

<filename module="mod_helloworld">mod_helloworld.php</filename>

<filename>index.html</filename>

<filename>helper.php</filename>

<filename>tmpl/default.php</filename>

<filename>tmpl/index.html</filename>

</files>

<params>

</params>

</install>

 

index.html  tmpl/index.html

你可能注意到了有两个附件文件 index.html  tmpl/index.html. 这两个文件主要是浏览目录的时候显示这两个文件,而不是显示目录下的文件结构。这两个文件仅仅包含一行:


<html><body bgcolor="#FFFFFF"></body></html>


就是一个空白页面。因为我们的模块没有参数,所以 xml 文件中这部分没有


安装模块

首先,把mod_indexnews文件夹压缩成后缀为.zip格式的压缩包;

其次,登录joomla后台管理->扩展-> 扩展管理->安装;
注:浏览上传压缩包mod_indexnews.zip时,如果报错,按如下处理:扩展->插件管理,把System - Legacy插件启用(一般不会报错,主要是由于版本交替引起)

最后, 到扩展->模块管理,就可以看到添加模块,把名字改为中文“****”


模块在Components下的引用

方式一:
$modName  = ‘ mostread ’; // not mod_mostread ,即不用mod_的前缀;

    <?php

        $modules = JModuleHelper:: getModule($modName);

        $module = JModuleHelper::renderModule($modules);
    ?>

    <div class=""><?php echo $module; ?></div>



结论:

Joomla 的模块开发是一个非常简单明了的过程,使用本教程中的技术,简单的变化能生成无尽的模块。









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值