做織夢(5.7)商城,會用到按銷量,價格等自定義模型字段排序列表,這時就需使用freelist標(biāo)簽。但freelist標(biāo)簽不支持按照自定義字段排序,實現(xiàn)此功能的解決辦法如下:以添加按商品價格(自定義字段名:price)排序為例1、打開后臺模板dede/templets/freelist_add.htm 找到大概243行<select name="orderby" id="orderby" style="width:120">,為其添加一個選項到最后 結(jié)果如下: <select name="orderby" id="orderby" style="width:120"> <option value="sortrank">置頂權(quán)限值</option> <option value="pubdate" selected>發(fā)布時間</option> <option value="senddate">錄入時間</option> <option value="click">點擊量</option> <option value="id">文檔ID</option> <option value="lastpost">最后評論時間</option> <option value="postnum">評論總數(shù)</option> <option value="price">商品價格</option> </select> 保存關(guān)閉2、打開后臺模板dede/templets/freelist_edit.htm 找到大概219行 $sorta = "sortrank,置頂權(quán)限值;pubdate,發(fā)布時間;... ,為其添加一個選項到最后 結(jié)果如下: $sorta = "sortrank,置頂權(quán)限值;pubdate,發(fā)布時間;senddate,錄入時間;click,點擊量;id,文檔ID,lastpost,最后評論時間;postnum,評論總數(shù);rand,隨機獲取;price,商品價格"; 然后在下方<select name="orderby" id="orderby" style="width:120">最后同樣添加一個選項 <select name="orderby" id="orderby" style="width:120"> <?php echo "<option value=\"$orderby\" selected>{$sortarrs[$orderby]}</option>\r\n"; ?> <option value="sortrank">置頂權(quán)限值</option> <option value="pubdate">發(fā)布時間</option> <option value="senddate">錄入時間</option> <option value="click">點擊量</option> <option value="id">文檔ID</option> <option value="lastpost">最后評論時間</option> <option value="postnum">評論總數(shù)</option> <option value="price">商品價格</option> </select> 保存關(guān)閉3、添加自由列表時,就可以選擇“商品排序”這個選項了。4、打開include/arc.freelist.class.php 找到 //排序方式 $ordersql = ""; if($orderby=="senddate") 這段代碼,在最后一個else前面添加一段代碼,結(jié)果如下://排序方式 $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的值 查詢語句會出錯。調(diào)換以后的結(jié)果為: //獲得附加表的相關(guān)信息 $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"; } 保存關(guān)閉。 至此,大功告成,如需添加其他字段,按照此方法處理即可。
此方法較適用于分類不太多的情況,如果分類太多,那生成的列表就太多,需要考慮別的解決方案了。
本頁內(nèi)容由塔燈網(wǎng)絡(luò)科技有限公司通過網(wǎng)絡(luò)收集編輯所得,所有資料僅供用戶參考了本站不擁有所有權(quán),如您認(rèn)為本網(wǎng)頁中由涉嫌抄襲的內(nèi)容,請及時與我們聯(lián)系,并提供相關(guān)證據(jù),工作人員會在5工作日內(nèi)聯(lián)系您,一經(jīng)查實,本站立刻刪除侵權(quán)內(nèi)容。本文鏈接:http://www.juherenli.com/11261.html