phpcms listorder推荐位排序问题解决办法 action="position"

phpcms在使用 action="position" 调用推荐位排序时,默认用的是order="listorder DESC"

查看 v9_position_data 数据表,就会发现其中 id  和 listorder是相同的。

原因是在添加文件时,如果勾选了某个推荐位,这条信息会被添加到 v9_position_data 表中,同时listorder也就成了信息id。

在后台使用排序功能,人为干预排序序号时,推荐位是无效的。

这样就产生了一个问题,在order="listorder DESC"下,也就是默认id降序排序下,如果其中一个模型的id到5000了,另一个模型的id才刚从1开始,那即使将从1开始的这个模型中的文章选择了推荐位,在前台调用推荐位的位置也是没有的。

原因就是这个id太小了,远小于5000,如果在id5000的这个模型中有别的推荐,那小id的这个自然就没能在 num="10"中出现了。

情况就是这样,解决办法:

1、打开文件:/phpcms/modules/admin/classes/push_api.class.php 将:

$info['id'] = $info['listorder'] = $d['id'];
 
改为:
 
$info['id'] = $d['id'];

 

 phpcms listorder推荐位排序问题解决办法 action=

2、打开文件:/phpcms/modules/content/content.php 找到:

foreach($_POST['listorders'] as $id => $listorder) {
      $this->db->update(array('listorder'=>$listorder),array('id'=>$id));
}
 
在上面的后面加上
 
//PHPCMS v9 推荐位排序问题解决办法 2021.1.10 Linyufan.com
//更改推荐位排序开始
   $this->db_config = pc_base::load_config('database');
   $tablepre = $this->db_config['default']['tablepre'];
   $this->db->table_name = $tablepre."position_data";
   foreach($_POST['listorders'] as $id => $listorder) {
$r = $this->db->get_one(array('id'=>$id));
if($r['posid']){
  $this->db->update(array('listorder'=>$listorder),array('id'=>$id,modelid=>$modelid));
}
   }
//更改推荐位排序结束
//PHPCMS v9 推荐位排序问题解决办法 2021.1.10 Linyufan.com
 

最后选择排序,就可以正常使用推荐功能了。

最后需要注意的一个问题是,content_data排序字段设置的是tinyint,最好换一个,否则最高是255。

返回列表
上一篇: