Joomla的插件是按照顺序来执行的,插件使用的是观察者机制。同一个事件有多个观察者,那么观察者的顺序有时候非常的关键,直接决定了最终的效果。今天就遇到了一个和插件顺序有关的问题。

问题描述

有一个Joomla用户反馈,ZMAX媒体组件不能在自定义字段中自动替换媒体字段。客户使用Joomla的自定义字段功能,增加了身份证正面,和身份证反面的两个字段,这两个字段需要上传图。

做出的效果如下:

由于使用了ZMAX开发的媒体管理组件,文章的图片输入字段已经替换了,效果很好。如图:

因此客户期待的结果如下:

分析问题

通过对代码的分析,发现之所以在自定义字段中没有效果,主要是因为两个插件的顺序问题。

ZMAX媒体管理组件和自定义字段组件的实现实际上都是插件,这两个插件响应onContentPrepareForm 事件。媒体插件的工作原理是检查当前页面的表单所有的字段,如果这个字段的类型是media.那么就讲这个字段类型进行替换,使用ZMAX媒体管理的字段选择器代替系统的字段。而自定义字段这个插件的工作原理是检查当前页面的表单,为表单增加一些自定义的字段。

从上面的原理可以清楚的看到,如果媒体插件在自定义字段插件之前执行,那么后面由自定义字段添加的插件很显然不能被替换,这也就是问题的根源。因此,解决问题的关键就是保证媒体字段插件在自定义字段插件之前。

设置插件的顺序

在joomla中,无论是模块还是插件都有顺序。我们可以去到插件管理中,找到插件响应的事件,然后拖动插件,进行排序。如图:

 

作者: 樱木花道

Joomla程序员,从J1.5到J4.x始终都在做Joomla相关开发定制工作,有超过10年行业经验,国内Joomla扩展开发商ZMAX团队的核心成员

作者网站:ZMAX程序人

评论 (0)

  • 最新在前
  • 最佳在前