PHPCMS V9 将关键词功能集成到搜索模块,仅在用户搜索时记录关键词到 search_keyword 表。而 V8 拥有独立关键词表,支持全站标签云展示、热门标签调用。本文通过扩展模型、建表、字段处理三步,为 V9 重建独立关键词系统。
文件:phpcms/model/keyword_ext_model.class.php
<?php
defined('IN_PHPCMS') or exit('No permission resources.');
pc_base::load_sys_class('model', '', 0);
class keyword_ext_model extends model {
public $table_name = '';
public function __construct() {
$this->db_config = pc_base::load_config('database');
$this->db_setting = 'default';
$this->table_name = 'keyword_ext'; // 对应表前缀+v9_keyword_ext
parent::__construct();
}
}
?>
SQL 语句(表前缀默认 v9_,实际按配置调整):
CREATE TABLE `v9_keyword_ext` (
`tagid` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
`tag` char(50) NOT NULL COMMENT '关键词',
`style` char(5) NOT NULL DEFAULT '' COMMENT '样式',
`usetimes` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT '使用次数',
`lastusetime` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最后使用时间',
`hits` mediumint(8) unsigned NOT NULL DEFAULT '0' COMMENT '点击次数',
`lasthittime` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最后点击时间',
`listorder` tinyint(3) unsigned NOT NULL DEFAULT '0' COMMENT '排序',
`modelid` smallint(6) DEFAULT '0' COMMENT '模型ID',
PRIMARY KEY (`tagid`),
UNIQUE KEY `tag` (`tag`),
KEY `usetimes` (`usetimes`,`listorder`),
KEY `hits` (`hits`,`listorder`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
文件:phpcms/modules/content/fields/keyword/input.inc.php(在 tags() 函数中插入)
function tags($field, $value) {
if (!$value) return '';
// 统一分隔符为逗号
$s = ',';
$keywords = array_unique(array_filter(explode($s, $value)));
$keyword_db = pc_base::load_model('keyword_ext_model');
foreach ($keywords as $tag) {
$tag = trim($tag);
if (!$tag) continue;
// 删除同模型下旧记录(避免重复)
$keyword_db->delete(array('tag' => $tag, 'modelid' => $this->modelid));
// 统计该关键词在当前模型内容中的出现次数
$count = $this->db->count("keywords LIKE '%" . $tag . "%'");
// 插入/更新关键词记录
$keyword_db->insert(array(
'modelid' => $this->modelid,
'tag' => $tag,
'usetimes' => $count,
'lastusetime'=> SYS_TIME
), false, true); // true 表示 replace into
}
return implode($s, $keywords);
}
v9_keyword_ext 表是否写入记录。{pc:get sql="SELECT * FROM v9_keyword_ext WHERE modelid=1 ORDER BY usetimes DESC LIMIT 20" return="data"}
{loop $data $k $v}
<a href="{APP_PATH}index.php?m=search&c=index&a=init&q={$v[tag]}" style="font-size:{$v[usetimes]+10}px;">{$v[tag]}</a>
{/loop}
{/pc}
keyword_ext_model 避免污染原 keyword_model,升级安全。true 实现“存在则更新、不存在则插入”,保持统计准确。通过三步扩展,PHPCMS V9 即可拥有独立关键词表,支持全站标签云、热门标签、相关文章推荐等功能,弥补 V9 相对 V8 的功能缺失。