我正在构建的网站正在迁移产品信息,其中包括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();
许可以下: CC-BY-SA归因
scroll top