问题描述
我正在尝试编写库存导入脚本以从远程XML提要中更新库存,但是我在过滤产品集合以获取当前库存数量时遇到了麻烦。
我在Feed中没有产品ID或SKU,但是确实有产品属性,所有这些属性结合在一起,将找到唯一的产品记录,因此我必须使用这些过滤我的收藏。
这是XML feed的示例
<?xml version="1.0" encoding="UTF-8"?>
<STOREITEMS>
<PRODUCT ITEM="786766786">
<STOCK>8</STOCK>
</PRODUCT>
<PRODUCT ITEM="766766867">
<STOCK>0</STOCK>
</PRODUCT>
<PRODUCT ITEM="768767868">
<STOCK Size="S/M" Color="White">2</STOCK>
<STOCK Size="M/L" Color="White">2</STOCK>
<STOCK Size="S/M" Color="Black">2</STOCK>
<STOCK Size="M/L" Color="Black">2</STOCK>
</PRODUCT>
<PRODUCT ITEM="897897897">
<STOCK>2</STOCK>
</PRODUCT>
</STOREITEMS>
因此,示例中检索唯一商品所需的属性为“商品”,“尺寸”和“颜色”。
到目前为止,我的代码看起来像这样
libxml_use_internal_errors(true);
$products = Mage::getResourceModel('catalog/product_collection')->addAttributeToSelect('*');
$xmldata = simplexml_load_file($remotefeed);
foreach ($xmldata->children() as $product) {
$products->addFieldToFilter('item',strtolower($product['ITEM']));
foreach ($product->STOCK as $feedQty) {
$atts = $feedQty->attributes();
if (!empty($atts)) {
foreach ($atts as $key => $value) {
$products->addFieldToFilter(strtolower($key),strtolower($value));
}
}
$product = $products->load()->getFirstItem();
$stockItem = Mage::getModel('cataloginventory/stock_item')->loadByProduct($product);
$stockItem->setQty($feedQty);
$stockItem->save();
}
}
就像我说的那样,我无法过滤产品集合并不能获得现有库存-$ mageQty根本不返回任何东西。
我知道我可能在这里犯了一些错误,但是到目前为止,在网上没有找到任何可以帮助的指南-谁能告诉我我要去哪里?
解决方法
我不清楚您要做什么,但是如果其中一部分是要从每个<STOCK>
节点中提取文本值,则下面的内容会将它们提取到一个数组中,以供以后使用出于任何目的。
由于您正在处理xml,因此xpath是提取数据的最佳方法:
$string = <<<XML
//[your xml above]
XML;
$xml = simplexml_load_string($string);
$stocks = $xml->xpath("//PRODUCT/STOCK//text()");
foreach ($stocks as $stock) {
echo $stock,' ';}
输出:
8 0 2 2 2 2 2