A-A+

dedecms关键词加链接及外加链接描述title

2014年10月09日 14:04 学习笔记 评论 1 条 阅读 478 views 次

【注意:此文章为博主原创文章!转载需注意,请带原文链接,至少也要是txt格式!】

本篇文章主要讲的是:Dedecms织梦CMS给文章自动加链接,一个关键词只加一个链接,并且链接有描述。顺带解决关键词交叉(重叠)替换等问题。
最终结果代码实例

1
<a title='汪洋中的虾米' href='http://gdd.gd/' target='_blank'><u>虾米博客</u></a>

因为需要加链接自定义TITLE描述标签,所以需要改动数据库,首先我们找到Dede数据库的关键词表#@__keywords然后我们增加一个字段来储存自定义的描述标签。

一、首先我们执行SQL语句:

1
ALTER TABLE `dede_keywords` ADD `titlekeyword` CHAR( 40 ) CHARACTER SET gbk COLLATE gbk_chinese_ci NULL DEFAULT NULL AFTER `keyword` ;

执行完毕后就会在关键词表#@__keywords添加titlekeyword字段,这个字段就是用来储存描述标签的。我们现在进行下一步。

二、再次执行SQL语句:
【这条语句博主已经隐藏,这条SQL语句执行不执行都无所谓的,但如果你非常想知道,那你需要在下面回复此博文,才能看见呦,请不要留垃圾评论,如果留垃圾评论你不但看不见,还会被博主拉进黑名单的呦!
这条语句是更新表述标签暂时为关键词名称。(此步骤可执行,可不执行,无所谓。最后重申,此步骤无所谓执行不执行都可以。)

三、我们现在需要开始修改文件了,首先修改关键词替换的核心代码。找到文件include\arc.archives.class.php然后打开,找到大概在1170行左右function ReplaceKeyword($kw,&$body),然后我们修改一下,从我给出的代码为起始行一直到文件结束,替换为如下代码:

1
UPDATE `dede_keywords` SET `titlekeyword` = `keyword`

替换后,就可以dedecms关键词加链接及外加链接描述title ,而且还解决了“关键字交叉(重叠)替换问题”。当然了,只修改这些还是不够的,因为我们还需要手动添加关键词链接个性描述,所以还需要修改2个文件就OK了,我们继续。

四、我们到程序的后台目录找到article_keywords_main.php这个文件,在文件的73行左右,代码为:if(is_array($row)) 这是个判断语句,判断关键词是否在数据库中,我们来修改一下,在这段IF语句大括号的接触处添加一条判断语句代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
function ReplaceKeyword($kw,&$body)
    {
        global $cfg_cmspath;
        $maxkey = 5;
        $kws = explode(",",trim($kw));    //以分好为间隔符
        $i=0;
        $karr = $kaarr = $GLOBALS['replaced'] = array();
 
        //暂时屏蔽超链接
        $body = preg_replace("#(<a(.*))(>)(.*)(<)(\/a>)#isU", '\\1-]-\\4-[-\\6', $body);
 
        $query = "SELECT * FROM #@__keywords WHERE rpurl<>'' ORDER BY rank DESC"; 
        $this->dsql->SetQuery($query);
        $this->dsql->Execute();
        while($row = $this->dsql->GetArray())
        {
            $key = trim($row['keyword']);
			$title_key = trim($row['titlekeyword']);
            $key_url=trim($row['rpurl']);
            $karr[] = $key;
            $kaarr[] = "<a title='$title_key' href='$key_url' target='_blank'><u>$key</u></a>";
        }
		foreach ($karr as $key => $word){  
			$body = preg_replace("/(^|>)([^<]+)(?=<|$)/sUe", "_highlight('\\2', \$karr[$key], \$kaarr[$key], '\\1')", $body);  
			//echo $body."<br/>";  
			//恢复超链接  
			$body = preg_replace("/(<a(.*))-\]-(.*)-\[-(\/a>)/isU", '\\1>\\3<\\4', $body);  
			//暂时屏蔽超链接  
			$body = preg_replace("/(<a(.*))(>)(.*)(<)(\/a>)/isU", '\\1-]-\\4-[-\\6', $body);  
		}  
		//恢复超链接  
		$body = preg_replace("/(<a(.*))-\]-(.*)-\[-(\/a>)/isU", '\\1>\\3<\\4', $body);  
		return $body;  
	}  
 
 
}//End Archives
 
//高亮专用, 替换多次是可能不能达到最多次
function _highlight($string, $words, $result, $pre){  
	global $cfg_replace_num;  
	$string = str_replace('\"', '"', $string);  
	if($GLOBALS['replaced'][$words] == 1){  
		return $pre.$string;  
	}  
	if($cfg_replace_num > 0){  
		$string = preg_replace("/".preg_quote($words)."/", $result, $string, $cfg_replace_num);  
			if(strpos($string, $words) !== false){  
				$GLOBALS['replaced'][$words] = 1;  
				//echo $words;  
			}  
		}  
	else{  
		$string = str_replace($words, $result, $string);  
	}  
	return $pre.$string;  
}

意思很简单,如果关键词描述标签为空,直接描述标签为关键词名称。
我们再次找到代码 $keyword = trim($keyword); 大约在64行左右,在这条语句下面添加 $titlekeyword = trim($titlekeyword);
最后我们再次找到 $inquery = "INSERT INTO `#@__keywords`(keyword 这段代码,我只给出了半句话,直接查找就能找到,大约在82行,直接把这一整句,替换为:

1
2
3
4
if($titlekeyword=='')
    {
		$titlekeyword = $keyword;
    }

细心看就是多一个titlekeyword,意思就是同时把关键词描述同步入库。

五、这是修改最后一个文件了,是模板文件,文件在后台的模板目录,后台\templets\article_keywords_main.htm这个文件,首先我们找到55行,代码为

1
 $inquery = "INSERT INTO `#@__keywords`(keyword,titlekeyword,rank,sta,rpurl) VALUES ('$keyword','$titlekeyword','$rank','1','$rpurl');";

在这行代码下面添加如下代码:

1
<td width="140"><input name="keyword" type="text" id="keyword" style="width:130px" /></td>

然后我们再次找到

1
2
<td width="100" align="center">关键字注释:</td>
<td width="140"><input name="titlekeyword" type="text" id="titlekeyword" style="width:130px" /></td>

替换为

1
<td width="25%">关键字</td>

最后我们找到:

1
<td width="25%">关键字 : title注释</td>

更改为:

1
2
3
<input type='hidden' value='{dede:field.keyword/}' name='keyword_{dede:field.aid/}' />
  {dede:field.keyword/}
</td>

至此就是全部修改完毕,如果没看懂就多看几遍,实在不懂可以留言,博主会第一时间回复的呦。

标签:

1 条留言  访客:0 条  博主:1 条

  1. gdd

    忘说了,这个适用于5.7dedecms 别的版本没有试验。

给我留言