将产品价格设定为等于所有简单产品的特价

时间:2018-03-27 21:42:19

标签: php sql magento magento-1.9 magmi

我知道这是一个特定于框架的问题而不是一般的编程问题,但我已经在Magento StackExchange forums上提出了这个问题而没有得到回复。

我想用我所有简单产品的特价替换正常价格(特价将不再存在)。我对Magento很新,我不知道做这件事的最佳方法是什么。

我在考虑一个替换值的SQL查询,然后找到一种方法来禁用不再打折产品的特价。

我还在想我可以使用导入/导出工具导出包含所有折扣简单产品的列表,在Excel中更改其属性,然后使用Magmi导入新的csv,但默认的Magento导入/导出工具会对我来说效果不好(相同SKU的多行)。

有什么方法可以安全地做到这一点吗? Magmi是否能够禁用我产品的所有特价?

我的Magento版本是Magento 1.9

谢谢!

1 个答案:

答案 0 :(得分:0)

我个人的偏好是使用Magento shell脚本。您可以在shell dir。

下找到一些示例

创建一个后,您可以通过以下方式调用它:

php shell/<script-name>.php

通过这种方式,您可以访问Magento的ORM,您可以更加安全地完成此任务。

实现这样的cli脚本应该很容易,但如果你需要帮助,这里是未经测试的版本::)

<?php

require_once 'abstract.php';

class Mage_Shell_SpecialPrice extends Mage_Shell_Abstract
{
    public function run()
    {
        if ($this->getArg('help')) {
            echo $this->usageHelp();
            return;
        }

        $collection = $this->_getProductCollection();

        /** @var Mage_Catalog_Model_Product $product */
        foreach ($collection as $product) {
            $product->setPrice($product->getSpecialPrice())
                ->setSpecialPrice(null);

            $product->getResource()->saveAttribute($product, 'price');
            $product->getResource()->saveAttribute($product, 'special_price');
        }
    }

    /**
     * @return Mage_Catalog_Model_Resource_Product_Collection
     */
    protected function _getProductCollection()
    {
        return Mage::getResourceModel('catalog/product_collection')
            ->addAttributeToFilter('special_price', array('notnull' => true))
            ->setOrder($this->getArg('limit') ?: 'created_at', $this->getArg('dir') ?: 'desc')
            ->setPageSize($this->getArg('limit') ?: 20);
    }

    /**
     * @return string
     */
    public function usageHelp()
    {
        return <<<USAGE
Usage:  php -f special-price.php
        php -f special-price.php --limit 20 --sort created_at --dir desc
USAGE;
    }
}

$shell = new Mage_Shell_SpecialPrice();
$shell->run();

我抛出了一些命令行参数示例以获得良好的衡量标准,但通常是这样。

干杯。 :)