¿Es posible agregar una imagen a un nodo mediante programación?Adjuntar archivos de imagen a nodos mediante programación en Drupal 7
Respuesta
Aquí es un ejemplo de código con el que se puede utilizar 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;
`
Sí, hágalo parte del objeto $ node cuando lo guarde. Guárdalo usando node_save().
Una forma 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));
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 usted es actualizar una imagen, y que se preocupan por mostrarla en una página, entonces se necesita un paso adicional antes de llamar node_save():
image_path_flush($node->field_image['und'][0]['uri']);
Esto se regenerará todas 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
)
)
);
La documentación de la comunidad de Drupal brinda una forma ligeramente diferente de hacerlo. https://www.drupal.org/node/2301425. Dice que 'file_usage_add ($ file, 'file', 'node', $ node-> nid);' también debe hacerse al hacer esto. – rineez
Es posible que también desee desvincular manualmente el archivo temporal, si ya no es necesario. De lo contrario, se acumulará y se convertirá en una gran pérdida de espacio de almacenamiento a lo largo del tiempo. – rineez
No hay un archivo temporal en este caso. La imagen se está descargando a la memoria solamente, luego se almacena en su destino de destino. – Brian
$node->field_image[LANGUAGE_NONE][0] = (array)$file;
He intentado 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 era visible en la pantalla de 'vista', pero no en la pantalla 'Editar'.
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ólo va a pegar mi solución aquí también, que necesitaba para crear un nuevo nodo, y subir 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);
- 1. Cargar múltiples archivos en Drupal 7
- 2. Módulo Drupal 7 OpenID
- 3. Drupal 7: cómo restringir el acceso de archivos a roles de usuario específicos
- 4. Carga de archivos mediante programación en Django
- 5. Drupal 6 contraseña de usuario importada a Drupal 7
- 6. Inspeccionar mediante programación archivos .class
- 7. Avances de programación de Drupal 7, diferencias con la actualización de Drupal 6 o espera
- 8. Acceso mediante programación a archivos en dispositivos Android desde PC
- 9. ¿Hay algún efecto de imagen para agregar fondo blanco en la imagen en drupal 7
- 10. Agregar imagen mediante programación a la celda TableView
- 11. Agregar un filtro personalizado a las vistas en Drupal 7
- 12. mediante programación en C#
- 13. WPF: Agregar borde a una imagen mediante programación
- 14. ¿Debo usar Drupal 6 o Drupal 7?
- 15. Cómo agregar JS a Drupal 7
- 16. Drupal 7 Default .htaccess
- 17. Crear un botón mediante programación en Windows Phone 7 (WP7)
- 18. Drupal 7 preprocess_views no trabajar
- 19. Adjuntar a un archivo de imagen
- 20. Establecer imagen de fondo mediante programación en un Xib
- 21. cambie el tema activo de Drupal 7 programáticamente
- 22. Drupal 7 Get image field path
- 23. Drupal 7: Mejor práctica para una lista de selección dinámica en Drupal 7
- 24. En HTML5, ¿puedes guardar una imagen en caché mediante programación?
- 25. Uso de JQuery en Drupal 7
- 26. Drupal 7 drupal_mail eliminando HTML?
- 27. Obtener la URL de un nodo en Drupal 7
- 28. Conexión a TFSPreview mediante programación
- 29. ¿Agregar nodos mediante programación a un equilibrador de carga como Haproxy?
- 30. Drupal 7: Acceso al campo de nodo personalizado en page.tpl.php
+1. Por alguna razón, también tuve que agregar ''visualizar '=> 1' a la matriz de archivos $, o si no, recibí una violación de restricción que field_doc_file_display era NULL. Esto fue para un archivo en lugar de una imagen, lo que podría ser la diferencia. – feedbackloop
¿Hay alguna forma de agregar Alt o Título a la imagen con este método? – Shyghar
+1 para LANGUAGE_NONE – saadlulu