如何解决phpcms关联文章排序不变的问题
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章运用简单易懂的例子给大家介绍如何解决phpcms关联文章排序不变的问题,代码非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。phpcms关联文章排序不变问题的修改方法:打开 ph
千家信息网最后更新 2026年11月02日如何解决phpcms关联文章排序不变的问题
这篇文章运用简单易懂的例子给大家介绍如何解决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}关于如何解决phpcms关联文章排序不变的问题就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
排序
代码
文章
内容
标签
问题
参数
方法
关联
模板
更多
模型
帮助
查询
不错
陈旧
也就是
例子
关键
关键字
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
上海卓越科技互联网
互联网科技公司华为
互联网金融 金融科技
极限挑战互联网科技
壕鑫互联网络科技
米客互联网科技
科技互联网创业计划书
博兴的互联网电子科技公司
宁波青枫互联网科技有限公司
上海宁丞科技互联网
崇明区互联网教育科技诚信经营
湖南一路畅行互联网科技
互联网5g黑科技有哪些
互联网科技如何创业
深圳互联网科技的发展
江苏互联网智能科技软件
互联网科技企业商标注意事项
北京互联网科技类企业分布
广西泛欧互联网科技有限公司
互联网科技自媒体灵感
善班互联网科技有限公司
腾讯科技 互联网女皇
互联网科技logo设计
富国互联网科技创新基金
互联网和高科技公司
隆华科技工业互联网
深圳前海聚择互联网科技有限公司
保险科技服务互联网营销体系
广州梦谷互联网科技有限公司领导
悟空问答互联网科技