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

时间:2016-11-28 12:49:38

标签: magento magento-1.9

我在Magento 1.9中有以下问题:其中有很多产品的类别,默认排序顺序是按位置,Magento后端的所有产品位置都是1.那么当你打开一个类别时会发生什么在前端,许多类似的产品首先显示另一组相似类型的产品。我想以某种方式随机化他们的位置(通过脚本或其他任何东西),以便不同类型的产品混合在一起。

例如我有葡萄酒类别, 香槟和威士忌及产品 在他们和我也有类别生日产品,包括这些类别的产品。当在前端打开类别时,首先会有很多威士忌产品 然后展示了很多葡萄酒......等我希望它们混合在一起。提前谢谢 任何帮助!

1 个答案:

答案 0 :(得分: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

所以foreach其中一个产品只是设置一个随机位置(这里介于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();