使用 dede:list 和 dede:arclist 按权重排序的方法
在织梦CMS(DedeCMS)中,dede:list
和dede:arclist
标签是用于生成文章列表的常用标签,为了实现更复杂的排序需求,比如按权重对文章进行排序,可以通过修改系统文件来实现,下面详细介绍如何通过修改代码实现这一功能。
dede:list 按权重排序的方法
1、找到并编辑文件:
打开织梦CMS系统的根目录,找到includearc.listview.class.php
文件,并使用文本编辑器打开。
2、添加权重排序代码:
在第727行处,添加以下代码:
“`php
// 排序方式
$ordersql = ”;
if($orderby=="senddate" || $orderby=="id") {
$ordersql=" ORDER BY arc.id $orderWay";
} else if($orderby=="hot" || $orderby=="click") {
$ordersql = " ORDER BY arc.click $orderWay";
} else if($orderby=="lastpost") {
$ordersql = " ORDER BY arc.lastpost $orderWay";
} else if($orderby=="weight") {
$ordersql = " ORDER BY arc.weight $orderWay";
} else {
$ordersql=" ORDER BY arc.sortrank $orderWay";
}
“`
3、修改联合查询部分:
在第778行处,找到如下代码:
“`php
// 如果不用默认的sortrank或id排序,使用联合查询(数据量大时非常缓慢)
if(preg_match(‘/hot|click|lastpost|weight/’, $orderby))
“`
在上述代码后面添加:
“`php
$ordersql .= " ORDER BY arc.weight $orderWay";
“`
4、标签调用:
在模板文件中使用以下标签调用:
“`html
{dede:list orderby=’weight’ orderway=’asc’}
“`
这样,dede:list
标签就可以按权重进行排序了,并且在动静态状态下测试均可成功。
二、dede:arclist 按权重排序的方法
1、找到并编辑文件:
打开织梦CMS系统的根目录,找到includetaglibarclist.lib.php
文件,并使用文本编辑器打开。
2、修改权重判断代码:
在第74、75行处,将原来的代码:
“`php
// arclist是否需要weight排序,默认为"N",如果需要排序则设置为"Y"
$isweight = $ctag>GetAtt(‘isweight’);
“`
修改为:
“`php
$weight = $ctag>GetAtt(‘weight’);
“`
3、修改文档排序方式:
在第327行处,找到如下代码:
“`php
// 文档排序的方式
$ordersql = ”;
if($orderby==’hot’ || $orderby==’click’) $ordersql = " ORDER BY arc.click $orderWay";
else if($orderby == ‘sortrank’ || $orderby==’pubdate’) $ordersql = " ORDER BY arc.sortrank $orderWay";
else if($orderby == ‘id’) $ordersql = " ORDER BY arc.id $orderWay";
else if($orderby == ‘near’) $ordersql = " ORDER BY ABS(arc.id ".$arcid.")";
else if($orderby == ‘lastpost’) $ordersql = " ORDER BY arc.lastpost $orderWay";
else if($orderby == ‘scores’) $ordersql = " ORDER BY arc.scores $orderWay";
else if($orderby == ‘rand’) $ordersql = " ORDER BY rand()";
else $ordersql = " ORDER BY arc.sortrank $orderWay";
“`
在上述代码后面添加:
“`php
else if($orderby == ‘weight’) $ordersql = " order by arc.weight asc"; // 插入这句从小到大
“`
4、标签调用:
在模板文件中使用以下标签调用:
“`html
{dede:arclist orderby=’weight’}
“`
dede:arclist
标签也可以按权重进行排序了。
表格对比归纳
修改文件 | 修改位置 | 修改内容 | |
dede:list | includearc.listview.class.php | 第727行 | 增加ORDER BY arc.weight $orderWay 语句 |
第778行 | 增加if(preg_match('/weight/', $orderby)) 判断,并在其后添加ORDER BY arc.weight $orderWay 语句 | ||
dede:arclist | includetaglibarclist.lib.php | 第74、75行 | 将$isweight = $ctag>GetAtt('isweight'); 改为$weight = $ctag>GetAtt('weight'); |
第327行 | 增加else if($orderby == 'weight') $ordersql = " order by arc.weight asc"; 语句 |
FAQs
1、问题:如何在DEDECMS中按自定义字段排序?
答案:要在DEDECMS中按自定义字段排序,首先需要在数据库中添加该字段,然后修改相应的PHP文件来支持新的排序字段,如果要按名为NewField
的字段排序,可以修改arc.listview.class.php
文件,在第560行至562行处添加如下代码:
“`php
else if($orderby=="NewField") {
$ordersql = " order by arc.NewField $orderWay";
}
“`
在第603行处添加:
“`php
if(ereg(‘hot|click|lastpost|NewField’,$orderby))
“`
2、问题:为什么按权重排序后,文章顺序没有变化?
答案:如果在按权重排序后文章顺序没有变化,可能是因为未正确设置权重值,确保在录入文章时手动调整每篇文章的权重值,检查修改后的代码是否正确生效,可以在模板文件中使用{dede:list orderby='weight' orderway='asc'}
或{dede:arclist orderby='weight'}
标签来测试排序效果,如果问题仍未解决,请确认修改的文件路径和代码位置是否准确无误。
“`html
使用dede列表标签按权重排序
在织梦CMS中,使用dede列表标签如dede:list和dede:arclist可以方便地生成列表内容,以下是如何根据权重对列表进行排序的方法:
使用dede:arclist标签
dede:arclist标签是生成文章列表的主要标签,它允许你根据不同的条件进行排序。
<dede:arclist
titlelen="30" row="10" pagesize="10" sort="weight" flag="h" channelid="1" listtype="image" template="list_article.htm">
<!列表内容模板 >
</dede:arclist>
使用dede:list标签
dede:list标签用于生成目录或列表,也可以根据权重进行排序。
<dede:list
typeid="1" row="10" pagesize="10" sort="weight" template="list_article.htm">
<!列表内容模板 >
</dede:list>
参数说明
- sort=”weight”: 指定按照权重排序。
- row: 指定每页显示的行数。
- pagesize: 指定每页显示的文章数量。
- typeid: 指定文章类型ID。
- channelid: 指定频道ID。
- flag: 指定文章标记,如热点文章。
- listtype: 指定列表类型,如图片列表。
- template: 指定模板文件。
“`
代码展示了如何在织梦CMS中使用dede:arclist和dede:list标签根据权重对文章列表进行排序的方法,通过设置`sort=”weight”`参数,可以确保列表按照文章的权重进行排序。
原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/1122736.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复