Генерация товаров minishop2 с помощью CRON

Здравствуйте! Возник вопрос касательно вызова с помощью CRON процессора miniShop2.
CRON на сервере запускает скрипт
$this->modx->log(modX::LOG_LEVEL_ERROR, 'Запущен '. MODX_CORE_PATH.'components/minishop2/processors/mgr/product/create процессор с параметрами:'.print_r($processorProps,1));
$response = $this->modx->runProcessor('mgr/product/create', $processorProps, array('processors_path'=> MODX_CORE_PATH.'components/minishop2/processors/'));
Параметры передающиеся процессору:
Array
(
    [class_key] => msProduct
    [parent] => 421
    [published] => 0
    [context_key] => web
    [source] => 2
    [template] => 4
    [pagetitle] => МОНА зебрана сахара/Венге /Заречье
    [vendor] => 0
    [article] => я0000025664
    [longtitle] => Гостиная МОНА
    [made_in] => РОССИЯ
    [color] => Array
        (
            [0] => Зебрана сахара/Дуб венге
        )
)
Но результата нет. Проверка:
if (!$response->isError()) {echo 'Error!';}
выдает ошибку несуществующего объекта. Следовательно работа обрывается где-то в процессоре. Подскажите пожалуйста, в чем может быть проблема и как можно ее решить.
Спасибо!
Александр
20 июня 2016, 07:28
modx.pro
2 227
0

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

Илья Уткин
20 июня 2016, 13:21
+1
Чтобы выполнялся процессор, надо сначала авторизоваться, чтобы куки соответствовали пользователю с соответствующими правами. Думаю, будет проще просто расширить этот процессор, убрав проверку прав. Ну или использовать какой-нибудь компонент для импорта.
    Александр
    21 июня 2016, 03:43
    0
    На самом деле все это происходит внутри mskladcataloghandler.class.php дополнения mSklad. Если говорить прямо, то проблема звучит следующим образом: при запуске выгрузки с помощью CRON
    private function createMsProduct($categoryId,$productAddData){ //$productName,$productArticle='',$productDescription=''){
            $processorProps = array_merge(array(
                'class_key' => 'msProduct'
            ,'parent' => $categoryId
            ,'published'=>$this->config['publish_default']
            ,'context_key' => $this->config['catalog_context']
            ,'source' => $this->config['product_source']
            ,'template' => $this->config['product_template']
            ),$productAddData);
            $this->modx->log(xPDO::LOG_LEVEL_ERROR, "Запущен процессор ".$this->config['processorsPath']."mgr/extend/createmsproduct ");
            $response = $this->modx->runProcessor('mgr/extend/createmsproduct', $processorProps, array('processors_path'=>$this->config['processorsPath']));
    
            if (!$response->isError()) {
                return $response;
            }
            else {
                $this->modx->log(modX::LOG_LEVEL_ERROR, '[mSklad] Ошибка создания товара ('.$productAddData['pagetitle'].'), импорт остановлен'."\r\n".print_r($response->getResponse(),1));
                return false;
            }
        }
    не отрабатывает процессор mSklad createmsproduct.class.php:
    <?php
    /**
     * Overrides the modResourceCreateProcessor to provide custom processor functionality for the msProduct type
     *
     * @package mSklad
     */
    
    require_once MODX_CORE_PATH.'model/modx/modprocessor.class.php';
    require_once MODX_CORE_PATH.'model/modx/processors/resource/create.class.php';
    require_once MODX_CORE_PATH.'components/minishop2/processors/mgr/product/create.class.php';
    
    class extendModResourceCreateProcessor extends modResourceCreateProcessor
    {
    
        public static function getInstance(modX &$modx, $className, $properties = array())
        {
            $classKey = !empty($properties['class_key']) ? $properties['class_key'] : 'modDocument';
            $object = $modx->newObject($classKey);
    
            $className = 'msProductDisableCacheCreateProcessor';
            $processor = new $className($modx, $properties);
            return $processor;
        }
    }
    
    class msProductDisableCacheCreateProcessor extends msProductCreateProcessor
    {
    
        public function checkParentPermissions() { //FIX disable checkParentPermissions to add children
    //		return parent::checkParentPermissions();
            return true;
        }
    
        /**
         * {@inheritDoc}
         * @return * @return string|mixed
         */
        public function prepareAlias() {
            $alias='';
            if ($this->modx->getOption('ms2_product_id_as_alias')) {
                $alias = 'empty-resource-alias';
                $this->setProperty('alias', $alias);
            }
            else {
                /* friendly url alias checks */
                $pageTitle = $this->getProperty('pagetitle');
                if ($this->modx->getOption('friendly_urls', false) && (!$this->getProperty('reloadOnly',false) || !empty($pageTitle))) {
                    if ($this->modx->getOption('automatic_alias', false)) {
                        $alias = $this->object->cleanAlias($pageTitle);
                    }
                    if (empty($alias)) {
                        $alias = 'empty-resource-alias';
                    }
                    if ($this->modx->getOption('msklad_alias_with_id', false)) {
                        $alias .= '-'.$this->object->id;
                    }
    
                    $this->setProperty('alias',$alias);
                }
            }
            return $alias;
        }
    
        public function afterSave() {  //FIX disable "Updating resourceMap before OnDocSaveForm event" and disable lock
            if ($this->object->alias == 'empty-resource-alias') {
                $this->object->set('alias', $this->object->id);
                $this->object->save();
            }
    
            // Updating resourceMap before OnDocSaveForm event
            $results = $this->modx->cacheManager->generateContext($this->object->context_key);
            $this->modx->context->resourceMap = $results['resourceMap'];
            $this->modx->context->aliasMap = $results['aliasMap'];
    
    //		$this->object->addLock();
            $this->setParentToContainer();
            $this->saveResourceGroups();
            $this->checkIfSiteStart();
            return true;
        }
    
        public function cleanup() { //FIX disable clearCache and disable lock
    //		$this->object->removeLock();
    //		$this->clearCache();
            return $this->success('', array('id' => $this->object->get('id')));
        }
    
    
    }
    
    return 'extendModResourceCreateProcessor';
    В данном процессоре, насколько я понимаю, уже убрана проверка прав:
    public function checkParentPermissions() { //FIX disable checkParentPermissions to add children
            //return parent::checkParentPermissions();
            return true;
    }
      Илья Уткин
      21 июня 2016, 10:22
      +1
      Да, уже убрана… странно… тогда не знаю)
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    3