cron в компоненте msPriceList
Всем привет, на днях приобрели дополнение msPriceList. Встала задача повесить экспорт на cron. Покопался в процессорах и нашел некий процессор export.class.php, который принимает id
Что-то вроде такого
Что-то вроде такого
$exportPriceList = $modx->runProcessor('file/export',['id'=>1],['processors_path'=>MODX_CORE_PATH.'components/mspricelist/processors/mgr/']);
Текст ошибки следующий
[2019-03-27 10:00:38] (WARN @ /home/------/www/core/components/mspricelist/processors/mgr/file/export.class.php : 140)
PHP notice: Trying to get property 'subscriptions' of non-object
[2019-03-27 10:00:38] (INFO in msPriceListProcessor::process @ /home/------/www/core/components/mspricelist/processors/web/export.class.php : 122)
Запись в файл 100 шт.
Fatal error: Uncaught TypeError: Argument 1 passed to modRegistry::setLogging() must be an instance of modRegister,
string given, called in /home/------/www/core/components/mspricelist/processors/mgr/file/export.class.php on line 157 and defined in /home/------/www/core/model/modx/registry/modregistry.class.php:166 Stack trace:
#0 /home/----/www/core/components/mspricelist/processors/mgr/file/export.class.php(157): modRegistry->setLogging('HTML', NULL, 3)
#1 /home/-----/www/core/components/mspricelist/processors/mgr/file/export.class.php(60):
msPriceListFileGenerateProcessor->export()
#2 /home/-------/www/core/model/modx/modprocessor.class.php(177):
msPriceListFileGenerateProcessor->process()
#3 /home/-----/www/core/model/modx/modx.class.php(1764):
modProcessor->run()
#4 /home/-----/www/core/components/console/processors/exec.class.php(24) : eval()'d code(2):
modX->runProcessor('file/export', Array, Array)
#5 /home/----/www/core/components/console/processors/exec.class.php(24): eval()
#6 /home/-----/www/core/model/ in /home/s17546/www/core/model/modx/registry/modregistry.class.php on line 166
Поблагодарить автора
Отправить деньги
Комментарии: 17
Признак о том что работа осущевстляется через крон нужно тоже передавать crontab
$data = array(
'crontab' => true,
'id' => 1,
);
/* @var modProcessorResponse $response */
$response = $modx->runProcessor('file/export', $data, array(
'processors_path' => MODX_CORE_PATH . 'components/mspricelist/processors/mgr/'
));
if ($response->isError()) {
return $response->getAllErrors();
}
Спасибо за оперативность.
Теперь ошибка следующая
Теперь ошибка следующая
[2019-03-27 13:15:34] (ERROR @ /home/s17546/www/core/components/mspricelist/processors/web/export.class.php : 62) PHP warning: array_keys() expects parameter 1 to be array, null given
[2019-03-27 13:15:34] (ERROR @ /home/s17546/www/core/components/mspricelist/processors/mgr/file/export.class.php : 62) mspricelist_error_empty_resources
Родительская категория указана?
Да
доступ к админке сможешь предоставить в техподдержке?
Да, тебе скинут
Привет! Та же проблема вылезла с кроном. Не подскажешь, как удалось решить? Родитель, разумеется, указан, из админки этот прайс-лист создаётся без проблем
Как решили проблему? Вы в тех. поддержке не отвечаете.
Поддерживаю! Техподдержка с понедельника молчит.
Рабочее решение, благодарность @vectorserver:
define('MODX_API_MODE', true);
require '../index.php';
$modx->user = $modx->getObject('modUser', 1);
$msPriceList = $modx->getService('msPriceList', 'msPriceList', MODX_CORE_PATH . 'components/mspricelist/model/');
$modx->lexicon->load('mspricelist:default');
$corePath = $modx->getOption('mspricelist_core_path', null, $modx->getOption('core_path') . 'components/mspricelist/');
$path = $modx->getOption('processorsPath', $msPriceList->config, $corePath . 'processors/');
$params = array(
'crontab' => true,
'id' => 2,
);
/* @var modProcessorResponse $response */
$response = $modx->runProcessor('mgr/file/export', $params, array(
'processors_path' => $path
));
if ($response->isError()) {
die( $response->getMessage() );
} else{
echo "cron OK";
}
Благодарю!
Совсем забыл про существенный момент — столько времени компонент ковырял, что память стала подводить))
В файле core/components/mspricelist/processors/mgr/file/export.class.php в методе startExport закомментил это условие:
Без этого запуск генерации прайс-листа из внешнего файла не происходит
В файле core/components/mspricelist/processors/mgr/file/export.class.php в методе startExport закомментил это условие:
Без этого запуск генерации прайс-листа из внешнего файла не происходит
Да, этого не хватало. Спасибо! Тоже на ковыряние много времени убил.
Нужно еще просто было указать в параметрах, еще один ключ stage
Готовый рабочий вариант:
$params = array(
'crontab' => true,
'stage' => 'new_session',
'id' => 2,
);
Готовый рабочий вариант:
<?php
define('MODX_API_MODE', true);
require '../index.php';
/* @var modX $modx */
//Дадим права админа навыполнение процессора
$modx->user = $modx->getObject('modUser', 1);
//id строки в таблице (колонка ID), таб "Прайс-листы"
$row_ID = 2;
/** @var msPriceList $msPriceList */
$msPriceList = $modx->getService('msPriceList', 'msPriceList', MODX_CORE_PATH . 'components/mspricelist/model/');
$corePath = $modx->getOption('mspricelist_core_path', null, $modx->getOption('core_path') . 'components/mspricelist/');
$path = $modx->getOption('processorsPath', $msPriceList->config, $corePath . 'processors/');
/* @var modX $modx */
$params = array(
'crontab' => true,
'stage' => 'new_session',
'id' => $row_ID,
);
/* @var modProcessorResponse $response */
$response = $modx->runProcessor('mgr/file/export', $params, array(
'processors_path' => $path
));
if ($response->isError()) {
die($response->getMessage());
} else {
echo json_encode($response->response);
}
Да, вчера обратил внимание, что если закомментить указанную строку в файле processors/mgr/file/export.class.php ( if ($new_session == 'new_session') ), то начинается проблема при запуске генерации прайса с большим количеством позиций из админки, там же за несколько этапов генерация идет, каждый раз новую сессию создавая, и подумал, что нужно попозжЕ попытаться пробросить параметр из скрипта для крона, но vectorserver опередил))), за что ему снова человеческое спасибо!
Кстати, при запуске кода для крона, можно убрать эту строку:
авторизация при запуске процессора не требуется, как выяснилось — проверил в инкогнито, всё работает.
Кстати, при запуске кода для крона, можно убрать эту строку:
$modx->user = $modx->getObject('modUser', 1);
авторизация при запуске процессора не требуется, как выяснилось — проверил в инкогнито, всё работает.
@Андрей Степаненко будьте добры, ответьте на вопрос по крону. Либо тут, либо в ТП модстора. Уже неделю тишина. Проблема та же — по крону не запускается генерация прайс-листа
@Leonid Krylov Обрати внимание пожалуйста.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.