如何解决phpcms关联文章排序不变的问题
发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,这篇文章运用简单易懂的例子给大家介绍如何解决phpcms关联文章排序不变的问题,代码非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。phpcms关联文章排序不变问题的修改方法:打开 ph
千家信息网最后更新 2025年12月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安全错误
数据库的锁怎样保障安全
手机连接不上服务器怎么办
网络技术公司的营销策略
英国网络安全研究生
绝地逃生2服务器连接不了
服务器服务器试用
我的世界西瓜视频服务器怎么玩
武汉黑狐网络技术
永劫无间服务器价格
网络安全与防御技术
俄罗斯游戏数据库
服务器系统界面
为什么要进行软件开发设计
网络安全漫画图片大全简单
河南景行网络技术
数据库三者有什么联系
访问服务器时显示网络错误
gis软件开发竞赛口号
java软件开发的课程
手机网络安全应该怎么做
x86服务器与电脑区别
战舰世界一直连不上服务器
阿里云服务器到期没续费多久作废
以后网络安全可以做什么
达梦数据库配置助手功能
成都到达州有几个服务器
python数据库筛选
无法连接数据库bat
服务器安全组为什么刷新不到
数据量大数据库
春节及两会网络安全