[转]自动给文章内的TAG标签加上站内链接

公共函数库的插件编写初衷是“将小功能合并到一个插件,方便安装又避免多个插件的效率降低”。


此版本支持功能:


content2keyword() 函数,将正文中出现的 TAG 替换成站内超链接。


本函数需要修改模板;


使用方法:


1、后台上传并启用该插件


2、打开 templates/模板名/echo_log.php


找到<?php echo $log_content;?>的地方,改为<?php echo content2keyword($log_content);?>


PS:我不知道为什么emlog没有提供类似的钩子“数据输出前做格式化”,所以需要修改模板(也许是我不懂EMLOG的规则)


--------------------------------------------------------------------------------------


没权限上传文件,就发下源代码好了,反正灰常简单。将以下代码保存为 publicfun.php,放到publicfun文件夹,再打包成ZIP格式,在EMLOG后台上传插件并启用就行了。


<?php
/*
Plugin Name: 公共函数库
Version: 1.0
Plugin URL:
Description: 计划封装常用的功能,又避免安装多个插件带来的效率低下
Author: HN(QQ:14683667)
Author URL: #
*/
!defined('EMLOG_ROOT') && exit('access deined!');

/**
* content2keyword(): 替换正文中出现的TAG标签为超链接,要求:将 <?php echo $log_content; ?>的地方,改为 <?php echo content2keyword($log_content); ?>
* 此函数效率相对较低,但暂时没有更好方法实现,主要是避免 将 a、img 标签中的 alt、title 等内容与TAG重复时的处理
* @param unknown_type $content
* @return unknown|mixed
*/
function content2keyword($content){
global $CACHE;
$tags = $CACHE->readCache('tags');
if( !is_array($tags) ){
return $content;
}

//避免在链接、IMG标签内重复添加,先将A标签和 IMG标签匹配并保存起来
preg_match_all('/<([a|img]).*>.*</\1>/Uis', $content, $d);
if( is_array( $d[0] ) ){
foreach( $d[0] as $key=>$val ){
$flag = "{======{$key}======}";
$content = str_replace($val, $flag, $content);
}
}

//替换tags链接
foreach( $tags as $val ){
$tagurl = "<a title='{$val['tagname']}' href="".Url::tag($val['tagurl'])."">".$val['tagname'].'</a>';
$content = str_replace( $val['tagname'], $tagurl, $content );
}

//将之前保存的A、IMG标签,再替换回原样
if( is_array( $d[0] ) ){
foreach( $d[0] as $key=>$val ){
$flag = "{======{$key}======}";
$content = str_replace($flag, $val, $content);
}
}

return $content;
}

?>



如果您觉得我的文章有帮助,请随意赞赏!

*发表评论

用QQ账号登录  请登录后发表评论