首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

为 PHPCMS V9 添加独立关键词表:复现 V8 标签云功能的完整实现

     編輯:PHP 綜合知識

背景与动机

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);
}

生效与验证

  1. 后台更新缓存:设置 → 缓存管理 → 更新全站缓存(关键步骤,否则模型类不生效)。
  2. 发布/编辑文章时填写关键词,保存后检查 v9_keyword_ext 表是否写入记录。
  3. 前台调用标签云示例:
    {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,升级安全。
  • replace into:第三个参数 true 实现“存在则更新、不存在则插入”,保持统计准确。
  • 分词优化:大规模站点建议引入 SCWS/结巴分词自动提取关键词,而非依赖人工录入。

总结

通过三步扩展,PHPCMS V9 即可拥有独立关键词表,支持全站标签云、热门标签、相关文章推荐等功能,弥补 V9 相对 V8 的功能缺失。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved