【问题标题】:Add products to Magento programmatically and increment sku?以编程方式将产品添加到 Magento 并增加 sku?
【发布时间】:2014-08-23 19:26:48
【问题描述】:

我正在尝试编写一个脚本来使用 php/mage 将 10 个产品添加到 Magento。

这是我目前在 Magento 1.8.1 中所拥有的

<?php
ini_set('memory_limit', '-1');
ini_set('display_errors', '1');
error_reporting(E_ALL);
require '../app/Mage.php';
$app = Mage::app('default');
set_time_limit(0);
$product = Mage::getModel('catalog/product');
$sku = 1;

do {
$product->setName(trim(strip_tags('Unnamed Product')));
$product->setDescription(trim(strip_tags('Description')));
$product->setShortDescription(trim(strip_tags('Short Description')));
$product->setSku($sku);
$product->setPrice(trim(strip_tags('19.99'))); # Set some price
$product->setWeight('1');
$product->setCreatedAt(strtotime('now'));
$product->setTypeId('simple');
$product->setTaxClassId(2); // taxable goods
$def_attribute_set = Mage::getModel('catalog/product')->getResource()->getEntityType()->getDefaultAttributeSetId();
$product->setAttributeSetId($def_attribute_set);
$stock_data=array(
'use_config_manage_stock' => 1,
'qty' => trim(strip_tags($data[13])),
'min_qty' => 0,
'use_config_min_qty'=>1,
'min_sale_qty' => 0,
'use_config_min_sale_qty'=>1,
'max_sale_qty' => 9999,
'use_config_max_sale_qty'=>1,
'is_qty_decimal' => 0,
'backorders' => 0,
'notify_stock_qty' => 1,
'is_in_stock' => 1
);
$product->setData('stock_data',$stock_data);
$product->setWebsiteIds(array(Mage::app()->getStore(true)->getWebsite()->getId()));
$product->setStatus(1);
$product->setVisibility(4);
$product->save();
$sku++;
} while ($sku<=10)

?>

我试图告诉它添加产品,将 sku 递增 1,然后继续添加和递增,直到达到 10。但是它只添加了一个产品,然后什么都不做?

编辑:已解决

这就是我所做的,我错过了设置产品 ID,所以它会停止,因为它们已经存在。 ID 没有增加,但 SKU 增加了!以下是工作代码:

工作代码

<?php
ini_set('memory_limit', '-1');
ini_set('display_errors', '1');
error_reporting(E_ALL);
require '../app/Mage.php';
$app = Mage::app('default');
set_time_limit(0);
$product = Mage::getModel('catalog/product');
$sku = 2;
$productid = 2;

do {
$product->setName(trim(strip_tags('Unnamed Product')));
$product->setDescription(trim(strip_tags('Description')));
$product->setShortDescription(trim(strip_tags('Short Description')));
$product->setSku($sku);
$product->setEntityId($productid);
$product->setPrice(trim(strip_tags('19.99'))); # Set some price
$product->setWeight('1');
$product->setCreatedAt(strtotime('now'));
$product->setTypeId('simple');
$product->setTaxClassId(2); // taxable goods
$def_attribute_set = Mage::getModel('catalog/product')->getResource()->getEntityType()->getDefaultAttributeSetId();
$product->setAttributeSetId($def_attribute_set);
$stock_data=array(
'use_config_manage_stock' => 1,
'qty' => trim(strip_tags($data[13])),
'min_qty' => 0,
'use_config_min_qty'=>1,
'min_sale_qty' => 0,
'use_config_min_sale_qty'=>1,
'max_sale_qty' => 9999,
'use_config_max_sale_qty'=>1,
'is_qty_decimal' => 0,
'backorders' => 0,
'notify_stock_qty' => 1,
'is_in_stock' => 1
);
$product->setData('stock_data',$stock_data);
$product->setWebsiteIds(array(Mage::app()->getStore(true)->getWebsite()->getId()));
$product->setStatus(1);
$product->setVisibility(4);
$product->save();
$sku++;
$productid++;
} while ($sku<=10)

?>

现在我只需要弄清楚如何检查 sku/ID 是否存在,如果存在 - 跳过它!

【问题讨论】:

  • set_time_limit(0);我建议不要使用它。如果需要将时间设置为 10000 或其他值,但不要设置为 0

标签: php magento


【解决方案1】:

即使您的代码可以正常工作,调用 $product-&gt;setEntityId($productid); 也是一种错误。
如果您再次运行您的脚本,您将不会获得 10 个新产品。您的旧产品将得到更新。

问题是您使用同一个产品实例来做所有事情。
因此,第一次运行时,您会获得一个新产品,第二次到第十次您会获得添加产品的更新。

您唯一需要做的就是在do-while 循环中包含$product = Mage::getModel('catalog/product');

类似这样的:

do {
$product = Mage::getModel('catalog/product');
$product->setName(trim(strip_tags('Unnamed Product')));
$product->setDescription(trim(strip_tags('Description')));
$product->setShortDescription(trim(strip_tags('Short Description')));
$product->setSku($sku);
$product->setPrice(trim(strip_tags('19.99'))); # Set some price
$product->setWeight('1');
$product->setCreatedAt(strtotime('now'));
$product->setTypeId('simple');
$product->setTaxClassId(2); // taxable goods
$def_attribute_set = Mage::getModel('catalog/product')->getResource()->getEntityType()->getDefaultAttributeSetId();
$product->setAttributeSetId($def_attribute_set);
$stock_data=array(
'use_config_manage_stock' => 1,
'qty' => trim(strip_tags($data[13])),
'min_qty' => 0,
'use_config_min_qty'=>1,
'min_sale_qty' => 0,
'use_config_min_sale_qty'=>1,
'max_sale_qty' => 9999,
'use_config_max_sale_qty'=>1,
'is_qty_decimal' => 0,
'backorders' => 0,
'notify_stock_qty' => 1,
'is_in_stock' => 1
);
$product->setData('stock_data',$stock_data);
$product->setWebsiteIds(array(Mage::app()->getStore(true)->getWebsite()->getId()));
$product->setStatus(1);
$product->setVisibility(4);
$product->save();
$sku++;
unset($product);//unset the var because you don't need it anymore.
} while ($sku<=10)

【讨论】:

    猜你喜欢
    • 2011-09-23
    • 2016-03-14
    • 2015-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多