How can I add a keyword list similar to phpcms 2008 to phpcms v9

  • 2020-07-21 07:03:38
  • OfStack

Recently, I used phpcms v92 to develop a personal site. Before, I used 2008 to display all the functions of a more comfortable keyword. However, v9 added the keyword list function to the search. Site search function, I think 1 general will be used less, and we in addition to the article when the keywords are actually separated, why more than 1 lift, in fact, it is also easier to change

Add 1 keyword_ext_model.class.php to the model folder. keyword_model is actually in the model folder, I wonder why there is no table keyword?

So don't basically add in here, maybe in the future this model will be used

<?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';
        parent::__construct();
    }
}
?>

Then create a table

CREATE TABLE `t_v9_keyword_ext` (
  `tagid` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
  `tag` char(50) NOT NULL,
  `style` char(5) NOT NULL,
  `usetimes` smallint(5) unsigned NOT NULL DEFAULT '0',
  `lastusetime` int(10) unsigned NOT NULL DEFAULT '0',
  `hits` mediumint(8) unsigned NOT NULL DEFAULT '0',
  `lasthittime` int(10) unsigned NOT NULL DEFAULT '0',
  `listorder` tinyint(3) unsigned NOT NULL DEFAULT '0',
  `modelid` smallint(6) DEFAULT '0',
  PRIMARY KEY (`tagid`),
  UNIQUE KEY `tag` (`tag`),
  KEY `usetimes` (`usetimes`,`listorder`),
  KEY `hits` (`hits`,`listorder`)
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

Last step 1 in phpcms/modules/content/fields/add 1 input keyword inc. php

function tags($field, $value)
    {
        if(!$value) return '';
        if(strpos($value, ','))
        {
            $s = ',';
        }
        else
        {
            $s = ',';
        }

        $keywords = isset($s) ? array_unique(array_filter(explode($s, $value))) : array($value);
        $keyword_db = pc_base::load_model('keyword_ext_model');

        foreach($keywords as $tag)
        {
            $tag = trim($tag);
            $keyword_db->delete(array("tag"=>$tag,"modelid"=>$this->modelid));
            $c=$this->db->count("keywords like '%".$tag."%'");
            $keyword_db->insert(array("modelid"=>$this->modelid,"tag"=>$tag,"usetimes"=>$c,"lastusetime"=>SYS_TIME),false,true);
        }

        return implode($s, $keywords);
}

In this way, when adding keywords in the article, it will be automatically added to one copy of keyword_ext. When calling the whole station tags, it will directly call this table. Please clear the whole site cache first, otherwise no effect will be seen after modification.

Related articles: