找到 /e/class/userfun.php 这个文件,在最后的部分添加新增函数,代码如下:
/**
* 自动将文章内容中的Tag标签替换为名称格式的伪静态超链接(域名/tags-tagname.html)
* @param string $content 文章内容
* @return string
*/
function user_auto_add_tag_links($content){
global $empire,$dbtbpre;
if(empty($content)) return $content;
// 1. 获取所有Tag标签,按字数从长到短排序(核心优化:防止短词拦截长词)
// 比如同时存在“帝国CMS”和“帝国”两个TAG,优先替换长的,避免“帝国CMS”被拆碎
$sql = $empire->query("select tagname from {$dbtbpre}enewstags order by length(tagname) desc, tagid desc");
// 2. 排除HTML标签内部的属性(防止破坏图片路径、A标签等)
$match_html = array();
preg_match_all('/<[^>]+>/i', $content, $match_html);
if (!empty($match_html[0])) {
foreach ($match_html[0] as $k => $v) {
$content = str_replace($v, "{#HTML_BLOCK_{$k}#}", $content);
}
}
// 3. 循环遍历Tag,进行内链替换
while($r=$empire->fetch($sql)) {
$tag_name = $r['tagname'];
// 【精准定制】将Tag名称进行URL编码,拼接成 /tags-名称.html
// 使用 urlencode 可以完美兼容中文标签路径
$tag_url = '/tags-' . urlencode($tag_name) . '.html';
// 构建A标签
$replace_str = '<a href="' . $tag_url . '" target="_blank" class="ecms-tag-link">' . $tag_name . '</a>';
// 限制每篇文章中同一个Tag只替换 1 次,防止过度SEO
$content = preg_replace('/' . preg_quote($tag_name, '/') . '/i', $replace_str, $content, 1);
}
// 4. 还原HTML标签
if (!empty($match_html[0])) {
foreach ($match_html[0] as $k => $v) {
$content = str_replace("{#HTML_BLOCK_{$k}#}", $v, $content);
}
}
return $content;
}
保存即可。
需要提前设置后台系统--》系统设置--》伪静态参数设置--》TAGS 信息列表页 伪静态 填写 tags-[!--tagname--].html 保存即可
修改伪静态,以上功能 tags的伪静态设置 前端显示效果:域名/tags-name.html 格式
nginx 服务器的伪静态代码如下:
rewrite ^/tags-(.+)\.html$ /e/tags/index.php?tagname=$1 last;
文章页需要修改内容调用代码如下:
<?=user_auto_add_tag_links($navinfor['newstext'])?>
后期在发布文章的过程中,只要tags里面符合文章的关键词,会自动添加到文章中对应的tags链接,但是这个有利有弊,请谨慎使用,比如说你的网站数据库tags有200个,只要文章中只要有tags的关键词,都会有一个链接指向。