Создание ресурсов + TV, через Modx API

Добрый день.
Необходимо создать 300 ресурсов.
Как заполнять поля из массива pagetitle, alias и т.д я нашел.
$array = array(
 array(
  'title' => 'Ресурс 1',
  'alias' => 'res1',
  'idс' => '1'
 ),
 array(
  'title' => 'Ресурс 2',
  'alias' => 'res2',
  'idс' => '2'
 ),
 array(
  'title' => 'Ресурс 3',
  'alias' => 'res3',
  'idс' => '3'
 ),
);

foreach($array as $v){
    $res = $modx->newObject('modResource');                        
    $res->set('template', 1);             
    $res->set('isfolder', 0);             
    $res->set('published', 0);           
    $res->set('createdon', time());      
    $res->set('pagetitle', $v['title']);   
    $res->set('alias', $v['alias']);  
    $res->set('parent', 2);
    $res->save();
}
Вопрос как проставить значения в ТV из поля idc?
пытался таким образом:
$docId= $res->get('id');
    $tvDoc = $modx->getObject('modResource', $docId);
    $tvDoc->setTVValue(1, $v['idc']);
    $tvDoc->save();
Глеб
16 июня 2016, 10:58
modx.pro
4
9 683
0

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

Марат Марабар
16 июня 2016, 15:22
0
$tvDoc = $modx->getObject('modResource',  $docId);
if ($tvDoc) {
	$tvDoc->setTVValue(1,  $v['idc']);  // 1 - ID TV
	$tvDoc->save();
}
    Глеб
    16 июня 2016, 15:34
    0
    $array = array(
     array(
      'title' => 'Ресурс 1',
      'alias' => 'res1',
      'idс' => '1'
     ),
     array(
      'title' => 'Ресурс 2',
      'alias' => 'res2',
      'idс' => '2'
     ),
    );
    
    foreach($array as $v){
        $res = $modx->newObject('modResource');                        
        $res->set('template', 1);             // Назначаем ему нужный шаблон
        $res->set('isfolder', 0);             // Указываем, что это не контейнер   
        $res->set('published', 0);            // Неопубликован
        $res->set('createdon', time());       // Время создания
        $res->set('pagetitle', $v['title']);        // Заголовок
        $res->set('alias', $v['alias']);   // Псевдоним
        $res->set('parent', 2);              // Родительский ресурс
        $res->save();
        
        $docId= $res->get('id');
        $tvDoc = $modx->getObject('modResource',  $docId);
        if ($tvDoc) {
        	$tvDoc->setTVValue(1,  $v['idc']);  // 1 - ID TV
        	$tvDoc->save();
        }
    }
    пробую так, Ресурсы создаются, но в TV пусто
    Марат Марабар
    16 июня 2016, 16:00
    1
    0
    Используй процессор для создания ресурсов, там и кэш будет чистится, в этом и дело скорее всего.

    $response = $modx->runProcessor('resource/create', array(
    	'template' => 1,
    	'isfolder' => 0,
    	'published' => 0,
    	'pagetitle' => $v['title'],
    	'parent' => 2,
    ));
    
    if ($response->isError()) {
    	return $modx->error->failure($response->getMessage());
    }
    $modx->cacheManager->clearCache();
    
    $newId = $response->response['object']['id'];
    
    $page = $modx->getObject('modResource', $newId);
    $page->setTVValue('alc', 13);
    $page->save();
      Глеб
      16 июня 2016, 16:14
      0
      $array = array(
       array(
        'title' => 'Ресурс 1',
        'alias' => 'res1',
        'idс' => '1'
       ),
       array(
        'title' => 'Ресурс 2',
        'alias' => 'res2',
        'idс' => '2'
       ),
      );
      
      foreach($array as $v){
          $response = $modx->runProcessor('resource/create', array(
          	'template' => 1,
          	'isfolder' => 0,
          	'published' => 0,
          	'pagetitle' => $v['title'],
          	'alias' => $v['alias'],
          	'parent' => 2
          ));
          
          if ($response->isError()) {
          	return $modx->error->failure($response->getMessage());
          }
          $modx->cacheManager->clearCache();
          
          $newId = $response->response['object']['id'];
          
          $page = $modx->getObject('modResource', $newId);
          $page->setTVValue($v['idc'],1);
          $page->save();
      }
      Попробовал, результат тот же(
        Марат Марабар
        16 июня 2016, 16:17
        0
        Не $page->setTVValue($v['idc'],1);, а
        $page->setTVValue(1, $v['idc']);
          Глеб
          16 июня 2016, 16:21
          0
          Пробовал, и снова пусто
            Марат Марабар
            16 июня 2016, 16:42
            1
            +1
            Держи рабочий код

            $array = array(
             array(
              'title' => 'Ресурс 1',
              'alias' => 'res1',
              'idc' => '1'
             ),
             array(
              'title' => 'Ресурс 2',
              'alias' => 'res2',
              'idc' => '2'
             ),
            );
            
            foreach($array as $v){
                $response = $modx->runProcessor('resource/create', array(
                	'template' => 1,
                	'isfolder' => 0,
                	'published' => 0,
                	'pagetitle' => $v['title'],
                	'alias' => $v['alias'],
                	'parent' => 2,
                ));
                
                if ($response->isError()) {
                	return $modx->error->failure($response->getMessage());
                }
                $modx->cacheManager->clearCache();
                
                $newId = $response->response['object']['id'];
                
                $page = $modx->getObject('modResource', $newId);
                $page->setTVValue(1, $v['idc']);
                $page->save();
            }
            Проверено.
            В $v['idc'] затесалась кириллица.
              Глеб
              16 июня 2016, 16:45
              0
              Спасибо большое, работает!
                Alex DOM
                19 февраля 2021, 13:40
                0
                По поводу TV
                Как вариант можно еще в $response массив добавить 'tv21' => $img,
                где 21 — это ид TVшки
        Алексей Ерохин
        17 июня 2016, 13:33
        0
        Чтобы в процессоре задавать TV, нужно писать так:
        $array['tvs'] = 1;  //указываем что будут TV
                    $array['tv6'] = $tv6value //Указываем id TV
                    $array['tv7'] = $tv7value;
                    $array['tv8'] = $tv8value;
          Даниил
          26 февраля 2018, 13:42
          1
          0
          Долго сражался с API. Все ему не слава богу. То половина ресурсов создается, а половина нет, то ТВ не заполняются, то вообще не работает ибо бубен шамаский не тот… В общем победил вот таким кодом. Делюсь, вдруг кому тож пригодится.

          foreach($addArr as $key => $val){
          
              $rss = $modx->newObject('modResource');
              $rss->set('template', 17);                     // Назначаем ему нужный шаблон
              $rss->set('isfolder', 1);                         // Указываем, что это не контейнер   
              $rss->set('published', 1);                      // Неопубликован
              $rss->set('createdon', time());              // Время создания
              $rss->set('pagetitle', $val[0]);               // Заголовок
              $rss->set('alias', strtolower($val[0]));    // Псевдоним
              $rss->set('parent', $startID);                 // Родительский ресурс
              $rss->save(); 
              
              $nid = $rss->get('id');      //получаем ID созданного ресурса
              
              $tvcid = $modx->getObject('modTemplateVar',array('name'=>'cid'));       // Указываем имя нужного TV
              $tvcid->setValue($nid, $key);       // Записываем в TV значение
              $tvcid->save();
          
              unset($rss); unset($tvcid);       // Удаляем переменные
              $modx->cacheManager->clearCache();      // Кэш тоже чистим
          
          }
            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
            11