如何在 Magento 类别中分配随机产品位置?

how to assign random product positions in Magento category?

我在 Magento 1.9 中遇到以下问题:有些类别中有很多产品,默认排序顺序是按位置排序,而 Magento 后端中的所有产品位置都是 1。所以当您打开前端的一个类别首先显示很多类似的产品,然后是另一组类似的产品。我想以某种方式(通过脚本或其他方式)随机化它们的位置,以便不同种类的产品混合在一起显示。

例如我有类别葡萄酒, 香槟和威士忌及产品 在它们中,我也有类别生日产品,其中包括来自这些类别的产品。当这个类别首先在前端打开时,很多威士忌产品 然后展示了很多酒......等我想要他们混合。在此先感谢 任何帮助!

您可以如下操作:

首先获取类别:

$category = Mage::getModel('catalog/category')
->setStoreId(Mage_Core_Model_App::ADMIN_STORE_ID)
->load($categoryId);

那么它的产品位置:

$products = $category->getProductsPosition();

这将是一个这样组织的数组:

product_id_1 => position_1
product_id_1 => position_2

因此,对于这些产品中的每一个,只需设置一个随机位置(此处介于 0 和 9999 之间):

foreach($products as $productId => $position ){
    $products[$productId] = '' . rand(0,9999);
}

最后保存:

$category->setPostedProducts($products);
$category->save();

下面是一个脚本,您可以将其放入 /shell magento 目录:

<?php
require_once './abstract.php';

class RandomCategoryOrder extends Mage_Shell_Abstract {    
    private $_categoryId = 188;

    public function run(){
        $category = Mage::getModel('catalog/category')
        ->setStoreId(Mage_Core_Model_App::ADMIN_STORE_ID)
        ->load($this->_categoryId);

        $products = $category->getProductsPosition();

        foreach($products as $productId => $position ){
            $products[$productId] = '' . rand(0,9999);
        }

        $category->setPostedProducts($products);

        try{
            $category->save();
        }catch(Exception $e){
            echo $e->getMessage();
        }
    }    

}
$randowCategoryOrder = new RandomCategoryOrder();
$randowCategoryOrder->run();