如何开发一个Joomla插件 【转】

2024-01-16 02:38
文章标签 开发 插件 joomla

本文主要是介绍如何开发一个Joomla插件 【转】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 

作者:Andrew Eddile
翻译:warran
原文地址:http://developer.joomla.org/tutorials/184-how-to-create-a-joomla-plugin.html

 

 

介绍
Joomla插件可用作各种用途。插件为网站的输出页面增加了更多的表达方式,并且具有安装功能。

插件类型
尽管Joomla的插件类型几乎是无限多的。但他们有8个核心的类型。这些核心类型,分类存放在/plugins/目录,他们是:

  • authentication
  • content
  • editors
  • editors-xtd
  • search
  • system
  • user
  • xmlrpc

plugin_files

Authentication 插件允许你对不同的来源进行验证。当你登陆的时候可以通过Joomla的用户数据库进行验证。然而有很多其它的方式,也是可以的,例如:Google的 OpenID(开放式用户中心身份标识),LDAP(轻量目录访问协议)和很多其它的方式。无论哪种来源,有其开放API,你都可以写一个验证插件,以确 认登陆的身份。例如你可以写一个Twitter账户的验证插件,因为他们提供了开放API。

 

Content 插件用于在显示文章内容时改变或增加一些内容。例如content插件可以隐藏文章种的email地址,或者用自己的方式格式化URL地址。 content插件也可以在文章种搜索特定的标记,然后将他们替换为其它的文本或者HTML。例如在名为Load Module插件中,将会启动所有在banner1位置的模块,并且把{loadmodule banner1}标记,替换成他们的输出内容。

 

Editor 插件允许你增加新的内容编辑器(常用的有WYSIYWG)

 

Editor-XTD(扩展)插件允许你editor上增加某些功能按钮。例如现有的默认editor下的几个按钮:Image(增加图片),Pagebreak(插入分页符)和Read more(阅读全文)按钮。

 

Search 插件允许你在不同的组件,不同的文章中进行搜索。比如文章系统的search插件:Contacts 、Weblinks

 

System 插件允许你在Joomla站点的各个地方使用PHP代码执行各种动作。

 

User 插件允许你在不同的时候执行针对于用户的动作。包括登录时、登出时,还有存储用户数据的时候。用户插件中最典型的在不同web应用之间进行桥连接(bridge)。例如建立一个Joomla与Phpbb之间的桥连接。

 

XML-RPC 插件允许你为网站提供一个XML-RPC服务。当你的网站为其它应用程序(或许是个桌面应用程序)提供网络服务(web services)的时候,它为你提供了远程交互的能力。网络服务真的是一个高深的话题,这里没办法讲的太详细。

 

基础的文件
当然一个插件会有一些文件,其中有两个文件必须使用特定的文件名。当我们研究关于文件的内容时,首先我们必须确定插件的类型,他们必须是某种内置的文件类 型(authentication,content,editors,editors-xtd,search,system,user,xml- rpc)。或者你可以在/plugins/目录下建立个自己的目录,创建自己的某种插件类型。关于authentication的插件文件,需要放在 /plugins/authentication/目录下,system插件的文件放在/plugins/system/目录下,其它也一样。

让我们看下如何建立一个System类型的名为Test的插件的文件架构。插件文件的命名没有特别的规则(唯一要强调的是不要使用数字开头),但是一旦你决定 了文件名称后,插件的其它部分,需要遵守这个命名规则。

在这个插件中,首先建立一个PHP文件,test.php,用于Joomla进行载入。还需要建立一个XML文件,text.xml,在文件中,可以建立一些标识和插件的安装信息(同时也做为插件的参数)。

 

test.php文件源代码如下:

 
 

让我们仔细的看一下源代码。请注意,很多php文件中常见的内容呗省略了。

文件通过检查常量_JEXEC开始,用于确保文件不会被直接通过url引用。这是个很重要的安全点,并且这行代码必须放在文件的最前端。做这项安全检查是非常非常重要的。

 

下面我们使用了jimport函数载入了库文件中定义的JPlugin类。
你会注意到一个插件仅仅是一个继承自JPlugin的类。(这个不同于以前版本的Joomla)。类的命名规则是很重要的。


命名公式如下:
plg+插件目录+无扩展名的插件文件名。要将单词的首字母大写,类似于“Camel Case”。虽然PHP的类对大小写是不敏感的,但这样会增加代码可读性。
在我们的例子中,通过公式,我们得到类名为:
plg+System+Test=plgSystemTest

 

让我们再看一下类里的方法。

第一个方法,叫做构造函数,是不强制使用的。你可以把在Joomla载入插件后想做的事情写到里面。


在helper方法里,使用JPluginHelper::importPlugin(<plugin_type>)的时候,它就会被执行。这意味着,即使插件从来没出发过,你仍然可以执行构造函数里的代码。

 

在PHP4中,构造函数的名称必须与类名相同,如果你的程序仅仅想支持PHP5的化,你可以把方法名替换为__constructor。

 

剩下的方法将会体现出Joomla代码中触发事件的名字。在这个例子中,我们知道,它的名字是 onAfterInitialise,当某项应用(application)准备好后,它是第一个被调用的方法。
关于什么时候事件会被触发的更详细介绍请看文档中API执行顺序这篇文章。

 

这个命名规则很简单:方法名字必须与你要触发的事件名字相同。Joomla框架会为你自动注册类中的发法。

这是基本的PHP文件。它的位置,名字和方法依赖于你建立的插件的用途。有一点需要注意的是system插件不是仅仅处理系统事件。因为系统插件会在Joomla运行的每一个PHP文件中载入。你可以在一个系统插件中包含任意触发事件。
Joomla的触发事件包括:

 

Authentication

  • onAuthenticate

Content

  • onPrepareContent
  • onAfterDisplayTitle
  • onBeforeDisplayContent
  • onBeforeContentSave (new in 1.5.4)
  • onAfterContentSave (new in 1.5.4)

Editors

  • onInit
  • onGetContent
  • onSetContent
  • onSave
  • onDisplay
  • onGetInsertMethod

Editors XTD (Extended)

  • onDisplay

Seach

  • onSearch
  • onSearchAreas

System

  • onAfterInitialise
  • onAfterRoute
  • onAfterDispatch
  • onAfterRender

User

  • onLoginUser
  • onLoginFailure
  • onLogoutUser
  • onLogoutFailure
  • onBeforeStoreUser
  • onAfterStoreUser
  • onBeforeDeleteUser
  • onAfterDeleteUser

XML-RPC

  • onGetWebServices

关于如何创建特殊插件的介绍,请查看文档中的插件种类文章。

 

text.xml
test.xml的代码如下:

 
 

这是一个非常典型的XML标识文件的格式。让我们了解一下其中比较重要的标识(tags):


INSTALL
这个install标识,有几个关键属性。type的属性必须是”plugin”,并且要指定group属性。group属性需要设定为你的文件所在目录 的名字(例如system,content,etc)。我们使用method=”upgrade”,是因为要允许安装插件,而没有卸载功能。换句话说,如 果你与他人分享这个插件,你可以仅仅通过安装新的版本,去覆盖旧版本。

 

NAME
我们通常使用插件的属性开头,我们的例子中,插件是system属性的,并且带有一定的测试目的,所以我们将插件命名为:”System – Test”。你可以将NAME以任意方式去起。但通常是以这个格式去起的。

 

FILES
files标识包含了插件中将要安装的所有文件名字。插件同样支持安装子目录,所以还要指定所有文件夹的名称,<folder>test</folder>这是只有一个子目录时的例子,很像设置PHP文件的标识一样(当然没有扩展名)。

 

PARAMS
插件可以指定任意多数量的参数。请注意,就如同模块和组件中的参数一样,没有高级群组。(大概是指每个参数只能单独设置)

打包插件
打包插件非常简单。如果你只有两个文件(PHP文件和XML文件),只要将他们压缩为一个zip文件即可。如果有子目录,也一同压缩进去。

 

这篇关于如何开发一个Joomla插件 【转】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/611055

相关文章

使用Python开发一个带EPUB转换功能的Markdown编辑器

《使用Python开发一个带EPUB转换功能的Markdown编辑器》Markdown因其简单易用和强大的格式支持,成为了写作者、开发者及内容创作者的首选格式,本文将通过Python开发一个Markd... 目录应用概览代码结构与核心组件1. 初始化与布局 (__init__)2. 工具栏 (setup_t

Spring Shell 命令行实现交互式Shell应用开发

《SpringShell命令行实现交互式Shell应用开发》本文主要介绍了SpringShell命令行实现交互式Shell应用开发,能够帮助开发者快速构建功能丰富的命令行应用程序,具有一定的参考价... 目录引言一、Spring Shell概述二、创建命令类三、命令参数处理四、命令分组与帮助系统五、自定义S

Python通过模块化开发优化代码的技巧分享

《Python通过模块化开发优化代码的技巧分享》模块化开发就是把代码拆成一个个“零件”,该封装封装,该拆分拆分,下面小编就来和大家简单聊聊python如何用模块化开发进行代码优化吧... 目录什么是模块化开发如何拆分代码改进版:拆分成模块让模块更强大:使用 __init__.py你一定会遇到的问题模www.

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA

使用Python开发一个简单的本地图片服务器

《使用Python开发一个简单的本地图片服务器》本文介绍了如何结合wxPython构建的图形用户界面GUI和Python内建的Web服务器功能,在本地网络中搭建一个私人的,即开即用的网页相册,文中的示... 目录项目目标核心技术栈代码深度解析完整代码工作流程主要功能与优势潜在改进与思考运行结果总结你是否曾经

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis

Python基于wxPython和FFmpeg开发一个视频标签工具

《Python基于wxPython和FFmpeg开发一个视频标签工具》在当今数字媒体时代,视频内容的管理和标记变得越来越重要,无论是研究人员需要对实验视频进行时间点标记,还是个人用户希望对家庭视频进行... 目录引言1. 应用概述2. 技术栈分析2.1 核心库和模块2.2 wxpython作为GUI选择的优

利用Python开发Markdown表格结构转换为Excel工具

《利用Python开发Markdown表格结构转换为Excel工具》在数据管理和文档编写过程中,我们经常使用Markdown来记录表格数据,但它没有Excel使用方便,所以本文将使用Python编写一... 目录1.完整代码2. 项目概述3. 代码解析3.1 依赖库3.2 GUI 设计3.3 解析 Mark

利用Go语言开发文件操作工具轻松处理所有文件

《利用Go语言开发文件操作工具轻松处理所有文件》在后端开发中,文件操作是一个非常常见但又容易出错的场景,本文小编要向大家介绍一个强大的Go语言文件操作工具库,它能帮你轻松处理各种文件操作场景... 目录为什么需要这个工具?核心功能详解1. 文件/目录存javascript在性检查2. 批量创建目录3. 文件

基于Python开发批量提取Excel图片的小工具

《基于Python开发批量提取Excel图片的小工具》这篇文章主要为大家详细介绍了如何使用Python中的openpyxl库开发一个小工具,可以实现批量提取Excel图片,有需要的小伙伴可以参考一下... 目前有一个需求,就是批量读取当前目录下所有文件夹里的Excel文件,去获取出Excel文件中的图片,并