为什么每个Joomla网站构建者都应该学习插件开发
网站构建者,你们都知道这种情况;一个新客户对Joomla及其功能一无所知。他们想要一个新网站或Web应用,他们不在乎你使用什么CMS,他们需要它做一些非常具体的事情,一些定制的事情。
问题是,这个特定的功能不是由Joomla或JED上的扩展提供的“开箱即用”。事实上,这个功能如此定制,以至于这个问题的解决方案不太可能由JED上的扩展提供。
我的公司最近就遇到这个问题,一个客户需要我们以非常特定的方式验证新的网站注册和登录。
客户的组织有超过30,000名离线成员。他们每年为成员发放一张带有唯一会员代码的新会员卡。会员卡通过邮寄送达,他们使用这些卡在客户的商店获取“仅会员”优惠。
这一切都很顺利,直到他们决定是时候建立一个网站并为其业务增加一个在线维度。
Joomla拥有他们需要的所有功能,用户管理器、内容管理器、联系人管理器等,因此当他们都来我们这里建立网站时,我们很高兴地向他们提供一个新的Joomla网站。
特定功能
问题是,我们如何使用Joomla提供这种非常特定的注册/登录功能?我们如何确保只有持有唯一会员卡号的会员才能在网站上注册;我们如何在注册和登录时验证每个会员的特定会员代码号?
换句话说,我们不能让任何人都可以在网站上注册,只有持有唯一会员卡的会员才能注册。
常规网站构建者选项:搜索JED!
在JED上进行了广泛的搜索后,我们发现有一些解决方案接近我们需要的,但没有一个允许我们做到我们需要的。
另一个选择是构建一个定制的组件来管理所有成员,但由于Joomla的原生用户管理器足以处理成千上万的用户,并且是Joomla系统的原生组件,因此构建一个新的组件将过于复杂且耗时,这无疑是一个“重新发明轮子”的例子。
那么解决方案是什么?Joomla的插件系统允许您在不添加“核心破解”的情况下向CMS添加定制功能。
(核心破解是指开发人员更改Joomla库中的代码。这种做法曾经很常见,但现在强烈不建议。更改核心文件意味着您无法更新Joomla系统而不会覆盖您破解的文件,从而导致您网站上需要的功能中断)
活动
Joomla插件作用于Joomla执行周期中的“事件”。插件“监听”特定事件,当该事件发生时,触发功能。
有许多有用的“事件”供插件监听,其中一些与渲染内容有关(例如,在内容渲染之前或之后),其他与保存或删除内容有关——比如说,每次用户尝试在后台删除文章时都需要执行特定操作,我们可以使用插件来完成这项工作!
其他事件与系统有关;我们可以在Joomla执行周期开始之前执行操作——我们使用“onAfterInitialise”来完成这项工作。我们还可以在执行周期结束时执行操作等。
我们需要关注的插件事件是“用户”事件组。当用户首次注册、登录、登出等时,系统会触发这些事件,甚至在用户输入错误用户名或密码时,系统也有相应的事件。
(我希望在这个阶段,作为一名网站构建者,您的创造力正在迸发……想想为用户提供在登录网站时遇到麻烦时的定制功能……“onUserLoginFailure”事件将允许您这样做!这有多么令人惊叹!?)
Joomla插件开发的真正美妙之处在于,您不需要成为一名专家PHP开发人员就能掌握它。实际上,插件开发是通向整体Joomla开发的绝佳“入门途径”,因为它让您熟悉了大量有用的代码、函数和模式;所有这些在您转向模块和组件时都将非常有用。
在我们的定制用户插件案例中,由于用户名在Joomla系统中是唯一的,我们使用了语言覆盖来将“用户名”改为“会员代码”,然后使用“onUserBeforeSave”事件来检查用户输入的“会员代码”是否与预置的允许“会员代码”列表匹配。
这意味着只有使用有效的“会员代码编号”注册的人才能成功注册网站。
为此插件编写的代码总共19行PHP和大约30行XML。所以,用不到50行代码,我们就解决了一个巨大的定制问题,并允许Joomla执行特定功能。想想如果我们要构建一个具有相同功能的组件需要多少行代码!
从这个例子中可以看出,每个网站构建者都应该掌握插件开发。
对开始插件开发感兴趣?请参阅相关文章: https://magazine.joomla.net.cn/issue-may-2014/item/2029-introduction-to-plugin-development-for-site-builders
Joomla社区杂志上发表的一些文章代表了作者对特定主题的个人意见或经验,可能并不代表Joomla项目的官方立场
通过接受,您将访问 https://magazine.joomla.net.cn/ 外部第三方提供的服务
评论