在本站门户底层化模块推送数据上传图片的时候,存储的图片附件地址没有包含本站点域名,直接是attachment/******这种形式,这个在本站任何地方显示或者js调用都是可以的,因为头部会有一个 base ,所有的attachment下的图片都会基于这个地址进行图片地址补全.
如果将这个门户底层化的js调用放到其他域名下呢? 其他域名的页面也有自己的base地址,比如这个base是www.***.com,但是你之前论坛的base是bbs.***.com,
然后www.***.com 和bbs.***.com又是绑定一台主机的不同目录,或者解析到不同主机上,如果
http://bbs.***.com/attachment/1.gif存在,能保证
http://www.***.com/attachment/1.gif能正常打开吗? 这个就是隐藏的BUG
解决方案两种:
1). 在门户底层化推送数据 上传图片的时候存储的图片image地址为基于域名的绝对地址,可以避免这个问题
2). 或者在调用推送的上传图片地址的时候,自动跟上本站域名地址比如bbs.***.com,那么无论调用js的当前域名是多少,他的base地址都是不生效的.浏览器会直接解析bbs.***.com的附件路径并显示图片
基于应用场景, 下面修改了第2钟方法:
打开lib/area/db/pushdatadb.class.php文件,
找到:
- $temp = $this->_colorTitle($temp);
下方添加代码:
- $temp = $this->_fixAttach($temp); // rickyleo
找到:
- function _colorTitle($rt) {...}
下方添加代码:
- /**
- * 修补其他域名下js调用本站域名下的推送数据图片加上本站域名,避免调用域名页面html写有baseurl
- *
- * @author rickyleo
- */
- function _fixAttach($rt){
- global $db_bbsurl, $db_attachname;
-
- if ($rt['data']){
- if (strpos($rt['data']['image'], $db_attachname) == 0){
- $rt['data']['image'] = $db_bbsurl.'/'.$rt['data']['image'];
- }
- }
-
- return $rt;
- }