Создание ресурсов + TV, через Modx API
Добрый день.
Необходимо создать 300 ресурсов.
Как заполнять поля из массива pagetitle, alias и т.д я нашел.
пытался таким образом:
Необходимо создать 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();
Комментарии: 11
$tvDoc = $modx->getObject('modResource', $docId);
if ($tvDoc) {
$tvDoc->setTVValue(1, $v['idc']); // 1 - ID TV
$tvDoc->save();
}
$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 пусто
Используй процессор для создания ресурсов, там и кэш будет чистится, в этом и дело скорее всего.
$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();
$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();
}
Попробовал, результат тот же(
Не $page->setTVValue($v['idc'],1);, а
$page->setTVValue(1, $v['idc']);
Пробовал, и снова пусто
Держи рабочий код
В $v['idc'] затесалась кириллица.
$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'] затесалась кириллица.
Спасибо большое, работает!
По поводу TV
Как вариант можно еще в $response массив добавить 'tv21' => $img,
где 21 — это ид TVшки
Как вариант можно еще в $response массив добавить 'tv21' => $img,
где 21 — это ид TVшки
Чтобы в процессоре задавать TV, нужно писать так:
$array['tvs'] = 1; //указываем что будут TV
$array['tv6'] = $tv6value //Указываем id TV
$array['tv7'] = $tv7value;
$array['tv8'] = $tv8value;
Долго сражался с 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(); // Кэш тоже чистим
}
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.