SOLVED
请参阅下面的答案 .
BACKGROUND
任何熟悉zen cart的人都会知道它配备了世界上最无意义的产品排序选项,即alpha下拉分拣机 .
基本上它的作用是允许您通过它们开头的字母/数字来选择产品 . 好吧,当我购物时,项目的起始字母很少是一个有用的标准,所以我正在尝试创建一个更有用的产品分类器,它将对添加的日期,价格和产品名称进行排序 . 然后根据属性类别进行过滤 .
PROBLEM
所以我设法强迫分拣机做我自己的查询,这是除了价格之外的所有事情 .
这是我目前设置的价格下拉产生的SQL:
SELECT DISTINCT p.products_id, p.products_type, p.master_categories_id
,p.manufacturers_id, p.products_price, p.products_tax_class_id
,pd.products_description
,IF(s.status = 1, s.specials_new_products_price, NULL)
AS specials_new_products_price
,IF(s.status =1, s.specials_new_products_price, p.products_price)
AS final_price
,p.products_sort_order
,p.product_is_call
,p.product_is_always_free_shipping
,p.products_qty_box_status
FROM products p
LEFT JOIN specials s on p.products_id = s.products_id
LEFT JOIN products_description pd on p.products_id = pd.products_id
JOIN products_to_categories p2c on p.products_id = p2c.products_id
WHERE p.products_status = 1
and pd.language_id = '1'
and p2c.categories_id = '1'
GROUP BY p.products_id
ORDER BY final_price ASC
正如您所看到的,我正在尝试根据最终价格进行排序,最终价格是正常价格或特殊价格(如果设置)的别名 . 这通过phpmyadmin工作正常 . 不幸的是,这不通过zen购物车,我收到PHP错误:
PHP致命错误:1054:'order子句'中的未知列'final_price':: SELECT p.products_id,p.products_price_sorter,p.master_categories_id,p.manufacturers_id FROM products p LEFT JOIN specials s on p.products_id = s.products_id LEFT JOIN products_description pd on p.products_id = pd.products_id JOIN products_to_categories p2c on p.products_id = p2c.products_id WHERE p.products_status = 1 \ r \ n和pd.language_id ='1'\ r \ n和p2c.categories_id = '1'GROUP BY p.products_id在101行/var/www/includes/classes/db/mysql/query_factory.php中的final_price ASC订购
所以我查看了第101行,它引用了数据库抽象类中的错误处理方法 . 有没有人有任何想法在这里出了什么问题以及如何解决它?
2 回答
'final_price'实际上不是数据库中的字段;它是购物车对象中每个订单项条目的一部分 . 您可以使用数据库按基准价格(也不是按属性定价且没有其他定价属性的产品的最终价格)进行排序 .
感谢所有看过这个的人 . 我设法解决了这个问题 . 不知道为什么,但我从错误消息中注意到别名没有通过db抽象类 . 但是,它正在 生产环境 p.products_price_sorter . 所以我设法使用以下方式对价格进行排序:
希望这有助于某人
UPDATE
经过几天的努力让这个工作和玩得很好,这个插件是由Scott Wilson建议的:http://www.zen-cart.com/downloads.php?do=file&id=1612所以,如果你正在阅读它,可能值得一试 - 它允许在高级搜索和类别页面上对你的产品进行自定义排序 .