一些比较重要的文章我们通常会设置为推荐,但是即使都是推荐的文章,也分重要程度的,如何把最重要的放到第一,把相对不重要的排序到后面呢? 首先来看下我写的推荐位文章列表代码
{pc:content action="position" posid="2" order="listorder DESC" num="10"}
{if $data}
{loop $data $v}
<li><a href="{$v['url']}">{$v['title']}</a></li>
{/loop}
{/if}
{/pc}
我本意是希望推荐序号为2的文章,能够按照listorder这个字段来进行排序,也就是后台文章列表最左侧的排序的数字,但是不尽人意的是根本就是无效的。咱们只能去数据库一探究竟了! 打开数据库查看v9_position_data表,结果你会发现,表中listorder字段跟id是一样的。找到造成这种情况的原因,并解决问题。 打开文件:/phpcms/modules/admin/classes/push_api.class.php 大概在136行,找到
$info['id'] = $info['listorder'] = $d['id'];
替换为
$info['id'] = $d['id'];
这样一来添加文章或者修改文章的时候就不会改动listorder的值了。 但单单这样还不行,因为推荐标签在取数据的时候,是根据v9_position_data表的listorder来排序的,但后台更新文章排序的时候,并没有更新v9_position_data这个表的listorder,所以得加上这个功能。 打开文件:/phpcms/modules/content/content.php 大概在460行,找到
foreach($_POST['listorders'] as $id => $listorder) {
$this->db->update(array('listorder'=>$listorder),array('id'=>$id));
}
在上面的后面加上
//更改推荐位排序开始
$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推荐位文章列表手动排序的问题。调用的代码我从一开始就写出来了,赶快动手实践一下吧!