循环过滤产品集合并检索库存数量

问题描述

我正在尝试编写库存导入脚本以从远程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 

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...