最近研究phpwind源码过程中,发现它对发帖主题具有可定制化能力,而不是一概标准贴格式,能够根据具体应用场景定制化属性,让帖子信息结构化起来,具体功能以房屋买卖版块为例,可以分为出租、出售、求购等类型的帖子,如下图所示:
发帖的时候,能根据类型,定制各个属性,以出租为例,如下图所示:
在列表展示页里,也能根据定制化属性,来显示列表,以出租为例:
刚开始,我的初步判断是phpwind对这么几个应用广泛的场景单独做了页面,因为在后台配置中,没找到能定制这些参数的地方,但在源码里没找到这些定制化页面,因此我断定是有一套关于主题定制的模型,通过对模型的配置,达到对功能的定制,这引起了我的兴趣,通过对表结构的分析,发现有一组表是专门用来应对主题定制化的,表结构如下图所示:
所上图所示,
pw_topiccate为主题分类表,是最上层的抽象,表示在哪些版块里有定制化主题。
pw_topicmodel为主题分类模板信息,对应着各个定制化主题,如上例中的“出租”在里面就对应一项。
pw_topicfield为主题分类模板字段表,对于每个定制化主题所需的定制化字段都在这里配置
pw_topicvalue为定制化字段对应的值,表面后面会跟上一个num,对应modelId,这样每个model都会有一个单独的pw_topicvalue表来存储数据
pw_topictype为版块主题分类,可指定大版块下各个定制化主题的显示规则
根据以上数据表结构设计,就大致能知道如何实现这一套定制化设计了。拿浏览帖子为例,phpwind做了以下事情:
- 根据modelId得到定制化数据
源码:
|
在getTopicvalue方法中,先是得到model信息,然后根据modelId从相应pw_topicvalue表里得到具体数据
最后根据pw_topicfield表里配置的各个field,把value根据一定规则组装起来
- 根据modelId得到搜索版块的html代码
- 在模板read.htm里把以上得到的定制化数据显示出来
不过从以上设计发现,这个机制还不够完全定制化,因为对于每个新加的model都需要新加表pw_topicvalue来存储数据,因此phpwind也不能在后台管理功能里放开对这一套的配置,如果真正做到可配置,也许可以考虑放一个n多字段的大表,而不是分表来存定制化数据。