先说dedecms默认tag的问题:
1、dedecms 默认添加的tag标签是不带链接;
2、dedecms tag添加链接之后,默认URL是tags.php?/关键词/。这样有个问题是链接地址带有中文,转码之后会有一串乱码格式,会显得很长。我们需要对url进行优化处理。
第一,先来解决tag不带链接的问题。
先在文章模板调用tag之后,语法格式:{dede:field.tags/},这样前台会出来标签:
tag标签这样出来后,tag标签是不能点击的。需要改一个代码:在include/helpers/archive.helper.php 文件中修改以下代码:
$tags .= ($tags=='' ? $row['tag'] : ','.$row['tag']);
改成如下:
$tags .= ($tags=='' ? '<a href=/tags.php?'.$row['tag'].' target=_blank>'.$row['tag'].'</a>': ','.'<a href=/tags.php?'.$row['tag'].' target=_blank>'.$row['tag'].'</a>');
以上修改,其实就是手动添加一个a链接而已。$row['tag']是tag的关键词名称。
这样出来的链接地址是:http://so.baidu.com/tags.php?百度推广
因为带有中文,这样的URL结构不是我们想要的。这个后面再说。为了保持统一,还有一个处需要修改:
include/taglib/tag.lib.php文件中的链接形式修改:如下
tag修改以上要改成如下格式:
$row['link'] = $cfg_cmsurl."/tags.php?".urlencode($row['keyword']);
这样修改后,最终看到的url基本上就是:
so.baidu.com/tags.php?搜索推广。
第二,解决url的问题。
上面的有2个问题,一是含有中文,二是含有动态参数。
有2个解决方法,一是启用伪静态(Apache 或者 iis需要分开设置)规则,对url进行重写;另一种是继续用动态,把中文改成id。
即最终有2种格式选择:
1)so.baidu.com/tags.html、so.baidu.com/tags/关键词.html (这里还涉及到关键词改id)
2)so.baidu.com/tags.php、so.baidu.com/tags.php?id
经测试,开启伪静态后,服务器压力很大,于是放弃方法1。这里说说方法2的问题。
在上面url处理之后,只需要把关键词替换中id即可。
有2处需要修改:把如下代码的 tag改成 id
大量taglib.php改成:
发把原来的keyword改成id。
还有一处把helper里的archive.helper.php改成如下:
id修改这样最终的效果展示连接是:http://so.baidu.com/tags.php?12
但会发现这样子,标题出来的是 id数字,而不是tag名称,还需要做最后一步,在include/arc.taglist.class.php 中做全局设置之后添加以下代码:
$s = $this->dsql->GetOne("Select tag From `#@__tagindex` where id = '{$this->Tag}' ");
$this->Fields['tag'] = $s['tag'];
$this->Fields['title'] = $s['tag'];
这样设置之后,最终的展示效果为:
标签首页:http://so.baidu.com/tags.php
标签列表页:http://so.baidu.com/tags.php?10
以上。
网友评论