[Решено] Програмное создание ноды с Image field в Drupal 7

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

Аватар пользователя neos neos 6 марта 2011 в 18:48

Решил перевести сайт с самописного двжика на друпал 7. Пытаюсь программно добавить ноды через node_save() и drupal_form_submit() - с текстовыми полями title и body все хорошо, но к ноде также нужно прикрепить изображение. Для изображения в типе материала создано специальное поле (filed_teaser) с типом "Изображение".

Пытался и так:

  // картинка предварительно положена в папку files
  $file_temp = '/home/neos/www/sites/default/files/1.jpg';
  $node->field_teaser = array(
    array(
      'fid' => 'upload',
      'title' => basename($file_temp),
      'filename' => basename($file_temp),
      'filepath' => $file_temp,
      'filesize' => filesize($file_temp),
      'description' =>  basename($file_temp),
      'list' => 1,
    ),
  );
  node_save($node);

Нода создается, но ничего не прикреплено

И так:

$form_state['values']['field']['teaser']['ru']['0']['upload'] = array('http://path/to/image/1.jpg');
drupal_form_submit('news_node_form', $form_state, (object)$node);

Опять же нода создается, но ничего не прикреплено.

Что только уже не перепробывал, но либо ошибки, либо ничего не прикрепляется...
Уже вторые сутки бьюсь, но никакого продаижения нету.
Прошу помоши сообщества. Заранее благодарен!

Комментарии

Аватар пользователя Ильич Рамирес Санчес Ильич Рамирес Санчес 6 марта 2011 в 19:07

там аналогично все полям CCK а насчет файла - файл должен быть загружен и прописан в таблице files
только тогда filefield будет сохранено - если пичкаете ноду данными сами и сохраняете черех node_save

в 6 и 7 принцип работы почти не отличается. названия функций тока сменились

Аватар пользователя neos neos 6 марта 2011 в 19:52

"Ильич Рамирес Санчес" wrote:
...прописан в таблице files...

Спасибо, об этом и не задумался (думал node_save() сама в таблицу с файлами добавит).

В общем вот итоговое решение:

        $fid = db_insert('file_managed')->fields(array(
                'uid' => 1,
                'filename' => '1.jpg',
                'uri' => 'public://1.jpg',
                'filemime' => 'image/jpeg',
                'filesize' => 59153,
                'status' => 1,
                'timestamp' => time(),
        ))->execute();
       
        $node->field_teaser['ru'][0]['fid'] = $fid;
Аватар пользователя cdrpro cdrpro 21 сентября 2011 в 13:27

Подскажите. ситуация след. создаю пограмно ноду
и пробую прикрепить к ней изображение:

$file = new StdClass();
$file->uid = 1;
$file->uri = $img_path . $new_node['img'];
$file->filemime = file_get_mimetype($file->uri);
$file->status = 1;
               
$dest = file_default_scheme() . '://art';
$file = file_copy($file, $dest);
               
$node->field_art_image[$node->language][0] = (array)$file;
node_save($node);

файл копируется, прописывается в file_managed, нода добавляется, НО:
field_data_field_art_image и file_usage пустые, и соответственно нода просматривается без изображения.

В чём ошибка?