Anhängen vorhandener Serverdateien an das Dateifeld

7

Wie legen Sie in Drupal 7 einen vorhandenen Dateipfad für ein Dateifeld fest? Die einzige Option, die ich sehe, ist das erneute Hochladen der Datei.

In Drupal 6 scheint FileField Sources dies zu tun.

Ermöglichen FileField Paths oder IMCE zusammen mit dem Dateifeld die Zuweisung von Serverdateien?
Gibt es eine API zum programmgesteuerten Verwalten von Dateifeldern?

Bearbeiten
Ich habe gerade herausgefunden , dass diese können alle mit dem Medienmodul erfolgen. Ich habe auch Mediaelement installiert. Es ist jedoch nicht ganz intuitiv. Deshalb habe ich folgende Schritte unternommen:

In Medienbibliothek importieren: /admin/content/media/import

Erstellen Sie ein mediafile assetFeld. Auf diese Weise können Sie aus der Bibliothek anhängen.

/admin/config/media/types/manage/audio/display/Anzeigeformate (Beispiel für Audio) sind anstelle des Inhaltstyps "Anzeige verwalten", der nur "groß", "klein", "Vorschau" usw. bereitstellt.

brian_d
quelle

Antworten:

3

Ich würde Media und die dazugehörigen Module ausprobieren . Es ist eine Weiterentwicklung von FileField-Quellen und bietet die meisten Funktionen, obwohl sie Drupal 7-Felder enthalten.

Kim Pepper
quelle
3

Ich habe IMCE in Kombination mit IMCE für FileField (D7) gewählt, weil der Client eine schnelle und unauffällige Auswahl von Dateien benötigte, die mit FTP hochgeladen wurden - und dies, ohne sie für jeden Knoten zu duplizieren.

Soweit ich sehe, duplizieren die Dateifeldquellen im Moment immer angehängte Dateien. Das macht auch der von Media bereitgestellte Importeur.

Phils
quelle
3

FileField Sources wurde für D7 portiert und ist großartig. Es gibt auch ein Modul namens Visual Select File, das Abbiliti für eine schöne, auf Ansichten basierende Auswahl vorhandener Dateien hinzufügt (gut für Bilder).

Bobík
quelle
2

Ich kann Ihnen beim Anhängen einer Datei an eine Datei helfen. Ich habe jedoch nicht versucht, ein Widget für die automatische Vervollständigung zu erstellen, um die Datei abzurufen, die Sie an das Dateifeld anhängen möchten.

Sie können file_get_contents()die Datei, die Sie anhängen möchten, abrufen und dann mit file_save_data in Drupal übertragen. Der Haken ist, dass Sie den Status der gerade hinzugefügten Datei ändern müssen, damit Sie sie später an einen Knoten anhängen können. Andernfalls wird ein Validierungsfehler angezeigt.

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

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

Sobald das Formular mit der FID als Wert für das Dateifeld gesendet wurde, dessen Datei an den Status der verwalteten Dateien angehängt werden soll, wird es automatisch aktualisiert.

Weitere Informationen finden Sie unter http://api.drupal.org/api/drupal/includes--file.inc/group/file/7 .

Jepedo
quelle
Das sieht sehr vielversprechend aus. Zwei kurze Fragen: 1) Sollte es $node = node_load($nid); $node->field_myfilefield[$node->language][0] = $file; node_save($node); funktionieren, um danach eine Verbindung zu einem Knoten herzustellen ? 2) Ich gehe davon aus, dass ich den Status 1nach dem Anschließen an den Knoten zurücksetzen sollte. Oder macht node_savedas für mich? Vielen Dank!
brian_d
Ihre Annahmen zum Speichern des Knotens sind richtig. Dadurch wird der Status jedoch automatisch auf 1 zurückgesetzt, sodass Sie sich nicht um die manuelle Ausführung kümmern müssen. Ich hatte eine Weile Probleme damit, da es keine Funktion gab, eine Datei zur Tabelle der verwalteten Dateien hinzuzufügen, ohne den Status auf 1 zu setzen. Ich habe sie in einem Stapelvorgang verwendet, bei dem Dateien von einem anderen Server heruntergeladen und an Knoten angehängt werden auf meiner Drupal Seite. Wenn Sie einen Stapel nicht verwenden, können file_get_contents()Sie ihn nicht verwenden. Sie sollten verwenden drupal_http_request().
Jepedo
Beim zweiten Gedanken bin ich mir nicht sicher, ob node_save den Status auf 1 ändert. In dem Beispiel, auf das ich mich bezog, habe ich drupal_form_submit () verwendet, um sicherzustellen, dass node_save die Validierung durchlaufen hat. In diesem Fall wurde der Status automatisch auf 1 aktualisiert. In Ihrem Fall müssen Sie es möglicherweise manuell aktualisieren. Es besteht jedoch die Möglichkeit, dass sich node_save () gleich verhält.
Jepedo
1

Sie können jederzeit den Ansatz "Datei als Knoten" verwenden und ein Feld " Knotenreferenz" + Benutzerdefinierte Formatierer (um den Knoten als Datei zu rendern) verwenden, um den Dateiknoten zu aktualisieren und alle Referenzen dieses Dateiknotens zu aktualisieren über die Grenze.

In D6 können Sie auch Knoten Beziehungen eine Dateisammlung und zur Verfügung zu stellen Formatter 4 Knoten Referenzfeld den Knoten als jeder verfügbaren Filefield Formatierer formatiert werden .

Entziffern
quelle