Курс 2016 года “Разработка на UMI.CMS от 0 до готового сайта”

0 Пользователей и 2 Гостей просматривают эту тему.

*

techengine

  • *
  • 4
  • +0/-0
    • Просмотр профиля
Интересует возможность автообновления цен на сайте из 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 (тут неясно, какой задействовать механизм?)
Вопрос: Как оцените: реальна ли такая возможность? Есть ли примеры подобной реализации?

*

techengine

  • *
  • 4
  • +0/-0
    • Просмотр профиля
Получилось как то так:

//Составляем данные из 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);
}
}
« Последнее редактирование: 31 Марта 2019, 13:45:15 от techengine »