我正在管理一个PHP构建的网站,该网站使用多层Smarty模板系统,主模板包括子模板等。该网站本身具有动态功能,包括标题中显示的用户个人资料,页脚站点地图和菜单下拉菜单,具体取决于用户访问级别等。
我现在需要在其中加入一个vBulletin论坛。
当然,我的选择之一是使vBulletin网站“看起来像”,带有用于页眉和页脚的插件-但这几乎是不可能的,因为该网站的某些功能应该覆盖论坛访问权限完全(维护周期,用户访问限制,偶尔的“启动页面”重定向),我们有JavaScript和标头位,然后是我提到的有关整个站点模板的部分。大量页面代码需要复制,这是我真正希望避免的事情。
所以我走了另一条路,开始通过“包装器” PHP脚本包含论坛的文件,希望将其输出完全捕获到输出缓冲区中,并将其放入我的模板中。我什至模拟了REQUEST_URIs和其他$ _SERVER字段,以使论坛认为它是独立运行的。它使我奋力反击,摆脱了ob_start()s和die()ing而不是在某些时候返回,以至于我回到了绘图板上。
我的另一种选择是以一种令人毛骨悚然的方式入侵我自己的网站,以提供论坛将要使用的已切断的页眉和页脚-但随后会有一些内容和脚本组合在一起。同样,我将失去一次运行一次只能生成一页的能力,而一次生成的内容在页眉和页脚之间进行同步将成为一场噩梦。
我还有什么其他选择?使用vBulletin的所有网站都坚持简单的页眉和页脚,还是我显然缺少什么?
更新:如果vB支持“模板包装器”插件,而该论坛的所有生成的HTML都作为参数进行缓冲,则可以完全解决我的问题; “这是输出,继续进行所需的操作”。但是有支持吗?还是可以入侵它?
答案 0 :(得分:0)
经过一番搜索,我发现vBulletin 5恰好有一个hookFrontendBeforeOutput
钩子,可以对vBulletin模板渲染产生的整个输出进行操作。因此,我可以创建一个插件,该插件将捕获vB的输出,在需要时对其进行纠正,并将其输入到我自己的模板系统中以进行最终演示-以及触发网站的登录名和其他逻辑机制。
This forum thread举例说明了这个问题,尽管情况很简单。