vulnerabilities - drupal project




Adjuntar archivos de imagen a nodos mediante programaciĆ³n en Drupal 7 (6)

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;
`

¿Es posible agregar una imagen a un nodo mediante programación?


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 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 ().


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'.