Magento-クロスセル製品の更新/追加のプログラミング
-
16-10-2019 - |
質問
私が構築しているサイトは、クロスセルを含む製品情報を移行しています(これは複数の場合もあります)。ローカルデータベースでは、製品SKUおよびエンティティIDに関する情報を入力しました。私のスクリプトはこの情報を取り、Cross Sells Associationを作成します。私が抱えている問題は、これらの製品でいくつかのクロス販売が手動で行われており、このスクリプトを実行すると、既存のクロスセールのすべてを書きすぎます。
私のコードは次のとおりです。
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/>";
}
}
私に本当に必要なのは、クロス販売製品を更新するが、既存のクロスセル製品を上書きしないことです。
どんな助けも大歓迎です。
解決
あなたはあなたを構築することができます $param
既存のデータと既にCrosssellsとして割り当てられている製品とマージすることにより、配列。
このようなクロスセルのリストを取得できます。
$crosssells = $product->getCrossSellProducts();
これにより、製品とのコレクションが提供されます。それをint int int arrayと同じ形式の配列 $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();
所属していません magento.stackexchange