微构网络

长沙论坛制作:多种方法在Discuz论坛的友情链接中加入nofollow

2015-01-10 12:48 栏目:技术教程 查看(6,802)

大家都知道在SEO中加入nofollow可以避免我们本页的权重传递出去,而更多的保留在站内的内链之中,因此很多时候我们在网页一些非重要超链接上面加上rel=”nofollow”来处理,比如联系QQ、微博关注等等,而有时候就做得更极端一些,干脆所有的外链都加上这个标签。而我们最近接到一个具体化的需求,就是在Discuz友情链接部分加入这个标签。

1、问题分析

如果你是一个纯粹的SEOer或者一个写静态页面的设计师,那么你肯定会认为这很简单,直接在a标签中加上rel=”nofollow”就可以,但实际上大家可以看下Discuz的模版中的代码。

<div id="category_lk" class="bm_c ptm">
   <!--{if $_G['cache']['forumlinks'][0]}-->
	 <ul class="m mbn cl">$_G['cache']['forumlinks'][0]</ul>
   <!--{/if}-->
   <!--{if $_G['cache']['forumlinks'][1]}-->
	  <div class="mbn cl">
		$_G['cache']['forumlinks'][1]
	  </div>
    <!--{/if}-->
	<!--{if $_G['cache']['forumlinks'][2]}-->
		<ul class="x mbm cl">
			$_G['cache']['forumlinks'][2]
		</ul>
	<!--{/if}-->
</div>

DZ使用了PHP的模版引擎,因此能够在模版文件中直接写上一些PHP变量,而上面就是DZ模版中关于友情链接的核心代码,大家会发现这里不是我们想象的那样,也就不是那种直接把a标签写在模版中,而是读取一个$_G的某个关键字变量。因此很显然不能直接在模版里修改HTML的结构来修改。

2、方案一:修改PHP

作为一个官方认证的开发者,我不推荐大家这么做,因为这样做其实破坏了DZ的原始结构,而且一旦升级文件又会被覆盖,在标准的二次开发过程中我们应该只限修改的template文件夹(修改模版)及source\plugin文件夹(增加插件)。当然如果你不在乎这样就采用这种方式把,因为这个友情链接相关的文件位于source/function/cache/cache_forumlinks.php。这属于二次开发不适宜修改的地方,而且更新程序版本的时候也会覆盖掉。
当然说到了这个文件位置了,要修改就简单了;其实这个文件中就一个build_cache_forumlinks()方法,就是进行友情链接内容缓存的。修改就修改这个方法中所有的a标签,在a标签中加入rel=”nofollow”就可以。如这里修改最后一个a标签。

<li><a href="'.$flink['url'].'" target="_blank" title="'.strip_tags($flink['name']).'" rel="nofollow" >'.$flink['name'].'</a></li>

3、方案二:JS

上面那种方式我也说了不是一种推荐的方式,而这里说的JS方式就是我所推荐的,因为它只需要改变我们的模版文件,甚至只是插入一段JS即可解决问题。在上面开始提到的模版文件中一开始div标签就用一个id选择器category_lk,那么我们就可以来以此做文章。通过DOM来改变(实际上是增加)我们需要增加的代码,下面是我写的几行简单的原生JS代码,测试没问题。

<script>
//获取所有友情链接的a标签列表对象
var tagA=document.getElementById("category_lk").getElementsByTagName("a");
//通过for..in循环遍历所以元素
for(var i in  tagA){
    tagA[i].rel="nofollow";//通过改变对象的rel属性添加nofollow
}
</script>

不管是哪种方式,我们都可以通过查看当前论坛友情链接处的源代码,我们会发现所有a标签中都加了一个nofollow。实际上大家可以进一步控制,比如控制一部分加上,而另外的一部分不加上nofollow。

转载请注明出处:长沙论坛制作:多种方法在Discuz论坛的友情链接中加入nofollow - 微构网络
分享:

您可能遇到的问题?

搜索微构网络的干货:

值班:15574303608 业务:在线咨询 技术:在线咨询

电话:0731-83862683 售后:在线咨询 邮箱:server@csweigou.com

地址:长沙市五一西路锦绣中环1116(五一广场平和堂对面)