我知道这是一个特定于框架的问题而不是一般的编程问题,但我已经在Magento StackExchange forums上提出了这个问题而没有得到回复。
我想用我所有简单产品的特价替换正常价格(特价将不再存在)。我对Magento很新,我不知道做这件事的最佳方法是什么。
我在考虑一个替换值的SQL查询,然后找到一种方法来禁用不再打折产品的特价。
我还在想我可以使用导入/导出工具导出包含所有折扣简单产品的列表,在Excel中更改其属性,然后使用Magmi导入新的csv,但默认的Magento导入/导出工具会对我来说效果不好(相同SKU的多行)。
有什么方法可以安全地做到这一点吗? Magmi是否能够禁用我产品的所有特价?
我的Magento版本是Magento 1.9
谢谢!
答案 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();
我抛出了一些命令行参数示例以获得良好的衡量标准,但通常是这样。
干杯。 :)