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