Первоначальный вопрос, который задал Zero Cool, был: «Как прикрепить изображение к узлу при его создании».
Я не видел нигде такого полного ответа, поэтому вот код, который работает для меня вDrupal 7.27, в Windows 8:)
«Классифицированный» тип контента для этого узла имеет 3 поля: title, body и field_advert_image (это просто тип поля Image).
$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,
// e.g. 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);
// N.B. 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 командной строки.
Надеюсь, он кому-нибудь поможет.