Генерация товаров minishop2 с помощью CRON
Здравствуйте! Возник вопрос касательно вызова с помощью CRON процессора miniShop2.
CRON на сервере запускает скрипт
Спасибо!
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!';}
выдает ошибку несуществующего объекта. Следовательно работа обрывается где-то в процессоре. Подскажите пожалуйста, в чем может быть проблема и как можно ее решить. Спасибо!
Комментарии: 3
Чтобы выполнялся процессор, надо сначала авторизоваться, чтобы куки соответствовали пользователю с соответствующими правами. Думаю, будет проще просто расширить этот процессор, убрав проверку прав. Ну или использовать какой-нибудь компонент для импорта.
На самом деле все это происходит внутри 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;
}
Да, уже убрана… странно… тогда не знаю)
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.