Joomla! 的扩展分:组件、模块、插件、模板
简单了解一下
组件(Component)
组件是Joomla!的一种扩展,是Joomla!的主要功能单元。大部分组件都包含administrator和site两部分,它们分别装在Joomla!根目录下的 administrator/components 和 components目录中。
当用户通过类似如下的http://example.com/index.php?option=com_<name>
的url请求页面时,Joomla!平台将试图加载组件文件components/com_<name>/<name>.php
。在该文件中,可以决定:直接返回HTML代码,还是使用模型-视图-控制器(MVC)模式。
组件的控制流程见 Component_Program_Flow 。
Old-Flat-Model(直接返回HTML代码)
假定我们创建一个名为 hello 的组件,在网站components目录下创建 com_hello 子目录,在该目录下创建一个 hello.php 的文件,该文件内输入
1 |
|
而后创建一个空的 hello.xml 文件。这样,一个简单的组件就完成了,在 扩展=》扩展管理器=》检测 中点击检测按钮。即可发现该组件。
1 2 3 |
|
组件后台
在网站 administrator/components/com_hello目录下创建 hello.php 文件,内容简单包含
1 |
|
该页面通过 administrator/index.php?option=com_hello
访问
安装包
如果不是直接放置在网站目录下让jommla!去检测,而是直接制作安装包
1 2 3 4 5 6 7 8 |
|
关键的是一个名为 hello.xml 的文件,内容大致如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
注:一般子目录下都会放置一个空的index.html的文件,以避免用户看到目录下内容。
关于该xml文件的信息,见Manifest_files
MVC模式
Joomla!3 第三方组件通常都分为三部分:模型、视图、控制器。 基本结构:
1 2 3 4 5 6 7 8 9 |
|
现在网上的例子基本上都是 JControllerLegacy/JViewLegacy/JModelLegal,它们都加了Legal,说明有更新的和推荐的替代品: JControllerBase/JViewBase/JModelBase。
url | |
---|---|
index.php?option=com_<name> |
Joomla!将加载 components/com_<name>/<name>.php |
index.php?option=com_<name>&view=<myview> |
Joomla!会导入components/com_<name>/views/<myview>/view.html.php ,默认<name> |
index.php?option=com_<name>[&task=<mytask>] |
默认Task是display |
index.php?option=com_<name>&format=pdf |
默认Format是html |
东西太多了,本文跳过
参考
- https://docs.joomla.org/Portal:Component_Development
- https://docs.joomla.org/Absolute_Basics_of_How_a_Component_Functions
- https://docs.joomla.org/J3.x:Developing_a_MVC_Component/Developing_a_Basic_Component
- https://docs.joomla.org/J3.x:Developing_a_MVC_Component/Adding_a_view_to_the_site_part
- ...
模块(Module)
模块用来在页面的某部位添加一些内容。在典型的页面中,它们通常是围绕组件的方盒子,比如Login Form等。
简单的组件通常包含4个文件
1 2 3 4 5 6 |
|
mod_mymodule.php
是模块的入口,mod_mymodule.xml
包含安装信息以及配置参数信息等。
参考
- https://docs.joomla.org/Portal:Module_Development
- https://docs.joomla.org/J3.x:Creating_a_simple_module/Developing_a_Basic_Module
插件(Plugin)
插件是Joomla!的一种扩展,它提供与事件相关联的函数功能。Joomla提供了一套核心的插件事件,但是其他扩展也可以发射(fire) 自定义事件。当某一个特定事件发生时,所有与该事件关联的插件函数都会被依次调用。Joomla插件架构遵循观察者模式。
子类化 JPlugin
1 2 3 4 5 6 7 8 9 |
|
而后 创建一个安装文件
1 2 3 4 5 6 7 8 9 10 |
|
里面关键的是extension 中的group属性,以及 files 中的 filename。
参考
- https://docs.joomla.org/Portal:Plugin_Development
- https://docs.joomla.org/Administration_of_a_Plugin_in_Joomla
- https://docs.joomla.org/Creating_a_Plugin_for_Joomla
- https://docs.joomla.org/Plugin_Developer_Overview
- https://docs.joomla.org/Plugin/Events
模板(Template)
参考
- https://docs.joomla.org/Portal:Template_Development
- https://docs.joomla.org/Understanding_Joomla!_templates
语言包(language package)
只关注非核心扩展的语言包。
在Joomla!1.5之前,通过安装文件中的languages元素进行安装
1 2 3 |
|
这将会把扩展的语言文件安装进Joomla!的核心语言文件存放位置:Joomla根目录下的language或administrator/language。
该做法在3.x中仍然被支持,但推荐将语言文件和扩展的其他文件直接放一块,目录结构有一定要求
1 2 3 4 |
|
注意:语言文件保存成不带BOM的UTF8格式
参考
- https://docs.joomla.org/Making_a_Language_Pack_for_Joomla_3.x
- https://docs.joomla.org/Creating_language_packs_for_extensions_in_Joomla_2.5
- https://docs.joomla.org/J2.5:Making_non-core_language_packs
- https://docs.joomla.org/Specification_of_language_files
- https://docs.joomla.org/Creating_a_language_definition_file
其他
- https://docs.joomla.org/Manifest_files