【问题标题】:Set product price to be equal to the special price for all simple products设置产品价格等于所有简单产品的特价
【发布时间】:2018-03-27 21:42:18
【问题描述】:

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

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

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

我还想我可以使用导入/导出工具导出所有打折简单产品的列表,在 Excel 中更改它们的属性,然后使用 Magmi 导入新的 csv,但默认的 Magento 导入/导出工具可以对我来说不太好(同一个 SKU 多行)。

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

我的 Magento 版本是 Magento 1.9

谢谢!

【问题讨论】:

    标签: php sql magento magento-1.9 magmi


    【解决方案1】:

    我个人的偏好是使用 Magento shell 脚本。您可以在shell 目录下找到一些示例。

    创建一个后,您可以简单地调用它:

    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();
    

    我扔了一些命令行参数的例子来很好衡量,但通常就是这样。

    干杯。 :)

    【讨论】:

    • 太棒了,谢谢!我认为这种方法比我考虑的解决方案更优雅,我会尽快尝试这种方法:)
    • 祝你好运... ;)
    • 哇哦! :) 不要忘记标记正确答案。 ;)
    猜你喜欢
    • 2013-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多