Magento - программирование обновления/добавление продуктов Cross Sell

magento.stackexchange https://magento.stackexchange.com/questions/4304

Вопрос

Сайт, который я строю, является мигрирующей информации о продукте, которая включает в себя Cross Sells (что может быть более одного). В локальной базе данных я поместил информацию о SKU и идентификаторах объекта. Мой скрипт берет эту информацию и создает Ассоциацию Cross Sells. Проблема, которую я испытываю, заключается в том, что некоторые продажи на эти продукты были выполнены вручную, и при запуске этого сценария это будет переписать все существующие продажи Cross.

Мой код:

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/>";
    } 

}

Что мне действительно нужно, так это то, что Cross продает продукты, чтобы быть обновленными, но не перезаписывать существующие продукты Cross продает продукты.

Буду признателен за любую оказанную помощь.

Это было полезно?

Решение

Вы можете построить свой $param Массив, объединив существующие данные с продуктами, уже назначенными в качестве перекрестных сообщений.
Вы можете получить список кросс -сегментов, как это:

$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 с атрибуция
Не связан с magento.stackexchange
scroll top