Как прикрепить изображение к узлу при его создании с помощью node_save ($ node);

Привет, я работаю с drupal 7 и пытается импортировать данные из xml, анализируя его с помощью php, а затем создавая узлы с node_save($node) .

До сих пор мне удалось создать узлы из xml без каких-либо образов. Я хочу прикрепить изображение к узлу, пока я его импортирую.

Я знаю, что drupal 7 все еще находится в альфа-6, но это хорошо. node_save($node) почти такая же, как в drupal 6, но немного отличается.

Хорошо, вот мой путь к файлу кода изображения хранится в переменной … любая помощь будет отличной.

 function main($head, $txt) { $nodes = array(); $nodes[0]['title'] = $head; // node name $nodes[0]['body'] = $txt; // body text for the node $nodes[0]['teaser'] = '<p>A node</p>'; $nodes[0]['timestamp'] = 1281765101; $nodes[0]['format'] = 2; make_nodes($nodes); } function make_nodes($nodes) { $new_node = $nodes[0]; $node = new stdClass(); $node->type = 'article'; $node->status = 1; $node->uid = 1; $node->title = $new_node['title']; $node->promote = 1; $node->created = $new_node['timestamp']; $node->timestamp = $new_node['timestamp']; $node->changed= $new_node['timestamp']; $node->sticky = 0; $node->language = 'en'; $node->body['und'][0]['format'] = 3; $node->body['und'][0]['summary'] = $new_node['teaser']; $node->body['und'][0]['value'] = $new_node['body']; $node->revision = 0; node_submit($node); node_save($node); } 

ЗДРАВСТВУЙ. После прочтения документации в течение 10 часов я окончательно сделал это … я включил мой код здесь

 $uri = 'bird/bird_image.jpg'; $files = new stdClass(); $files->uid = (isset($local_user->uid) && !empty($local_user->uid)?$local_user->uid:1); $files->filename = 'bird.jpg'; $files->uri = $uri; $files->filemime = file_get_mimetype($uri); $files->status = 1; $files->timestamp = $new_node['timestamp']; file_copy($files); 

вот как можно загрузить файл и в базу данных drupal 7

Оригинальный вопрос Zero Cool спросил: «Как прикрепить изображение к узлу при его создании».

Я не видел, чтобы он полностью отвечал в любом месте, поэтому вот код, который работает для меня в Drupal 7.27, в Windows 8 🙂

«Классифицированный» тип контента для этого узла имеет 3 поля: заголовок, тело и поле_адвер_изображения (который является только типом поля изображения).

 $node = new stdClass(); $node->type = 'classified'; node_object_prepare($node); // Set some default values. $node->language = LANGUAGE_NONE; $node->title = "Test node with image"; $node->body[LANGUAGE_NONE][0]['value'] = strip_tags("<b>Body text example</b>"); $node->body[LANGUAGE_NONE][0]['format'] = 'plain_text'; // or 'full_html' if you want // Get pathauto to generate an URL alias $node->path['pathauto'] = 1; // Created by user 1 $node->uid = 1; // The image directory has to be visible to Drupal on its local file-system, // eg here it would be sites/default/files/adverts $directory_uri = 'public://adverts'; // example image file in that directory: $my_image_file = '32449.jpg'; // First create a file object, and add it to Drupal's managed_files table... $file = new stdClass(); $file->filename = $my_image_file; $file->uri = $directory_uri.'/'.$my_image_file; $file->filemime = file_get_mimetype($file->uri); $file->status = FILE_STATUS_PERMANENT; $file->uid = 1; $file = file_save($file); // ...then use the new file object. $node->field_advert_image[LANGUAGE_NONE][0] = (array)$file; node_save($node); // NB node_save() gets the count incremented in the file_managed table; no need to call file_usage_add() if ($node->nid) { echo "- Created node ".$node->nid." ... ".print_r($node,true)."\n"; } else { echo "- Drupal node_save API call failed\n"; } 

Как вы, наверное, догадались, этот код выполняется из сценария PHP в командной строке.

Надеюсь, это поможет кому-то.