Adjuntar archivos de servidor existentes al campo de archivos

7

¿Cómo se configura una ruta de archivo existente para un campo de archivo, en Drupal 7? La única opción que veo es cargar el archivo nuevamente.

En Drupal 6, FileField Sources parece hacer esto.

¿ FileField Paths o IMCE junto con el campo de archivo permiten la asignación de archivos de servidor?
¿Existe una API para administrar mediante programación los campos de archivo?

Editar
Acabo de descubrir que todo esto se puede hacer con el módulo de medios. También tengo instalado un elemento multimedia . Sin embargo, no es completamente intuitivo, así que aquí están los pasos que tomé:

Importar a la biblioteca de medios: /admin/content/media/import

Crea un mediafile assetcampo. Esto le permite adjuntar desde la biblioteca.

Los formatos de visualización (ejemplo para audio) están en /admin/config/media/types/manage/audio/display/, en lugar del tipo de contenido "administrar pantalla" que solo proporciona "grande", "pequeño", "vista previa", etc.

brian_d
fuente

Respuestas:

3

Probaría Media y sus módulos asociados. Es una evolución de FileField Sources y proporciona la mayoría del mismo tipo de funcionalidad, aunque con los campos de Drupal 7.

Kim Pepper
fuente
3

Elegí IMCE en combinación con IMCE para FileField (D7) porque el cliente necesitaba una selección rápida y sin bloqueo de archivos cargados con ftp, y esto sin duplicarlos para cada nodo.

Por lo que veo, las fuentes de Filefield siempre duplican los archivos adjuntos en este momento. El importador proporcionado por Media también lo hace.

phils
fuente
2

Puedo ayudarlo a adjuntar un archivo a un archivo archivado. Sin embargo, no he intentado lograr un widget de autocompletar para obtener el archivo que desea adjuntar al campo de archivo.

puede usar file_get_contents()para tomar el archivo que desea adjuntar y luego usar file_save_data para ingresarlo en Drupal. El problema es que deberá cambiar el estado del archivo que acaba de agregar para poder adjuntarlo a un nodo más adelante. De lo contrario, obtendrá un error de validación.

$file = file_save_data($data, $destination = NULL, $replace = FILE_EXISTS_RENAME);

db_update('file_managed')
  ->fields(array('status' => 0))
  ->condition('fid', $file->fid, '=')
  ->execute();

Una vez que el formulario se envía con el fid como el valor para el campo de archivo que desea adjuntar al estado de los archivos administrados, se actualizará automáticamente.

Consulte http://api.drupal.org/api/drupal/includes--file.inc/group/file/7 para obtener más información.

Jepedo
fuente
Esto se ve muy prometedor. Dos preguntas rápidas: 1) Para adjuntar a un nodo después, ¿ $node = node_load($nid); $node->field_myfilefield[$node->language][0] = $file; node_save($node); debería funcionar? 2) ¿Asumo que debo volver a establecer el estado 1después de conectarme al nodo? ¿O hace node_saveesto por mí? ¡Gracias!
brian_d 05 de
Sus suposiciones son correctas sobre cómo guardar el nodo. Sin embargo, al hacerlo, el estado vuelve a 1 automáticamente para que no tenga que preocuparse de hacerlo manualmente. Luché con este por un tiempo ya que no había una función para agregar un archivo a la tabla de archivos administrados sin establecer el estado en 1. Lo he usado en una operación por lotes que descarga archivos de otro servidor y los adjunta a los nodos en mi sitio de Drupal. Por un lado, no si está usando un lote, entonces no puede usarlo file_get_contents(), fallará. Debe utilizar drupal_http_request().
Jepedo
Pensándolo bien, no estoy seguro de si node_save cambia el estado a 1. En el ejemplo al que me refería, usé drupal_form_submit () para asegurarme de que node_save se ejecutara a través de la validación. En ese caso, el estado se actualizó a 1 automáticamente. Puede que tenga que actualizarlo manualmente en su caso. Sin embargo, es probable que node_save () se comporte igual.
Jepedo
1

Siempre puede optar por el enfoque Archivo como nodo y usar un campo Referencia de nodo + Formateadores personalizados (para representar el Nodo como un Archivo) para hacer esto, lo que le permitiría actualizar el nodo Archivo y tener todas las referencias de ese nodo Archivo actualizado en todos los ámbitos.

En D6 también puede usar Relaciones de nodo para proporcionar una Biblioteca de archivos y un campo de Referencia de nodos Formateadores 4 para formatear el nodo como cualquier formateador de FileField disponible.

Descifrar
fuente