Разбор xml и импорт в modx
        Один из поставщиков даёт прайсы в формате XML.
В настройках каждого товара я указываю его id в данном xml-прайсе.
Каждое утро я кроном забираю файл со свежими ценами с сервера поставщика.
Направьте, пожалуйста, на дальнейшие действия.
Писать сниппет, чтоб при открытии страницы обновлялась цена с xmlки или как-то единоразово или централизованно массово апдейтнуть цены?
P.S.: Подскажите решения для этого, если таковые имеются
    
    
                                                                                
            В настройках каждого товара я указываю его id в данном xml-прайсе.
Каждое утро я кроном забираю файл со свежими ценами с сервера поставщика.
Направьте, пожалуйста, на дальнейшие действия.
Писать сниппет, чтоб при открытии страницы обновлялась цена с xmlки или как-то единоразово или централизованно массово апдейтнуть цены?
P.S.: Подскажите решения для этого, если таковые имеются
Комментарии: 2
                Можете с в скрипте, которым забираете файл подключить API и реализовать любую нужную MODX-логику.
Можете написать сниппет и запускать его через CronManager.
                    Можете написать сниппет и запускать его через CronManager.
                Написать парсер xml и так же по крону обновлять товары.
Просто в файле подключаете modx api, разбираете xml и из готового массива с данными товаров обновляете цены с помощью процессора modx.
если очень схематично, то так
Если нужно обновлять только одно поле, то можно не через процессор а так
                    Просто в файле подключаете modx api, разбираете xml и из готового массива с данными товаров обновляете цены с помощью процессора modx.
если очень схематично, то так
// API
require_once '/absolute/path/to/modx/config.core.php';
require_once MODX_CORE_PATH.'model/modx/modx.class.php';
$modx = new modX();
$modx->initialize('mgr');
$modx->getService('error','error.modError', '', '');
//Разбор xml
$xmlData = array(); // данные о товарах
// Обновление товаров
foreach ($xmlData as $item) {
	$id = $item['id'];
	$action = 'create';
	if ($product = $modx->getObject('msProduct', $id)) {
		$data = $product->toArray();
		$data['price'] = $item['price'];
		$response = $modx->runProcessor('resource/'.$action, $data);
		if ($response->isError()) {
			$modx->log(1, $response->getResponse());
		}
	}
}Если нужно обновлять только одно поле, то можно не через процессор а так
if ($product = $modx->getObject('msProduct', $id)) {
	$product->set('price', $item['price']);
	$product->save();
}            
                            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.