-
Dedecms实现按销量、价格及自定义模型字段排序列表的方法
- 时间:2025-03-30 07:20:14 来源: 人气:29
在使用Dedecms CMS构建网店商城时,您可能需要按照销量、价格等自定义模型字段对列表进行排序。这时可以使用freelist标签来实现这一功能。然而,默认情况下,freelist标签并不支持按照自定义字段排序。以下是一个解决方法,帮助您实现按商品价格(自定义字段名: price)排序的功能。
### 步骤1:修改后台模板dede/templets/freelist_add.htm
打开文件`dede/templets/freelist_add.htm`,找到大约第243行的代码:
```html
```
在此代码后添加一个选项,结果如下:
复制代码
保存并关闭文件。
<select name="orderby" id="orderby" style="width:120">
<option value="sortrank">置顶权限值</option>
<option value="pubdate" selected>发布时间</option>
<option value="senddate">录入时间</option>
<option value="click">点击量</option>
<option value="id">文档ID</option>
<option value="lastpost">最后评论时间</option>
<option value="postnum">评论总数</option>
<option value="price">商品价格</option>
</select>
### 步骤2:修改后台模板dede/templets/freelist_edit.htm 打开文件`dede/templets/freelist_edit.htm`,找到大约第219行的代码: ```php $sorta = "sortrank,置顶权限值;pubdate,发布时间;... ``` 在此代码后添加一个选项,结果如下:
复制代码
然后,在下方的`
复制代码
$sorta = "sortrank,置顶权限值;pubdate,发布时间;senddate,录入时间;click,点击量;id,文档ID,lastpost,最后评论时间;postnum,评论总数;rand,随机获取;price,商品价格";
<select name="orderby" id="orderby" style="width:120">
<?php echo "<option value=\\"$orderby\\" selected>{$sortarrs[$orderby]}</option>\\r\\n"; ?>
<option value="sortrank">置顶权限值</option>
<option value="pubdate">发布时间</option>
<option value="senddate">录入时间</option>
<option value="click">点击量</option>
<option value="id">文档ID</option>
<option value="lastpost">最后评论时间</option>
<option value="postnum">评论总数</option>
<option value="price">商品价格</option>
</select>
### 步骤3:添加自由列表 完成上述步骤后,当您添加自由列表时,就可以选择“商品价格”这个排序选项了。
### 步骤4:修改include/arc.freelist.class.php 打开文件`include/arc.freelist.class.php`,找到以下代码段: ```php // 排序方式 $ordersql = ""; if($orderby=="senddate") ``` 在最后一个`else`前面添加一段代码,结果如下:
复制代码
确保将以下代码块提前到排序代码之前,以确保能够正确获取`$addtable`的值:
// 排序方式
$ordersql = "";
if($orderby=="senddate")
{
$ordersql=" ORDER BY arc.senddate $orderWay";
}
else if($orderby=="pubdate")
{
$ordersql=" ORDER BY arc.pubdate $orderWay";
}
else if($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=="scores")
{
$ordersql = " ORDER BY arc.scores $orderWay";
}
else if($orderby=="rand")
{
$ordersql = " ORDER BY rand()";
}
else if($orderby=="price") // 自定义商品频道按价格排序
{
$ordersql = " ORDER BY ".$addtable.".price";
}
else
{
$ordersql=" ORDER BY arc.sortrank $orderWay";
}
复制代码
保存并关闭文件。
至此,您已经成功实现了按商品价格排序的功能。如需添加其他字段,可参照此方法处理。这种方法适用于分类不多的情况,如果分类过多,则需要考虑其他解决方案。
// 获得附加表的相关信息
$addField = "";
$addJoin = "";
if(is_object($this->ChannelUnit))
{
$addtable = $this->ChannelUnit->ChannelInfos['addtable'];
if($addtable!="")
{
$addJoin = " LEFT JOIN $addtable ON arc.id = ".$addtable.".aid ";
$addField = "";
$fields = explode(",",$this->ChannelUnit->ChannelInfos['listfields']);
foreach($fields as $k=>$v)
{
$nfields[$v] = $k;
}
foreach($this->ChannelUnit->ChannelFields as $k=>$arr)
{
if(isset($nfields[$k]))
{
if(!empty($arr['rename']))
{
$addField .= ",".$addtable.".".$k." as ".$arr['rename'];
}
else
{
$addField .= ",".$addtable.".".$k;
}
}
}
}
}
相关文章
-
在网站建设与维护的过程中,优化代码结构和功能是提升网站性能的重要步骤。本文将介绍如何通过自定义函数实现文章删除时自动清理相关资源的功能,从而提高系统的整洁性和存储效率。以下是具体的操作步骤及代码实现。首先, 在 `/include` 目录下创建一个名为 `extend.func.php` 的文件...2025-03-31 -
在进行图片上传操作时,用户可能会遇到302错误以及带有ERROR提示的图片上传失败问题。这些问题可能由多种原因引发,因此本文将对这些情况进行整理,以帮助大家更有效地定位并解决问题。 第一种情况:图片文件本身损坏。 这种情况会导致系统返回ERROR错误提示,不过发生概率较低。如果怀疑是图片损坏导致的...2025-03-31 -
如果您正在寻找一种高效的方法来使用Dedecms模板搭建网站或论坛,那么本文将为您提供详尽的指导。从模板解压到最终完成配置,每一步都将清晰呈现,帮助您快速掌握整个流程。 第一步:解压Dedecms模板 将下载的Dedecms模板文件解压出来,确保所有文件完整无误。如下图所示: 第二步:获取D...2025-03-31 -

Dedecms Dede 附加表自定义字段与主表文章关联方法
在使用DedeCMS开发装修网站时,设计师和设计作品之间的关联是一个重要的功能需求。通常情况下,文章(作品)的内容部分存储在主表dede_addonarticle中,而自定义字段则存储在附加表dede_archives中。为了实现这一功能,可以采用以下两种方法。 ① 根据发布人调用相关文章; ...2025-03-31
