[решено]Програмное создание ноды с полями и таксономией

Главные вкладки

Аватар пользователя edmi edmi 21 октября 2010 в 16:02

Доброго времени суток.
Необходимо из модуля создать ноду, основываясь на данных в файле xml.
Погуглив, пришел к выводу, что есть функция node_save, которая и отвечает за создание ноды, но немогу найти полный список переменных и спецификацию. В частности в каком формате указывать файл, для поля "imagefile_field", и чем определять таксономию.
Сейчас используется примерно такое:

<?php
$node 
= new stdClass();
$node->type 'nodetype';
$node->title '$title';
$node->body '$descr';
$node->uid 1;                  // id автора 
$node->status 1;               // 1 - опубликовано, 0 - нет
$node->promote 1;              // 1 - показывать на главной, 0 - нет
//пример заполения полей ноды
//$node->field_publisher[0]['value'] = 'Foo'; // текстовое cck поле field_publisher
//$node->field_author[0]['value'] = 'Bar';    // текстовое cck поле field_author
?>

Буду благодарен за помощь.

Комментарии

Аватар пользователя edmi edmi 22 октября 2010 в 22:40

сам же и отвечаю.
Для заполнения программного заполнения imagefield используется такой код:

<?php
      $filepath 
file_directory_path() . '/images/'$image;
      if (
file_exists($filepath)) {
        
$field field_file_save_file($filepath, array(), file_directory_path());
        
$node->field_photo = array(=> $field);
      }
?>

для добавления таксономии $node->taxonomy[n] = tid;

Аватар пользователя edmi edmi 23 октября 2010 в 0:39

Столкнулся с новым вопросом: как с помощью полученного кода добавить несколько картинок в поле.
варианты $node->field_photo[] = array(0 => $field); и $node->field_photo[n] = array(0 => $field); неработают.

Аватар пользователя edmi edmi 4 ноября 2010 в 4:13

marazmus wrote:
Мне тоже интересно Smile

А вот это сработает?
$node->field_photo = array(0 => $field1, 1 => $field2);

У меня задача решилась,дело оказалось в невмнимательности. $field получился массивом и все нужные значения содержались под индексом 0=>.

мой код, для импорта в ноду нескольких картинок:

$a = 0;
foreach ($imgfile as $file) {
if (file_exists($file)) {
        $field = field_file_save_file($file, array(), file_directory_path());
$node->field_foto[$a] = $field;
$a++;

подозреваю что счетчик тут вписан как пятое колесо телеге, и можно обойтись просто $node->field_foto[] = $field;, но пока работает -- не трогаю Smile

Аватар пользователя andrey9107 andrey9107 18 апреля 2012 в 15:15

Вот как я делал для загрузки файла:
««

<?php
$filename 
$_FILES['files']['name']['image'];
    
$tmp_filename $_FILES['files']['tmp_name']['image'];
    
$filepath file_directory_path().'/'.$filename;
    
$filesize $_FILES["image"]["size"];
    
$filemime $_FILES["image"]["type"];
    
$timestamp time();
    if(
is_uploaded_file($tmp_filename))
   {
     
// Если файл загружен успешно, перемещаем его
     // из временной директории в конечную
     
move_uploaded_file($tmp_filename$filepath);
   } else {
      
form_set_error('image''File missing for upload.');
   }
    
$field field_file_save_file($filepath, array(), file_directory_path());
    
$node->field_image[] = $field;
?>

»»