tutorial - Adjuntar archivos de imagen a nodos mediante programación en Drupal 7
drupal 7.59 download (8)
¿Es posible agregar una imagen a un nodo mediante programación?
Aquí hay un código de ejemplo con el que puede usar con node_save
$filepath = drupal_realpath(''misc/druplicon.png'');
// Create managed File object and associate with Image field.
$file = (object) array(
''uid'' => 1,
''uri'' => $filepath,
''filemime'' => file_get_mimetype($filepath),
''status'' => 1,
);
// We save the file to the root of the files directory.
$file = file_copy($file, ''public://'');
$node->field_image[LANGUAGE_NONE][0] = (array)$file;
`
Aquí hay un poco más que me hizo tropezar por un tiempo: esto adjuntará la imagen al nodo, y si está agregando la imagen, entonces está bien. Sin embargo, si está actualizando una imagen y le interesa mostrarla en una página, entonces se necesita un paso adicional antes de llamar a node_save ():
image_path_flush($node->field_image[''und''][0][''uri'']);
Esto regenerará todos los estilos de esa imagen.
Esto es lo que funcionó para mí:
$file_temp = file_get_contents(''public://someimage.jpg'');
// Saves a file to the specified destination and creates a database entry.
$file_temp = file_save_data($file_temp, ''public://'' . ''someimage.jpg'', FILE_EXISTS_RENAME);
$node->field_page_image = array(
''und'' => array(
0 => array(
''fid'' => $file_temp->fid,
''filename'' => $file_temp->filename,
''filemime'' => $file_temp->filemime,
''uid'' => 1,
''uri'' => $file_temp->uri,
''status'' => 1,
''display'' => 1
)
)
);
Esto funciona para mí:
define(''DRUPAL_ROOT'', $_SERVER[''DOCUMENT_ROOT'']);
require_once DRUPAL_ROOT . ''/includes/bootstrap.inc'';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
$node = node_load(99);
$filename = ''image.txt'';
chdir(DRUPAL_ROOT);
$image = file_get_contents(''http://www.ibiblio.org/wm/paint/auth/gogh/gogh.white-house.jpg'');
$file = file_save_data($image, ''public://'' . $filename, FILE_EXISTS_RENAME);
$node->field_imagen_producto = array(LANGUAGE_NONE => array(''0'' => (array)$file));
node_save($node);
Sí, hágalo parte del objeto $ node cuando lo guarde. Guárdalo usando node_save ().
Solo voy a pegar mi solución aquí, necesitaba crear un nuevo nodo y cargar una imagen mediante programación.
$filepath = variable_get(''file_public_path'') . ''/xmas_banner.jpg'';
$file_temp = file_get_contents($filepath);
$file_temp = file_save_data($file_temp, file_default_scheme() . ''://'' .''xmas_banner_nl.jpg'', FILE_EXISTS_RENAME);
$node = new stdClass();
$node->type = ''carousel''; // custom content type
$node->title = ''XMAS NL'';
$node->field_banner_image[LANGUAGE_NONE][0] = (array) $file_temp;
$node->uid = 1;
$node->status = 0;
$node->active = 0;
$node->promote = 0;
node_save($node);
Una manera más fácil:
$filename = ''image.txt'';
$image = file_get_contents(''http://www.ibiblio.org/wm/paint/auth/gogh/gogh.white-house.jpg'');
$file = file_save_data($image, ''public://'' . $filename, FILE_EXISTS_RENAME);
$node->field_image = array(LANGUAGE_NONE => array(''0'' => (array)$file));
$node->field_image[LANGUAGE_NONE][0] = (array)$file;
Intenté esto con un sitio multilingüe. Falló bastante ... pero horriblemente. Tuve que especificar el idioma en cuestión. En pocas palabras, esto funcionó en su lugar:
$node->field_image[''en''][0] = (array)$file;
Sin él, el archivo adjunto se podía ver en la pantalla ''ver'' pero no en la pantalla ''editar''.