应公司某个大客户需求,pb的自带标签无法满足。行吧,明说了,客户需求:建区域分站,二级域名访问,在首页要体现分站(就是列举所有分站名称,并点击进入)。所以,此篇会以area表为栗子,其余各位自己按需求类比。文末有附件可以下载。 解决方案: 第一步:pb自带的区域语言设置,并且绑定单独域名。 第二步:获得区域表area 的相关字段信息。 这第二步,就涉及到ExtLabelController。 点开这个pb提供的扩展标签文件啊,里面很简单,就是定义加调用。 自带的test方法提供了单标签的使用,原理也很简单,相信看过的都会明白——文字替换。 基本操作就不赘述了,str_replace的各种参数,不行就自行百度吧。重头戏要来了!!! 我们的需求是取出area表的相关字段。类比pb已有的标签,相似的好像是list标签。出于方便、省事、懒的原则,就用list的方法直接修改。文末会附上ExtLabelController源码。 以下内容见仁见智,我是php菜鸡,有些地方做的可能不是太妥当。 纵观pb结构,操作数据库离不开model,链接的生成离不开Url,所以ExtLabelController中引用了Model和Url。也顺便继承一下原来的控制器吧,有些操作使用起来方便。 避免升级覆盖,我自定义了ExtModel。扩展的数据库操作都在这里。 ExtModel代码截图,就是简单的一条查询语句。 回到ExtLabelController中,Model来都来了,就先用起来吧。 我自定义的area为{pboot:area}{/pboot:area},里面字段[area:xxxx] 下面就是简单的复制粘贴了。 我们不需要做list的额外操作。取到内容后循环匹配我们需要的内容。 就上面的需求,我需要一个计数器 i,一个名称 name,一个链接 url,一个区域编码 code。 所以,在循环的时候,我们需要把这几个单独列出来做替换,当然,也可以做无差别替换,就是数据库中是什么字段,调用时就是什么标签。 这其中啊,url有个分支,毕竟人家是做了自定义地址绑定的,所以要体现一下,没有就用pb默认的显示,有就以新的url显示。 这里我偷懒了,没做https的判断,毕竟我用不到,也本着能偷懒就不勤快的原则。 到这就差不多了,整体的原理就是,先找类似的标签,更具需求改他方法。 这里有一个坑,是在最后的返回值。 我的使用是带形参的函数。 所以我的返回值是将里面处理好的返回到整体。如果是return $contrent; 的话,会出现只替换一处的情况。当前页下一处的调用就不生效。 自此,结束。