我正在尝试将产品从 Prestashop 1.7 导出到 XML。一切正常,但脚本多次导出产品,具体取决于所属类别。例如 Product1 在 All products - Clothes - Men 中,在这种情况下将以 XML 导出 3 次。我尝试使用基于产品 ID 的 array_unique,但它不起作用。有人可以给我指出正确的方向吗?完整的代码可以在这里找到: https: //pastebin.com/MQxfYSj2在这部分代码中,我尝试使用 array_unique 但没有结果: private function getProductFromArray($arrProduct){ $objProduct = new Okazii_Connector_Product(); $objProduct->ID = $arrProduct['id_product']; $objProduct->UniqueID = $arrProduct['id_product']; $objProduct->Title = $arrProduct['name']; if (mb_strlen($arrProduct['description']) > 3){ $objProduct->Description = $arrProduct['description']; } else if (mb_strlen($arrProduct['description_short'])) { $objProduct->Description = $arrProduct['description_short']; } else { $objProduct->Description = $arrProduct['name']; } $objProduct->Amount = $arrProduct['quantity']; if ($objProduct->Amount == 0){ $objProduct->Amount = $this->getAmountFromStock($arrProduct['id_product']); } $objProduct->Category = $this->getCategoryString($arrProduct['id_category']); $objProduct->Currency = $this->getCurrency(); $objProduct->Price = $arrProduct['price']; if(!empty($arrProduct['available_now']) && $objProduct->Amount > 0) { $objProduct->InStock = $arrProduct['available_now']; } if(!empty($arrProduct['gtin'])) { $objProduct->GTIN = $arrProduct['gtin']; } else if(!empty($arrProduct['ean13'])) { $objProduct->GTIN = $arrProduct['ean13']; } else if(!empty($arrProduct['isbn'])) { $objProduct->GTIN = $arrProduct['isbn']; } $this->setProductImages($objProduct); $this->setProductBrand($objProduct, $arrProduct['id_manufacturer']); return $objProduct;}我还尝试在脚本顶部仅获取基于产品 ID 的唯一产品,但效果不佳。其他有用信息:PHP 7.2、Prestashop 1.7.6.5
1 回答
宝慕林4294392
TA贡献2021条经验 获得超8个赞
尝试在类的最开始创建一个属性,例如
private $exportedProductsIds = [];
然后在每次迭代之后,在返回之前将导出的产品 ID 放入其中
array_push($this->exportedProductsIds, $objProduct->id);
然后在运行前添加验证,如果 id 已经在$exportedProductsIds然后跳过迭代
if (!in_array($objProduct->id, $this->exportedProductsIds)) {
//run your code
}
但我认为放置此代码的最佳位置是您调用getProductFromArray方法的地方。
我假设是这样的
private function exportProducts($products)
{
foreach ($products as $product) {
if (in_array($objProduct->id, $this->exportedProductsIds)) {
continue;
}
if ($this->getProductFromArray($arrProduct)) {
array_push($this->exportedProductsIds, $objProduct->id);
}
}
}
- 1 回答
- 0 关注
- 106 浏览
添加回答
举报
0/150
提交
取消