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

【注意:此文章为博主原创文章!转载需注意,请带原文链接,至少也要是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> |
至此就是全部修改完毕,如果没看懂就多看几遍,实在不懂可以留言,博主会第一时间回复的呦。
忘说了,这个适用于5.7dedecms 别的版本没有试验。