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
Enviar un comentario nuevo