将产品价格设置为等于所有简单产品的特价
Set product price to be equal to the special price for all simple products
我知道这是一个特定于框架的问题,而不是一个真正的通用编程问题,但我已经在 Magento StackExchange forums 上问过这个问题,但没有得到回复。
我想将我所有简单产品的正常价格替换为特价(特价将不再存在)。我是 Magento 的新手,我不知道最好的方法是什么。
我正在考虑一个 SQL 替换值的查询,然后找到一种方法来禁用不再打折的产品的特价。
我也在想我可以使用 Import/Export 工具导出一个包含所有打折简单产品的列表,在 Excel 中更改它们的属性,然后用 Magmi 导入新的 csv,但是默认的 Magento Import/Export 工具对我来说效果不佳(同一 SKU 的多行)。
有什么方法可以安全地做到这一点吗? Magmi 是否可以禁用我产品的所有特价?
我的 Magento 版本是 Magento 1.9
谢谢!
我个人的偏好是使用 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();
我加入了一些命令行参数示例作为衡量标准,但通常就是这样。
干杯。 :)
我知道这是一个特定于框架的问题,而不是一个真正的通用编程问题,但我已经在 Magento StackExchange forums 上问过这个问题,但没有得到回复。
我想将我所有简单产品的正常价格替换为特价(特价将不再存在)。我是 Magento 的新手,我不知道最好的方法是什么。
我正在考虑一个 SQL 替换值的查询,然后找到一种方法来禁用不再打折的产品的特价。
我也在想我可以使用 Import/Export 工具导出一个包含所有打折简单产品的列表,在 Excel 中更改它们的属性,然后用 Magmi 导入新的 csv,但是默认的 Magento Import/Export 工具对我来说效果不佳(同一 SKU 的多行)。
有什么方法可以安全地做到这一点吗? Magmi 是否可以禁用我产品的所有特价?
我的 Magento 版本是 Magento 1.9
谢谢!
我个人的偏好是使用 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();
我加入了一些命令行参数示例作为衡量标准,但通常就是这样。
干杯。 :)