Разбор xml и импорт в modx

Один из поставщиков даёт прайсы в формате XML.
В настройках каждого товара я указываю его id в данном xml-прайсе.
Каждое утро я кроном забираю файл со свежими ценами с сервера поставщика.

Направьте, пожалуйста, на дальнейшие действия.

Писать сниппет, чтоб при открытии страницы обновлялась цена с xmlки или как-то единоразово или централизованно массово апдейтнуть цены?

P.S.: Подскажите решения для этого, если таковые имеются
Evgeniy
22 января 2018, 13:52
modx.pro
1
3 325
0

Комментарии: 2

Павел Романов
22 января 2018, 17:05
+1
Можете с в скрипте, которым забираете файл подключить API и реализовать любую нужную MODX-логику.
Можете написать сниппет и запускать его через CronManager.
    Андрей
    22 января 2018, 17:22
    2
    +2
    Написать парсер xml и так же по крону обновлять товары.

    Просто в файле подключаете 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();
    }
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      2