Thinkphp 文章关键词自动加链接-内连模块
首先建立关键词表 命名为 xx_sitelink
表结构 id link keyword
在前台项目下新建 ReplaceAction.class.php文件,建立替换链接模块
<?phpclass ReplaceAction extends Action{private $text;public function __toString() {return $this->replace();}//返回替换结果public function content($text){$this->text=$text;}//获取内容给$textprivate function replace(){ //替换函数
$keywords=$this->keywords(); $pattern =implode(‘|‘,array_keys($keywords)); $pattern ="/((?<!<))($pattern)(?![^<>]*(?:>|<\/a>))/"; return preg_replace_callback($pattern,array($this,callback),$this->text);
}private function callback($matches) { //正则替换回调函数
global $log; //替换记录,替换过则不在进行相同替换
if($log[$matches[2]]) return $matches[0]; $log[$matches[2]]=true; $keywords = $this->keywords(); $link = $keywords[$matches[2]]; return "<a href=‘$link‘>$matches[2]</a>";
}private function keywords(){ //查找关键词
$Keywords = M("Sitelink"); $Keywords = $Keywords->where("link<>‘‘")->select(); foreach ($Keywords as $key => $value) { if (strpos($this->text,$value[keyword])){ //内容中包含关键词存入数组
$m[$value[keyword]]=$value[link];
}
} krsort($m);//对数组进行逆向排序,最长关键词优先替换
return $m;
}
}
同项目下调用 $Form = M(‘text‘);$data = $Form->find($id);if($data) { $Replace = A("Replace"); $Replace ->content($data[content]); //$data[content]为你的正文字段
$data[content]=$Replace;
}$this -> assign(‘data‘,$data);?> 上一篇: 浅谈ThinkPHP与手机 APP 开发(API 接口开发)
下一篇: CSS渐变背景详细教程