Как создать ресурсы из массива используя runProcessor

Всем привет!
Есть массив, хочу распарсить его и создать ресурсы.
for ($offset=0;$offset<count($items);$offset++){
        $item = $items[$offset];
        $id               = $item['Id'];
        $name             = htmlspecialchars($item['Name']);
        $parent              = $item['ParentId'];

        $response = $modx->runProcessor('resource/create', array(
                    'class_key' => 'msCategory',
                    'pagetitle' => $item['Name'],
                    'parent' => 3,
                    'template' => 3,
                    'show_in_tree' => 1,
                ));
                
                if($response->isError()){
                    echo 'Ошибка';
                }else{
                    echo 'Создал';
                }
    }
ошибка
Fatal error: Uncaught Error: Call to a member function runProcessor() on null in /home/s20673/www/core/cache/includes/elements/modsnippet/20.include.cache.php:85 Stack trace: #0 
/home/s20673/www/core/cache/includes/elements/modsnippet/20.include.cache.php(13): create_category() #1 
/home/s20673/www/core/model/modx/modscript.class.php(76): include('/home/s20673/ww...') #2 
/home/s20673/www/core/model/modx/modparser.class.php(537): modScript->process(NULL) #3 
/home/s20673/www/core/components/pdotools/model/pdotools/pdoparser.class.php(273): modParser->processTag(Array, false) #4 /home/s20673/www/core/model/modx/modparser.class.php(251): pdoParser->processTag(Array, false) #5 /home/s20673/www/core/components/pdotools/model/pdotools/pdoparser.class.php(65): modParser->processElementTags('[[]]', '<!doctype html>...', false, false, '[[', ']]', Array, 8) #6 /home/s20673/www/core/model/modx/modparser.class.php(263): pdoParser->processElementTags('[[]]', '<!doctype html>...', false, false, '[[', ']]', Array, 9) #7 /home/s20673/www/c in /home/s20673/www/core/cache/includes/elements/modsnippet/20.include.cache.php on line 85
Что делаю не так?
Roman
23 декабря 2019, 18:57
modx.pro
296
0

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

Алексей Соин
24 декабря 2019, 08:18
+1
попробуй так

foreach ($items as $key => $item) {
    $id         = $item['Id'];
    $name       = htmlspecialchars($item['Name']);
    $parent     = $item['ParentId'];

    $response = $modx->runProcessor('resource/create', array(
        'class_key' => 'msCategory',
        'pagetitle' => $name,
        'parent' => 3,
        'template' => 3,
        'show_in_tree' => 1,
    ));
    
    if($response->isError()){
        echo 'Ошибка';
    }else{
        echo 'Создал';
    }
}
и ты уверен, что тебе нужно все ресурсы из массива создавать как категории?
    Roman
    24 декабря 2019, 09:48
    +1
    Спасибо большое! Разобрался сам)) Нужно не полностью массив передавать, а передавать его через цикл
    Да, я дергаю API стороннего сервиса, нужно сделать синхронизацию товаров и категорий.
    P.S.
    //Формируем массив
    foreach ($items as $key => $item) {
    $resourcedata[] = array(
            'class_key' => 'msCategory',
            'pagetitle' => $item['Id'],
            'parent' => 3,
            'template' => 3,
            'show_in_tree' => 1,
        );
    }
    //Скармливаем его runProcessor' у
    for($i=0; $i<count($resourcedata); $i++){
    $response = $modx->runProcessor('resource/create',$resourcedata[$i]);
      if($response->isError()){
            echo 'Ошибка';
        }else{
            echo 'Создал';
        }
    }
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    2