亲注册登录道勤网-可以查看更多帖子内容哦!(包涵精彩图片、文字详情等)请您及时注册登录-www.daoqin.net
您需要 登录 才可以下载或查看,没有账号?立即注册
x
discuz x2 关联链接,即在指定的范围(文章,主题,群组,日志)内容中出现的指定文字自动加上给定链接。下面我简单解析一下关联链接的实现原理,希望对一些不能正常显示关联链接的用户提供一些参考。下面以论坛主题为例说明,其他各处与之原理相同。
涉及地方:后台--运营--关联链接--添加关联链接。
当我们打开主题内容页面,程序执行到furom_viewthread.php中的986行附近
- <!--{if $_G['relatedlinks']}-->
- <script
- type="text/javascript">
- var relatedlink =
- [];
- <!--{loop $_G['relatedlinks'] $key
- $link}-->
- relatedlink[$key] = {'sname':'$link[name]',
- 'surl':'$link[url]'};
- <!--{/loop}-->
- relatedlinks('postmessage_$_G[forum_firstpid]');
- </script>
- <!--{/if}-->
复制代码 在模板中输出一段javascript代码,并且将$_G['relatedlinks']中的数据以js数组的形式赋给relatedlink[]变量。然后执行relatedlinks()函数,该函数在common_extra.js文件中。
- function _relatedlinks(rlinkmsgid) {
- if(!$(rlinkmsgid) || $(rlinkmsgid).innerhtml.match(/<script[^\>]*?>/i)) {
- return;
- }
- var alink = new Array(), ignore = new Array();
- var i = 0;
- var msg = $(rlinkmsgid).innerHTML;
- msg = msg.replace(/(<ignore_js_op\>[\s|\S]*?<\/ignore_js_op\>)/ig, function($1) {
- ignore[i] = $1;
- i++;
- return '#ignore_js_op '+(i - 1)+'#';
- });
- i = 0;
- msg = msg.replace(/(<a.*?<\/a\>)/ig, function($1) {
- alink[i] = $1;
- i++;
- return '#alink '+(i - 1)+'#';
- });
- var relatedid = new Array();
- msg = msg.replace(/(^|>)([^<]+)(?=<|$)/ig, function($1, $2, $3) {
- for(var j = 0; j > -1; j++) {
- if(relatedlink[j] && !relatedid[j]) {
- var ra = '<a href="'+relatedlink[j]['surl']+'" target="_blank" class="relatedlink">'+relatedlink[j]['sname']+'</a>';
- var $rtmp = $3;
- $3 = $3.replace(relatedlink[j]['sname'], ra);
- if($3 != $rtmp) {
- relatedid[j] = 1;
- }
- } else {
- break;
- }
- }
- return $2 + $3;
- });
- for(var k in alink) {
- msg = msg.replace('#alink '+k+'#', alink[k]);
- }
- for(var l in ignore) {
- msg = msg.replace('#ignore_js_op '+l+'#', ignore[l]);
- }
- $(rlinkmsgid).innerHTML = msg;
- }
复制代码 该函数接受替换内容所在的父元素的id,在这个例子中,父元素应该是<td id="postmessage_帖子id" class="t_f"></td>替换文本使用到了js的replace方法,将设定的关联子句替换成带有关联链接的内容。
可能导致的关联链接不显示的原因分析:
1、程序、模板或者js文件被修改,导致$_G['relatedlinks']没有读取到,可以通过模板输出数据调试的方式检查,如果有问题可以将原程序模板等相关文件覆盖还原。
2、20110627之前有一个关联链接的bug,会导致关联链接无法显示,建议打上最新的补丁~
道勤主机提供365天*24小时全年全天无休、实时在线、零等待的售后技术支持。竭力为您免费处理您在使用道勤主机过程中所遇到的一切问题!
如果您是道勤主机用户,那么您可以通过QQ【792472177】、售后QQ【59133755】、旺旺【诠释意念】、微信:q792472177免费电话、后台提交工单这些方式联系道勤主机客服!
如果您不是我们的客户也没问题,点击页面最右边的企业QQ在线咨询图标联系我们并购买后,我们为您免费进行无缝搬家服务,让您享受网站零访问延迟的迁移到道勤主机的服务! |