Magento-编程更新/添加交叉销售产品
-
16-10-2019 - |
题
我正在构建的网站正在迁移产品信息,其中包括Cross Sells(可能不止一个)。在本地数据库中,我将有关SKU和实体ID的信息提供了信息。我的脚本获取了这些信息,并创建了Cross Sells协会。我遇到的问题是在这些产品上进行了一些交叉销售,并且在运行此脚本时,它将过度编写所有现有的交叉销售。
我的代码是:
umask(0);
require_once '../app/Mage.php';
Mage::app('admin');
$sql = "SELECT * FROM books2";
$query = mysql_query($sql);
while($row = mysql_fetch_array($query)){
$collection = Mage::getModel('catalog/product')->getCollection();
$collection->addAttributeToSelect('*');
$collection->addFieldToFilter(array(
array('attribute'=>'sku', 'eq'=>$row['assocIsbn']),
));
echo "Looking at ".$row['assocIsbn']." relation prod id=".$row['magid']."<br/>";
foreach ($collection as $product) {
$magentoID = $row['magid'];
$param = array(
$magentoID=>array(
'position'=>1
)
);
$product->setCrossSellLinkData($param);
$product->save();
echo "Updated ".$row['assocIsbn']." with rel3 product of ".$magentoID." <br/>";
echo "<hr/>";
}
}
我真正需要的是,Crosss出售要更新的产品,但没有覆盖现有的Cross销售产品。
任何帮助深表感谢。
解决方案
你可以建立你的 $param
通过将现有数据与已经分配为Crossells的产品合并来进行数组。
您可以获取这样的十字架列表:
$crosssells = $product->getCrossSellProducts();
这将为您提供产品的收藏。将其转动以与形式相同的形式 $param
你可以这样做
$param = array();
$crosssells = $product->getCrossSellProducts();
foreach ($crosssells as $item) {
$param[$item->getId()] = array('position' => $item->getPosition());
}
现在你有 $param
所有现有的十字架都采用“友好”格式。
您需要做的就是添加新的十字架:
if (!isset($param[$magentoID])){ //prevent elements from beeing overwritten
$param[$magentoID]= array(
'position'=>1
)
}
之后,只需继续您的代码:
$product->setCrossSellLinkData($param);
$product->save();