Melampirkan file server yang ada ke filefield

7

Bagaimana Anda menetapkan jalur file yang ada untuk bidang file, di Drupal 7? Satu-satunya opsi yang saya lihat adalah mengunggah file lagi.

Di Drupal 6, FileField Sources tampaknya melakukan ini.

Apakah Path FileField atau IMCE bersama dengan bidang file memungkinkan penugasan file server?
Apakah ada API untuk secara terprogram mengelola bidang file?

Mengedit
Saya baru saja menemukan bahwa ini bisa semua dilakukan dengan modul media yang. Saya juga sudah memasang elemen media . Namun itu tidak sepenuhnya intuitif, jadi inilah langkah-langkah yang saya ambil:

Impor ke perpustakaan media: /admin/content/media/import

Buat mediafile assetbidang. Ini memungkinkan Anda untuk melampirkan dari perpustakaan.

Format tampilan (misalnya untuk audio) berada di /admin/config/media/types/manage/audio/display/, alih-alih jenis konten "kelola tampilan" yang hanya menyediakan "besar", "kecil", "pratinjau", dll.

brian_d
sumber

Jawaban:

3

Saya akan mencoba Media dan modul yang terkait. Ini merupakan evolusi dari FileField Sources , dan menyediakan sebagian besar fungsi yang sama walaupun dengan bidang Drupal 7.

Kim Pepper
sumber
3

Saya memilih IMCE dalam kombinasi dengan IMCE untuk FileField (D7) karena klien membutuhkan pilihan file yang diunggah dengan ftp yang cepat dan tidak berbelok - dan ini tanpa menduplikasi mereka untuk setiap node.

Sejauh yang saya lihat, Sumber Filefield selalu menduplikasi file terlampir saat ini. Importir yang disediakan oleh Media juga melakukannya.

phils
sumber
3

Sumber FileField telah porting untuk D7 dan itu bagus. Juga ada modul yang disebut file pilih Visual yang menambahkan abbiliti untuk tampilan berbasis file yang bagus (baik untuk gambar).

Bobik
sumber
2

Saya dapat membantu Anda dengan melampirkan file ke filefile. Namun, saya belum berusaha mencapai widget pelengkapan otomatis untuk mendapatkan file yang ingin Anda lampirkan ke bidang file.

Anda dapat menggunakan file_get_contents()untuk mengambil file yang ingin Anda lampirkan dan kemudian gunakan file_save_data untuk masuk ke Drupal. Tangkapannya adalah Anda harus mengubah status file yang baru saja Anda tambahkan sehingga Anda dapat melampirkannya ke sebuah node nanti. Jika tidak, Anda akan mendapatkan kesalahan validasi.

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

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

Setelah formulir dikirimkan dengan fid sebagai nilai untuk bidang file yang Anda inginkan, file yang dilampirkan ke status file terkelola akan diperbarui secara otomatis.

Lihat http://api.drupal.org/api/drupal/includes--file.inc/group/file/7 untuk referensi lebih lanjut.

Jepedo
sumber
Ini terlihat sangat menjanjikan. Dua pertanyaan cepat: 1) Untuk melampirkan ke node setelahnya, $node = node_load($nid); $node->field_myfilefield[$node->language][0] = $file; node_save($node); haruskah bekerja? 2) Saya menganggap saya harus mengatur status kembali 1setelah melampirkan ke node? Atau apakah node_saveini dilakukan untuk saya? Terima kasih!
brian_d
Asumsi Anda benar tentang menyimpan node. Namun, dengan melakukannya, setel status kembali ke 1 secara otomatis sehingga Anda tidak perlu khawatir melakukannya secara manual. Saya berjuang dengan yang ini untuk sementara waktu karena tidak ada fungsi untuk menambahkan file ke tabel file yang dikelola tanpa mengatur status ke 1. Saya telah menggunakannya dalam operasi batch yang mengunduh file dari server lain dan menempelkannya ke node di situs Drupal saya. Di satu sisi tidak jika Anda menggunakan batch maka Anda tidak dapat menggunakannya file_get_contents()akan gagal. Anda harus menggunakan drupal_http_request().
Jepedo
Setelah dipikir-pikir, saya tidak yakin apakah node_save mengubah status menjadi 1. Dalam contoh yang saya maksudkan adalah saya menggunakan drupal_form_submit () untuk memastikan bahwa node_save dijalankan melalui validasi. Dalam hal ini status diperbarui ke 1 secara otomatis. Anda mungkin harus memperbaruinya secara manual dalam kasus Anda. Kemungkinannya adalah node_save () akan berperilaku sama.
Jepedo
1

Anda selalu dapat menggunakan File sebagai pendekatan Node dan menggunakan bidang Referensi Node + Custom Formatters (untuk merender Node sebagai File) untuk melakukan ini, yang akan memungkinkan Anda untuk memperbarui node File dan semua referensi dari node File diperbarui di seluruh papan.

Di D6 Anda juga dapat menggunakan Hubungan Node untuk menyediakan bidang Pustaka File dan Referensi 4 Node Format untuk memformat simpul seperti formatter FileField yang tersedia.

Menguraikan
sumber
1

Sumber FileField belum porting ke Drupal 7, tetapi sudah direncanakan. Lihat masalah terkait di drupal.org .

Pierre Buyle
sumber