Magento - программирование обновления/добавление продуктов Cross Sell
-
16-10-2019 - |
Вопрос
Сайт, который я строю, является мигрирующей информации о продукте, которая включает в себя 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();