最近工作,需要整合网络上流行的Flash和JS相册,因为每个客户要求的相册展示不尽相同,如果每来一个客户,安排人手定制,这样的工作是浪费时间和精力的,并且复用性不强,每次需要定制。
(由于公司是SAAS类型的公司,网站特别多,是一个站群,所有的网站是通过不同的websitePK来标识区分的,模板需要有通用性和动态生成)
于是,我的工作就是做这样的一个整合功能模块。(后台管理就不说了,主要通过读取flashalbum-config.xml来存储当前选择的模板)
先说说Flash相册,由于网络上流传的源码读取Image的方式各不相同,写死的我们肯定不要,所以选择xml形式的Flash源码。(每个xml的结构还都不一样,我们是不可能去改程序,太费劲)
实现方法:首先写一个接口文件,定义数据的读取方式。然后针对每个Flash模板,写个类来拼接该相册xml组合格式。最后写个生成源码的类,动态生成HTML源码。
首先定义接口文件:
再定义一个抽象类,实现相册查询功能:
有了如上架构,对于每个Flash相册模板,只需要写一个类Inherit 该抽象类,并实现其抽象方法getAlbumData()即可。
下面是一个Flash相册模板的示例接口:
最后,给需要使用到Flash的外界一个开放的接口类,返回Flash的HTML代码。(即根据该站设置的相册模板识别动态生成HTML代码)
这里是目录结构:
/templates 是所有模板的存放位置
flashablum-config.xml 每次安装模板需要配置改文件,包括相册的最佳宽高、php接口文件路径、swf文件等。
getalbum.php 是对外接口类。
对于JS模板的生成,由于他不像Flash那样在浏览器端通过php接口文件读取xml信息。
JS的所有HTML代码必须在服务器端生成,故全部图片拼接在其接口文件中,这里可以通过PHP的反射机制动态执行接口的方法。
下面是我用PHP 的Reflection机制动态执行接口中的方法:
这样的相册针对不同的需求,只需要慢慢增加其模板插件,客户爱怎么换相册展示方式,他就能随便换了。通用性也增加了。
最后贴上一段flashalbum-config.xml文件