Adjuntar archivo a un nodo desde un script php

En un proyecto reciente necesité incluir un archivo adjunto a los nodos de un tipo de contenido en particular, y aunque sonaba fácil no lo era tanto.

resulta que drupal hace uso de una tabla llamada files para guardar las propiedades de los archivos que se han subido al sitio, tales como: el tamaño, la ruta, el mimetype, etc.

Así que para adjuntar los archivos a sus respectivos nodos era necesario registrar varios datos en esta tabla.

Este es el código que he usado:

<?php
global $user;
$nid = 10;
$nodo = node_load($nid);
/* 
  archivo.pdf => previamente subido al directorio /sites/default/files
*/
adjuntar_archivo($nodo, 'archivo.pdf', $user->uid);
node_save($nodo);

function adjuntar_archivo(&$nodo, $archivo, $id_usuario) {
  $name = basename($archivo);
  $mime = file_get_mimetype($name);
  $file = file_directory_path() . '/' . $archivo; 
  
  if (file_exists($file)) {
    $details = stat($file);
    $filesize = $details['size'];
  } 
  else {
    // Archivo no existe
    return false;
  }

  $file_obj = new stdClass();
  $file_obj->filename = $name;
  $file_obj->filepath = $file;
  $file_obj->filemime =  $mime;
  $file_obj->filesize = $filesize;
  $file_obj->filesource = $name;
  $file_obj->uid = $id_usuario;
  $file_obj->status = FILE_STATUS_TEMPORARY;
  $file_obj->timestamp = time();
  $file_obj->list = 1;
  $file_obj->new = true;

  /* 
    Guarda el archivo en la tabla files
    drupal_white_record modifica el objeto $file_obj
    y le agrega el fid del nuevo registro
  */
  drupal_write_record('files', $file_obj);
  
  // change file status to permanent
  file_set_status($file_obj, 1); 
  $nodo->files[$file_obj->fid] = $file_obj;
  return true;
}
?>

 

 

 

Comentarios

El hecho de que es necesario

Aprendi mucho

Enviar un comentario nuevo

El contenido de este campo se mantiene privado y no se mostrará públicamente.
By submitting this form, you accept the Mollom privacy policy.