### [phpcms关联文章排序不变怎么办?](https://www.prosaas.cn/article/4122) **Published:** 2020-06-10T01:41:31 **Author:** 5201314 **Excerpt:** phpcms排序不变怎么办?phpcms关联文章排序不变问题的修改方法:打开 phpcms/modules/c… ![](//zhiqipro.oss-cn-beijing.aliyuncs.com/2023/12/20231212122613688.jpg) **phpcms排序不变怎么办?** **phpcms关联文章排序不变问题的修改方法:** 打开 phpcms/modules/content/classes/content\_tag.class.php 内容模型标签类,发现该标签仅在内容存在人为设置的相关阅读时,则依照order参数进行排序。而当内容不存在人为设置的相关阅读时,则按照关键字进行查询,但此时并没有按照order参数进行排序。而是不进行排序。这也就是为什么文章调用的相关阅读总是那么陈旧的原因了。 修正该问题的方法如下: 修改 phpcms/modules/content/classes/content\_tag.class.php 内容模型标签类文件,将 content\_tag 类中 relation 方法修改为: 代码如下: /\*\* \* 相关文章标签 \* @param $data \*/ public function relation($data) { $catid = intval($data\['catid'\]); if(!$this->set\_modelid($catid)) return false; $order = $data\['order'\]; $sql = "\`status\`=99"; $limit = $data\['id'\] ? $data\['limit'\]+1 : $data\['limit'\]; if($data\['relation'\]) { $relations = explode('|',trim($data\['relation'\],'|')); $relations = array\_diff($relations, array(null)); $relations = implode(',',$relations); $sql = " \`id\` IN ($relations)"; $key\_array = $this->db->select($sql, '\*', $limit, $order,'','id'); } elseif($data\['keywords'\]) { $keywords = str\_replace('%', '',$data\['keywords'\]); $keywords\_arr = explode(' ',$keywords); $key\_array = array(); $number = 0; $i =1; foreach ($keywords\_arr as $\_k) { $sql2 = $sql." AND \`keywords\` LIKE '%$\_k%'".(isset($data\['id'\]) && intval($data\['id'\]) ? " AND \`id\` != '".abs(intval($data\['id'\]))."'" : ''); $r = $this->db->select($sql2, '\*', $limit, $order,'','id'); $number += count($r); foreach ($r as $id=>$v) { if($i<= $data\['limit'\] && !in\_array($id, $key\_array)) $key\_array\[$id\] = $v; $i++; } if($data\['limit'\]<$number) break; } } if($data\['id'\]) unset($key\_array\[$data\['id'\]\]); return $key\_array; } 其实只是将 $r = $this->db->select($sql2, '\*', $limit, '','','id'); 替换为了 $r = $this->db->select($sql2, '\*', $limit, $order,'','id'); 让order参数传入查询方法。 在模板当中,使用如下标签,加上order参数即可实现排序了。 代码如下: {pc:content action="relation" relation="$relation" id="$id" catid="$catid" num="5" keywords="$rs\[keywords\]" order="id DESC"} {loop $data $r} {/loop} {/pc} 如果有洁癖的朋友,担心直接修改PC会影响未来升级,可以将其单独提取出来。放到模板中当作函数使用。代码如下: 代码如下: set\_model($category\[$catid\]\['modelid'\]); $order = $data\['order'\]; $sql = "\`status\`=99"; $limit = $data\['id'\] ? $data\['limit'\]+1 : $data\['limit'\]; if($data\['relation'\]) { $relations = explode('|',trim($data\['relation'\],'|')); $relations = array\_diff($relations, array(null)); $relations = implode(',',$relations); $sql = " \`id\` IN ($relations)"; $key\_array = $db->select($sql, '\*', $limit, $order,'','id'); } elseif($data\['keywords'\]) { $keywords = str\_replace('%', '',$data\['keywords'\]); $keywords\_arr = explode(' ',$keywords); $key\_array = array(); $number = 0; $i =1; foreach ($keywords\_arr as $\_k) { $sql2 = $sql." AND \`keywords\` LIKE '%$\_k%'".(isset($data\['id'\]) && intval($data\['id'\]) ? " AND \`id\` != '".abs(intval($data\['id'\]))."'" : ''); $r = $db->select($sql2, '\*', $limit, $order,'','id'); $number += count($r); foreach ($r as $id=>$v) { if($i<= $data\['limit'\] && !in\_array($id, $key\_array)) $key\_array\[$id\] = $v; $i++; } if($data\['limit'\]<$number) break; } } if($data\['id'\]) unset($key\_array\[$data\['id'\]\]); return $key\_array; } ?> 在模板中,使用如下PHP代码获取即可。 代码如下: {php $data = mk1\_content\_tag\_relation(array('relation'=>$relation,'id'=>$id,'catid'=>$catid,'keywords'=>$rs\['keywords'\],'order'=>'id DESC','limit'=>'4')); } {loop $data $r} {/loop} 其实只是一个小问题,PC在未来应该会进行修正的,以上方法提供给那些心急的站长朋友们。 推荐教程:《PHP视频教程》 以上就是phpcms关联文章排序不变怎么办?的详细内容,更多请关注知企PROSAAS其它相关文章! **Categories:** PHPCMS ---