Здравствуй, сообщество.
Не хватает чёткого faq по автоматическому созданию материалов (node)
Проблема с этим: создаю автоматом ноду
$node = array('type' => 'news');
$form_values = array(
'title' => $title,
'body' => $body,
'path' => $path, // можно не использовать, автоалиасы сделают своё дело
'format'=> 2,
'field_author' => array(array('value'=>'Иванов Иван')), // cck поле, сохраняется нормально
'name' => $name, // имя автора
'uid'=>1
);
drupal_execute('news_node_form', $form_values, $node);
Проблема, как создать ноду: а) с существующим термином словаря, б) с новым термином словаря.
перепробовал много кодов (массивы taxonomy и так и сяк), то есть хотелось бы увидеть примерчик записи (как пример, словарь "города", термин "москва", куда, как брать nid, vid терминов)
Комментарии
во времена шальной молодости я втупую вставлял все в базу прямыми INSERT'ами база там простая, на первых порах разобраться намного проще чем в API. В последствии уже использовал API (но ностальгия осталась)))
Код найден на просторах drupal.org
$edit->uid = $doc->uid;
$edit->title = $doc->title;
if ( $doc->month && ! $doc->generated_date ) {
$edit->created = mktime ( 0, 0, 0, $doc->month, $doc->day, $doc->year);
$edit->changed = $edit->created;
}
$edit->status = 1;
$edit->promote = 0;
$edit->sticky = 0;
$edit->path = $doc->path;
$edit->taxonomy = array();
$edit->body = ($doc->have_text ? $doc->text : "");
$edit->type = $doc->type;
$edit->format = 3;
node_save($edit);
А судя по этой функции в дальнейшем вам надо использовать taxonomy_node_save().
Помог чем успел, но должен бежать, удачи и поиск вам в помощь
можно еще для облегчения создания нодов использовать модуль node_factory
небольшой плю данного модуля состоит в том, что он при создании ноды автоматически записывает в ее поля необходимые значения
а для присоединения ноды к какому то термину тоже использую функцию taxonomy_node_save()
Немного упрощу вопрос (отброшу создание новых терминов)
как в это место $edit->taxonomy = array();
вписать то что выдаёт devel для существующих материалов
taxonomy
Array
(
[13] => stdClass Object
(
[tid] => 13
[vid] => 3
[name] => Москва
[description] =>
[weight] => 0
)
[14] => stdClass Object
(
[tid] => 14
[vid] => 3
[name] => Париж
[description] =>
[weight] => 0
)
)
$edit->taxonomy = array('13');
$edit->taxonomy = array('Москва'); - как вписать-то?
для создания новых терминов нужен nid (в taxonomy_node_save), как ловко получить его из только что созданной ноды, при условии, что в этот момент могли создаться ноды другого типа?
p.s. автоматическое создание нод внешним скирптом
p.p.s. нода вставляется - проблема только с терминами таксономии.
Может, так получится?
<?php
$tdata = new stdClass();
$tdata->tid = 13;
$tdata->vid = 3;
$tdata->name = 'Москва';
$tdata->description = '';
$tdata->weight = 0;
$edit->taxonomy[13] = $tdata;
?>
хм, побороть баг не удалось, хотя если не использовать drupal_execute, а воспользоваться node_submit($node); node_save($node);
определил все поля, taxonomy:
$node['taxonomy'] = array($vid=>array($tid)); где $vid - id словаря, $tid - массив id существующих терминов.
для создания новых терминов нужен nid (в taxonomy_node_save), как ловко получить его из только что созданной ноды
node_save($node); при сохранении дозаполняет $node, поэтому вы можете брать nid сразу же из $node->nid