目前正在用phpcms v9,需要显示热门搜索关键词,Google了几下没找到完善的解决办法。
还是DIY吧。
通过观察可以发现系统是自带了关键词模型的,只是没有实现。
或许是放在下一个版本里,呵呵~ DIY就从 /phpcms/model/keyword_model.class.php入手了。
看一下keyword_model.class.php的内容
pc_base :: load_sys_class( ' model ' , '' , 0 );
class keyword_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 ' ;
parent :: __construct();
}
}
从代码可以看出关键词表名叫 keyword 可是我们查看数据库里没有这样的表名。
那就参照相关搜索数据表 tb_search_keyword(我安装的时候用的是tb做表前缀)
新建一个热门搜索关键词数据表 keyword
-- ----------------------------
-- Table structure for `tb_keyword`
-- ----------------------------
DROP TABLE IF EXISTS `tb_keyword`;
CREATE TABLE `tb_keyword` (
`keyword` char ( 20 ) NOT NULL ,
`typeid` tinyint ( 4 ) NOT NULL default ' 0 ' ,
`searchnums` int ( 10 ) unsigned NOT NULL default ' 0 ' ,
PRIMARY KEY (`keyword`),
UNIQUE KEY `keyword` (`keyword`)
) ENGINE = MyISAM DEFAULT CHARSET = gbk;
这样数据表就建好了,接下来就是添加和调用数据了。
打开文件 /phpcms/models/search/index.php
找到
if ( $setting [ ' relationenble ' ]) {
在它上面加入以下代码
if ( ! empty ( $result )){
$this -> keyword_log_db = pc_base :: load_model( ' keyword_model ' );
$res = $this -> keyword_log_db -> get_one( array ( ' keyword ' => $q , ' typeid ' => $typeid ));
if ( $res ) {
// 关键词搜索数+1
$this -> keyword_log_db -> update( array ( ' searchnums ' => ' +=1 ' ) , array ( ' keyword ' => $q ));
} else {
$this -> keyword_log_db -> insert( array ( ' keyword ' => $q , ' typeid ' => $typeid , ' searchnums ' => 1 ));
}
}
这样就实现了搜索关键词的添加
再来看看模板调用的实现,我用的是 get 标签。
首先看搜索结果页:/phpcms/templates/default/search/list.html
{loop $keywords $k=>$v} < a href ="/index.php?typeid={$v['typeid']}&m=search&c=index&a=init&q={$v['keyword']}" > {$v['keyword']} </ a > {/loop}
{/pc}
这里的排序我用了随机,因为我不想每次都出现一样的,呵呵。
附上按搜索次数排序的Sql语句:SELECT keyword,typeid FROM tb_keyword WHERE typeid=$typeid ORDER BY searchnums DESC
如果是在首页调用,需要去掉$typeid。BTW:如果要在非搜索结果页都要去掉$typeid
{loop $keywords $k=>$v} < a href ="/index.php?typeid={$v['typeid']}&m=search&c=index&a=init&q={$v['keyword']}" > {$v['keyword']} </ a > {/loop}
{/pc}
OK了,DIY完成!