探索Joomal插件顺序对执行结果的影响 原
Joomla的插件是按照顺序来执行的,插件使用的是观察者机制。同一个事件有多个观察者,那么观察者的顺序有时候非常的关键,直接决定了最终的效果。今天就遇到了一个和插件顺序有关的问题。
问题描述
有一个Joomla用户反馈,ZMAX媒体组件不能在自定义字段中自动替换媒体字段。客户使用Joomla的自定义字段功能,增加了身份证正面,和身份证反面的两个字段,这两个字段需要上传图。
做出的效果如下:
由于使用了ZMAX开发的媒体管理组件,文章的图片输入字段已经替换了,效果很好。如图:
因此客户期待的结果如下:
分析问题
通过对代码的分析,发现之所以在自定义字段中没有效果,主要是因为两个插件的顺序问题。
ZMAX媒体管理组件和自定义字段组件的实现实际上都是插件,这两个插件响应onContentPrepareForm 事件。媒体插件的工作原理是检查当前页面的表单所有的字段,如果这个字段的类型是media.那么就讲这个字段类型进行替换,使用ZMAX媒体管理的字段选择器代替系统的字段。而自定义字段这个插件的工作原理是检查当前页面的表单,为表单增加一些自定义的字段。
从上面的原理可以清楚的看到,如果媒体插件在自定义字段插件之前执行,那么后面由自定义字段添加的插件很显然不能被替换,这也就是问题的根源。因此,解决问题的关键就是保证媒体字段插件在自定义字段插件之前。
设置插件的顺序
在joomla中,无论是模块还是插件都有顺序。我们可以去到插件管理中,找到插件响应的事件,然后拖动插件,进行排序。如图:
版权声明:本站内容源自互联网,如有内容侵犯了你的权益,请联系删除相关内容。