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