Magento 产品列表中的类别随机排序

Magento product listing in categories randomnly sorted

在产品类别中导航时,产品会随机排序,而不是按位置排序。
您可以通过多次刷新此页面来查看错误:
http://www.jollia.fr/collection-bijoux.html
您每次都会看到不同的产品。

我没有对产品类别控制器进行任何更改。我试图重新索引产品和类别数据以及清空缓存。但没有解决这个问题。

要按位置对产品进行排序,您必须手动输入类别中每个产品的顺序,管理 > 目录 > 管理类别... Select 您的类别并转到类别产品选项卡。见下图。

如果不访问代码就无法调试。它可以是任何东西,从糟糕的扩展到糟糕的代码。我个人已经看到所谓的 Magento 开发人员的各种不良做法,他们根本不尝试了解 Magento 并认为他们可以做任何事情。作为最后的手段,他们的错误代码通常可以在模板中找到(对于类别列表,在 app/design/frontend/[YOUR_PACKAGE]/[YOUR_THEME]/template/catalog/product/list.phtml 中) .糟糕的 Magento 开发人员的杰作通常可以在模板中找到。

如果不是,请检查此块 (Mage_Catalog_Block_Product_List) 加载的产品集合的 sql。在app/design/frontend/[YOUR_PACKAGE]/[YOUR_THEME]/template/catalog/product/list.phtml的顶部,打印出集合的SQL:

$_productCollection=$this->getLoadedProductCollection();
$selectStr = (string)$_productCollection->getSelect();
var_dump($selectStr);

SQL 应该如下所示:

    SELECT `e`.*, `cat_index`.`position` AS `cat_index_position`, `price_index`.`price`, `price_index`.`tax_class_id`, `price_index`.`final_price`, IF(price_index.tier_price IS NOT NULL, LEAST(price_index.min_price, price_index.tier_price), price_index.min_price) AS `minimal_price`, `price_index`.`min_price`, `price_index`.`max_price`, `price_index`.`tier_price` FROM `catalog_product_entity` AS `e`
 INNER JOIN `catalog_category_product_index` AS `cat_index` ON cat_index.product_id=e.entity_id AND cat_index.store_id=1 AND cat_index.visibility IN(2, 4) AND cat_index.category_id = '24'
 INNER JOIN `catalog_product_index_price` AS `price_index` ON price_index.entity_id = e.entity_id AND price_index.website_id = '1' AND price_index.customer_group_id = 0 ORDER BY `cat_index`.`position` ASC LIMIT 12

查看 ORDER BY 子句以获取线索。如果您的 SQL 看起来不像上面那样,则可能是扩展正在修改集合。在加载集合之前调度了一个事件:catalog_block_product_list_collection。在 app/code/community 或 app/code/local 代码池中搜索 "catalog_block_product_list_collection" 的扩展,看看是否有任何扩展正在观察此事件并修改此集合。

该块也可以重写;在 app/code/community 和本地代码池中搜索:

extends Mage_Catalog_Block_Product_List

我亲眼目睹了开发人员采取的各种捷径,他们要么不知道更好,要么根本不关心。