UMIhelp

Разработка дополнительного функционала => Custom макросы => Тема начата: techengine от 27 Марта 2019, 19:34:06

Название: Обновление цен на сайте через CSV-выгрузку из торговой базы
Отправлено: techengine от 27 Марта 2019, 19:34:06
Интересует возможность автообновления цен на сайте из CSV-файла с помощью кастомного макроса

Формат CSV такой:
код_товара; цена
123456;100.50

В объектах каталога заведено поле [sku](код товара), с помощью которого и планируется организовать поиск нужного объекта и обновления значения поля [price]
Теоретически видится так - поиск по полю, которое должно совпадать со значением SKU и выбор obj_id получаемой записи с помощью Selector (http://api.docs.umi-cms.ru/razrabotka_nestandartnogo_funkcionala/proizvolnye_vyborki/selector/)
Следующий шаг - обновление поля [price] для страницы с выбранным obj_id (тут неясно, какой задействовать механизм?)
Вопрос: Как оцените: реальна ли такая возможность? Есть ли примеры подобной реализации?
Название: Re: Обновление цен на сайте через CSV-выгрузку из торговой базы
Отправлено: techengine от 28 Марта 2019, 20:26:20
Получилось как то так:

//Составляем данные из CSV в массив.
$parts = array();
$goods_dump = file('goods_dump.csv');
foreach ($goods_dump as $line) {
    $parts[] = explode(";", $line);
}
//Ключами элементов должны стать коды товара
$goods = array();
foreach ($parts as $value) {
$goods[$value[0]] = $value[1];
}

//Адрес корневой страницы каталога
define('CATALOG_URI', '/catalog-root-page/');

$hierarchy = umiHierarchy::getInstance();
$catID = $hierarchy->getIdByPath(CATALOG_URI);
if(!$catID) {
  echo "Нет такого адреса на сайте: ".CATALOG_URI;
  exit();
}
//Получаем все узлы
$nodes = $hierarchy->getChildrenTree($catID);

setNewValues($hierarchy, $nodes, $goods);

function setNewValues($hierarchy, $nodes, &$goods){
foreach ($nodes as $k => $node) {
if(empty($node)){
                        //Это объекты каталога
$item = $hierarchy->getElement($k);
echo $item->getName()."<br>";
                        //Замена значения sku значением из массива goods
$item->setValue("price", $goods[$item->getValue('sku')]);
continue;
}
//Это разделы каталога
$item = $hierarchy->getElement($k);
echo "<b>".$item->getName()."</b><br>";
setNewValues($hierarchy, $node, $goods);
}
}