Joomla!

Joomla!是一套自由、开放源代码的内容管理系统，以PHP撰写，用于发布内容在万维网与内部网，通常被用来搭建商业网站、个人部落格、资讯管理系统、Web 服务等，还可以进行二次开发以扩充使用范围。其功能包含可提高效能的页面快取、RSS馈送、页面的可打印版本、新闻摘要、部落格、投票、网站搜寻、与语言国际化。Joomla!是一套自由的开源软件，使用GPL授权，任何人随时都能下载 Joomla! 并立即使用它。

## 历史

Joomla!在2006年与2011年皆获得Packt颁发的最佳开源内容管理系统奖。

第一个发行版本的Joomla! (1.0.0)发布 于 2005年9月16日。是由Mambo 4.5.2.3版加上安全性修正后所分支发展的版本。

Joomla! 1.5 (2007年)则以全新的 MVC 框架为基础完全重写程式码，是当时少数同时兼容 PHP4 与 5 的大型应用程序。

Joomla! 1.6 (2011年)再度以 PHP 5 为基础大幅度更改框架系统，加入ACL权限控管、更新机制、多层次分类并内建多国语系等等，替开发者提供了更强大的开发流程。

Joomla! 1.7 (2011年)开始抽出框架层，将 CMS 与核心框架分离，提供未来更多的更新空间。此时期的框架层开始支援 PHP CLI 命令列程式与 Daemon 守护进程编写、并能够独立开发Web应用程序。

Joomla! 2.5 (2012年)开始支援多种数据库，并提供更多核心功能的升级，使得2.5成为长期支援版(LTS)，是3.x以前最稳定、使用数量最多的版本。

Joomla! 3.0 (2012年)引入Twitter Bootstrap，并组成 JUX 小组，全面升级系统的前后台UI机制，除了提供大量开发前端工具外，搭配全新设计的isis后台，让Joomla!成为世界第一套内建行动版后台的内容管理系统。

Joomla! 3.1 (2013年)加入标签功能(Tags)进入到核心标准，除了内建文章外，第三方扩充套件也可以自由使用全新的标签功能，并且移除了年久失修的程式码高亮度外挂。

Joomla!Framework (2013年)全新的 Full-Stack Web 开发框架，摆脱 CMS 束缚，提供更多新标准如 HMVC, Lazy Loading, PSR coding standard, PHP namespace, Autoloader, RESTful 等等。

Joomla! 3.2 (2013年)加入文章版本控管与线上 App store 功能，现在可以从网站后台直接下载安装扩充套件。除此之外 CMS 部分开始支援 PSR-0，开发者将能够更轻易整合目前流行的函式库。

Joomla! 3.4(2015年二月) 正式版发布，提供更强大的后台UI，并逐步将核心轻量化，部分核心元件能够移除或者事后再安装。

Joomla! 3.5 (2016年三月) 开始支援 PHP7，提供自动更新通知，强化安全性，并进一步加强了许多后台 UX。

Joomla! 3.6 (2016年七月) 进一步强化后台 UX，能够更方便的管理选单与分类内容，也提供开发者更便利的表单API。

Joomla! 3.7 (2017年四月) 加入社群期待已久的自订字段功能，从核心提供 CCK 应用的基础，也支援拖拉上传安装扩充建套件，自订后台选单等等大量操作流程强化。

Joomla! 3.8 (2017年九月) 提供数个核心改进，例如更现代化的路由系统、最先进的 Sodium 加密算法，还有大量核心程式码的升级。最重要的是开始加入未来 Joomla! 4 的相容中介层，提供第三方应用迁移的准备时间。

Joomla! 3.9 (2018年十月) 发布3.9.0版本，原本3.9是作为4.x与3.x版本的最后缓冲版本，但为了修改系统核心以支援GDPR规范，3.9成为独立的Joomla!版本。

## 发展路线

目前的 Joomla! 3.x 皆为 STS 短期支援，预计最近的一版 LTS 长期支援版会是 3.5。Joomla! 4 则预计将移除许多 PHP 5.2 时代的残留程式码，整合前后台 Application 为单一入口，并导入 Composer 与 PSR 等目前流行的先进开发技术。而从 Joomla! 3.x 开始加入的 UCM (Unified Content Model) 统一内容模型将成为往后版本建立 CCK 应用的基础。

Joomla!从2014年4月25日停止分为LTS、STS长短期支援的模式，以求能够更快的更新系统、加入新的技术，不受LTS的制约，自Joomla!3.3之后，每一个第二位版号都是稳定版本，并代表着系统的修改，生命尽头在下一位版号发布，如3.4版之后就终结3.3版生命周 期，第三位版号代表的是更新修正档发布，而第一位版号代表的是大幅度的调整更新。

3.8 至 3.9 是 3.x 系列的最后两个版本，除了大量将原有程式码升级到最现代化的水准之外，也开始提供相容未来 Joomla! 4 的中介层。

因为GDPR的原因，3.9成为独立的发布版本，4.x版本的时间则向后推延。直到2019/09/21发布的版本为3.9.12，发布原因为漏洞修补。

3.10将成为3.x系列的最后一个版本，单纯为Joomla! 4.0的降阶版本，作为3.x过渡到4.x的缓冲，给予Joomla!网站管理员测试并升级4.0版本的过度。预期3.9.10将与Joomla! 4.0同时发布。

Joomla! 4 是下一代Jomla!的版本，作为第一位版本号，Joomla!核心与界面都将有大幅度的变动，主要特点是改用 Bootstrap4、 Frameworks 2.0 并加入大量现代化前端技术如 Web component、CSS Grid 与 Flex box 等，因此将放弃对旧型浏览器的支援度。另外核心程式码也经过大量改写，全面采用现代化 PHP 的开发标准，是自 1.6 以来最大的核心更动。且Joomla! 4 的php版本最低要求为 PHP 7.0，这是因为PHP 7.0提供了更好的运作效能，且为了能够继续朝向未来的发展方向靠拢。Joomla! 4.0最新的开发版本为2019年8月19日发布的4.0.0 Alpha 11，预期将于2019年末或者2020年初发布4.0 Bata，2020下半年度Joomla! 4.0正式发表。

## Joomla! 名称的由来

Joomla!来自斯瓦希里语的英文串法，意思是“all together”或“as a whole”。

它不单纯只代表内容管理系统，而是一个品牌名称。除了 Joomla!CMS 以外，另外还有 Joomla!Platform 与 Joomla!Framework 等相关的开源Web框架专案正在进行中。

### 其他

在2010年4月，微软签署了 Joomla!的贡献者协议（Joomla! Contributor Agreement）。

提供WinCache这个针对在IIS下的PHP快取加速器。

## 架构

- 框架层

Joomla!Platform 与 Joomla! Framework。以上两者的框架层已支援 PSR-0, HMVC, RESTful 等现代标准。而 CMS 因为历史包袱仅支援Legacy模式的功能，暂时还无法发挥框架层的全部特色。

- 函式库

PHPMailer, Simple Pie等等

- 应用层

前后台各自为延伸自框架层的实体应用程序 (Application)，并共用资料表。

- 扩充套件 (Extensions)

分为元件(Component)、模组(Module)与外挂(Plugin)三种型式，核心功能如内容管理、媒体管理、选单系统皆是扩充套件的一环。每个元件皆采 MVC 架构开发，并由应用层的Router依据网址的约定原则指向到不同的元件管理页面。

- 显示层

支援 HTML, XML, JSON, Feed 等多种形式的显示格式，用来面对不同类型的应用。

- 模板

采用自制的模板引擎，并提供元件与模组的覆盖输出，可以在模板中借由增加程式档案的方式轻易取代内建显示画面，而无须Hack源代码。

- 前端工具

集成 MooTools, jQuery, jQuery UI, , LESS与IcoMoon等前端辅助框架或工具，方便设计师设计功能强大的UI

## 数据库支援

至2013年推出的3.1版为止，Joomla!已支援5种数据库，分别是:

- MySQL
- Oracle
- PostgreSQL
- SQL Server
- SQLite (目前仅框架层支援)

## 网站服务器支援

目前Joomla!直接支援的服务器软件为Apache与IIS，除此之外经过简单配置也可以运行在nginx与Lighttpd上。

## 相关

- 内容管理系统列表

## 外部链接

- https://www.joomla.org - Joomla!官方网站
- Joomla! Framework - Joomla@ 框架官网
- 台湾 Joomla! 社群 - Joomla!中文官方网站
- /Computers/Programming/Languages/PHP/Scripts/Content_Management/Joomla/
- 华灯初上 - Joomler 李顺能 (郭顺能) 建立的 Joomla! 资讯网站

IRC

- #joomla

## 基本资料

- 源代码库：https://github.com/joomla/joomla-cms
- 网站：https://www.joomla.org