php排序商品价格的功能,织梦做商城,按销量,价格等自定义模型字段排序列表解决方案...

做织梦(5.7)商城,会用到按销量,价格等自定义模型字段排序列表,这时就需使用freelist标签。但freelist标签

不支持按照自定义字段排序,实现此功能的解决办法如下:

以添加按商品价格(自定义字段名:price)排序为例

1、打开后台模板dede/templets/freelist_add.htm

找到大概243行,为其添加一个选项到最后

结果如下:

置顶权限值

发布时间

录入时间

点击量

文档ID

最后评论时间

评论总数

商品价格

保存关闭

2、打开后台模板dede/templets/freelist_edit.htm

找到大概219行 $sorta = "sortrank,置顶权限值;pubdate,发布时间;... ,为其添加一个选项到最后

结果如下:

$sorta = "sortrank,置顶权限值;pubdate,发布时间;senddate,录入时间;click,点击量;id,文档ID,lastpost,最后评论时间;postnum,评论总数;rand,随机获取;price,商品价格";

然后在下方最后同样添加一个选项

echo "{$sortarrs[$orderby]}\r\n";

?>

置顶权限值

发布时间

录入时间

点击量

文档ID

最后评论时间

评论总数

商品价格

保存关闭

3、添加自由列表时,就可以选择“商品排序”这个选项了。

4、打开include/arc.freelist.class.php

找到

//排序方式

$ordersql = "";

if($orderby=="senddate")

这段代码,在最后一个else前面添加一段代码,结果如下:

//排序方式

$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";

}

最后最重要的一点:把下面一段代码位置提前到排序这段代码的前面来,否则无法取到$addtable的值

查询语句会出错。调换以后的结果为:

//获得附加表的相关信息

$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;

}

}

}

}

}

//排序方式

$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";

}

保存关闭。

至此,大功告成,如需添加其他字段,按照此方法处理即可。

此方法较适用于分类不太多的情况,如果分类太多,那生成的列表就太多,需要考虑别的解决方案了。 ad51e517755f8fd6a7ec83ced4ecfaf3.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值