phpcms v9关键字,内联,关联链接完美解决方案
发布:smiling 来源: PHP粉丝网 添加日期:2014-10-21 16:19:17 浏览: 评论:0
由于PHPCMS关键字关联链接替换的时候 对ALT标签也会替换掉,还有A标签内的东西也会替换掉 这样不是我们的本意,搜遍论坛没有解决方案,看到一个网站解决了,问了下那个朋友,人家告诉我1000元,说官方都没有解决的问题,你说值不值1000,我就纳闷了,自己研究了下DEDE和帝国的程序,搞明白了怎么回事,现在将研究的方法分享出来.
找到include目录下的global.func.php文件,用编辑软件打开后,CTRL+F搜索function keylinks,然后找到如下代码:
- function keylinks($txt, $replacenum = '')
- {
- $linkdatas = cache_read('keylink.php','',1);
- if($linkdatas)
- {
- $word = $replacement = array();
- foreach($linkdatas as $v)
- {
- $word1[] = '/'.preg_quote($v[0], '/').'/';
- $word2[] = $v[0];
- $replacement[] = '<a href="'.$v[1].'" target="_blank" class="keylink">'.$v[0].'</a>';
- }
- if($replacenum != '')
- {
- $txt = preg_replace($word1, $replacement, $txt, $replacenum);
- }
- else
- {
- $txt = str_replace($word2, $replacement, $txt);
- } //phpfensi.com
- }
- return $txt;
- }
替换成以下代码:
- function keylinks($txt, $replacenum = '')
- {
- $linkdatas =
- cache_read('keylink.php','',1);
- //暂时屏蔽超链接
- $txt
- = preg_replace("/(<a(.*))(>)(.*)(<)(\/a>)/isU", '\\1-]-\\4-[-\\6',
- $txt);
- $GLOBALS['replaced'] = array();
- if($linkdatas)
- {
- $word = $replacement =
- array();
- foreach($linkdatas as
- $v)
- {
- $word[] =
- $v[0];
- $GLOBALS['replaced'][$v[0]] =
- 0;
- $replacement[] = '<a href="'.$v[1].'" target="_blank"
- class="keylink">'.$v[0].'</a>';
- }
- }
- $txt
- = preg_replace("/(^|>)([^<]+)(?=<|$)/sUe", "_highlight('\\2', \$word,
- \$replacement, '\\1',\$replacenum)", $txt);
- //恢复超链接
- $txt = preg_replace("/(<a(.*))-\]-(.*)-\[-(\/a>)/isU", '\\1>\\3<\\4', $txt);
- //高亮专用, 替换多次是可能不能达到最多次
- function _highlight($string, $words, $result,
- $pre ,$cfg_replace_num)
- {
- $string = str_replace('\"', '"',
- $string);
- if($cfg_replace_num > 0)
- {
- foreach
- ($words as $key =>
- $word)
- {
- if($GLOBALS['replaced'][$word] ==
- 1)
- {
- continue;
- }
- $string
- = preg_replace("/".preg_quote($word)."/", $result[$key], $string,
- $cfg_replace_num);
- if(strpos($string, $word) !==
- false)
- {
- $GLOBALS['replaced'][$word]
- =
- 1;
- }
- }
- }
- else
- {
- $string
- = str_replace($words, $result, $string);
- }
- return
- $pre.$string;
- }
就ok了.
现在实现的功能是:
第一就是会替换所有的关联关键字,第二如果替换次数在模型设置里面设置的是大于0的话,每个关键字只替换一次,主要考虑到替换太多,不利于SEO.
在生成速度上会慢些,还有就是在后台加的关键字会全部替换,要是关键字太密集的话,也会不利于搜索引擎优化,实现起来也不难.
要想一个关键字可以使用下面的代码:
- //高亮专用, 替换多次是可能不能达到最多次
- function _highlight($string, $words, $result, $pre ,$cfg_replace_num)
- {
- $string = str_replace('\"', '"', $string);
- if($cfg_replace_num > 0)
- {
- foreach ($words as $key => $word)
- {
- if($GLOBALS['replaced'][$word] == $cfg_replace_num)
- {
- continue;
- }
- $string = preg_replace("/".preg_quote($word)."/", $result[$key], $string, $cfg_replace_num);
- if(strpos($string, $word) !== false)
- {
- $GLOBALS['replaced'][$word] ++;
- }
- }
- }
- else
- {
- $string = str_replace($words, $result, $string);
- }
- return $pre.$string;
- }
Tags: phpcms关键字 phpcms内联链接
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)