Attacher des fichiers de serveur existants à filefield

7

Comment définir un chemin de fichier existant pour un champ de fichier, dans Drupal 7? La seule option que je vois est de télécharger à nouveau le fichier.

Dans Drupal 6, FileField Sources semble faire cela.

DOE FileField chemins ou IMCE le long avec le champ de fichier permet d' attribuer des fichiers de serveur?
Existe-t-il une API pour gérer par programme les champs de fichiers?

Edit
Je viens de découvrir que tout cela peut être fait avec le module média. J'ai également installé mediaelement . Cependant, ce n'est pas complètement intuitif, voici donc les étapes que j'ai suivies:

Importer dans la médiathèque: /admin/content/media/import

Créez un mediafile assetchamp. Cela vous permet de joindre à partir de la bibliothèque.

Les formats d'affichage (par exemple pour l'audio) sont à /admin/config/media/types/manage/audio/display/, au lieu du type de contenu "gérer l'affichage" qui ne fournit que "grand", "petit", "aperçu", etc.

brian_d
la source

Réponses:

3

J'essaierais Media et ses modules associés. C'est une évolution des sources FileField , et fournit la plupart du même type de fonctionnalités bien qu'avec les champs Drupal 7.

Kim Pepper
la source
3

J'ai choisi IMCE en combinaison avec IMCE pour FileField (D7) parce que le client avait besoin d'une sélection rapide et sans faille des fichiers téléchargés avec ftp - et cela sans les dupliquer pour chaque nœud.

Pour autant que je vois, les sources Filefield dupliquent toujours les fichiers joints pour le moment. L'importateur fourni par Media le fait également.

phils
la source
3

FileField Sources a été porté pour D7 et c'est génial. Trop il y a un module appelé Visual select file qui ajoute abbiliti pour une belle sélection basée sur les vues des fichiers existants (bon pour les images).

Bobík
la source
2

Je peux vous aider à joindre un fichier à un fichier. Cependant, je n'ai pas tenté d'obtenir un widget de saisie semi-automatique pour obtenir le fichier que vous souhaitez attacher au champ de fichier.

vous pouvez utiliser file_get_contents()pour récupérer le fichier que vous souhaitez joindre, puis utiliser file_save_data pour le récupérer dans Drupal. Le problème est que vous devrez modifier l'état du fichier que vous venez d'ajouter afin de pouvoir le joindre à un nœud plus tard. Sinon, vous obtiendrez une erreur de validation.

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

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

Une fois que le formulaire est soumis avec le fid comme valeur pour le champ de fichier que vous voulez que le fichier joint au statut des fichiers gérés sera automatiquement mis à jour.

Consultez http://api.drupal.org/api/drupal/includes--file.inc/group/file/7 pour plus d'informations.

Jepedo
la source
Cela semble très prometteur. Deux questions rapides: 1) Pour attacher à un nœud par la suite, $node = node_load($nid); $node->field_myfilefield[$node->language][0] = $file; node_save($node); devrait fonctionner? 2) Je suppose que je devrais rétablir l'état 1après la connexion au nœud? Ou est node_save-ce que cela fait pour moi? Merci!
brian_d
Vos hypothèses sont correctes sur l'enregistrement du nœud. Cependant, cela redonne automatiquement le statut à 1 afin que vous n'ayez pas à vous soucier de le faire manuellement. J'ai eu du mal avec celui-ci pendant un certain temps car il n'y avait pas de fonction pour ajouter un fichier à la table des fichiers gérés sans définir l'état sur 1. Je l'ai utilisé dans une opération par lots qui télécharge des fichiers à partir d'un autre serveur et les attache à des nœuds sur mon site Drupal. D'un côté, pas si vous utilisez un lot, vous ne pouvez pas l'utiliser file_get_contents()échouera. Vous devez utiliser drupal_http_request().
Jepedo
Après réflexion, je ne sais pas si node_save change le statut à 1. Dans l'exemple auquel je faisais référence, j'ai utilisé drupal_form_submit () pour m'assurer que le node_save a fonctionné pendant la validation. Dans ce cas, le statut a été mis à jour automatiquement à 1. Vous devrez peut-être le mettre à jour manuellement dans votre cas. Les chances sont que node_save () se comportera de la même façon.
Jepedo
1

Vous pouvez toujours opter pour l'approche Fichier en tant que nœud et utiliser un champ Référence de nœud + Formateurs personnalisés (pour rendre le nœud en tant que fichier) pour ce faire, ce qui vous permettra de mettre à jour le nœud de fichier et de mettre à jour toutes les références de ce nœud de fichier à travers le conseil d'administration.

Dans D6, vous pouvez également utiliser les relations de nœud pour fournir un champ de référence de nœud de bibliothèque de fichiers et de formateurs 4 pour formater le nœud comme n'importe quel formateur FileField disponible.

Déchiffrer
la source