Đính kèm tập tin máy chủ hiện tại vào trường tập tin


7

Làm cách nào để bạn đặt đường dẫn tệp hiện có cho trường tệp, trong Drupal 7? Tùy chọn duy nhất tôi thấy là tải lại tệp.

Trong Drupal 6, Nguồn FileField dường như làm điều này.

Liệu FileField Paths hoặc IMCE cùng với lĩnh vực tập tin cho phép chuyển nhượng các tập tin máy chủ?
Có API để quản lý các trường tệp theo chương trình không?

Chỉnh sửa
Tôi mới phát hiện ra rằng tất cả có thể được thực hiện với mô-đun phương tiện. Tôi cũng đã cài đặt mediaelement . Tuy nhiên nó không hoàn toàn trực quan, vì vậy đây là các bước tôi đã thực hiện:

Nhập vào thư viện phương tiện: /admin/content/media/import

Tạo một mediafile assetlĩnh vực. Điều này cho phép bạn đính kèm từ thư viện.

Các định dạng hiển thị (ví dụ cho âm thanh) là tại /admin/config/media/types/manage/audio/display/, thay vì loại nội dung "quản lý hiển thị" chỉ cung cấp "lớn", "nhỏ", "xem trước", v.v.

Câu trả lời:


3

Tôi sẽ thử Media và các mô-đun liên quan của nó. Đó là một sự phát triển của Nguồn FileField và cung cấp hầu hết các loại chức năng tương tự mặc dù với các trường Drupal 7.


3

Tôi đã chọn IMCE kết hợp với IMCE cho FileField (D7) vì máy khách cần một lựa chọn nhanh chóng và bỏ qua các tệp được tải lên bằng ftp - và điều này mà không cần sao chép chúng cho mỗi nút.

Theo như tôi thấy Nguồn Filefield luôn sao chép các tệp đính kèm tại thời điểm này. Các nhà nhập khẩu được cung cấp bởi Media cũng làm điều đó.



2

Tôi có thể giúp bạn với việc đính kèm một tập tin vào một tập tin. Tuy nhiên, tôi đã không cố gắng đạt được một tiện ích tự động hoàn thành để có được tệp mà bạn muốn đính kèm vào trường tệp.

bạn có thể sử dụng file_get_contents()để lấy tệp mà bạn muốn đính kèm và sau đó sử dụng file_save_data để đưa nó vào Drupal. Điều hấp dẫn là bạn sẽ cần thay đổi trạng thái của tệp bạn vừa thêm để bạn có thể đính kèm tệp đó vào một nút sau đó. Thông thái khác, bạn sẽ nhận được một lỗi xác nhậ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();

Khi biểu mẫu được gửi với fid là giá trị cho trường tệp mà bạn muốn tệp được đính kèm với trạng thái tệp được quản lý sẽ được cập nhật tự động.

Hãy xem http://api.drupal.org/api/drupal/includes--file.inc/group/file/7 để tham khảo thêm.


Điều này có vẻ rất hứa hẹn. Hai câu hỏi nhanh: 1) Để gắn vào một nút sau đó, $node = node_load($nid); $node->field_myfilefield[$node->language][0] = $file; node_save($node); có nên hoạt động không? 2) Tôi giả sử tôi nên đặt lại trạng thái 1sau khi gắn vào nút? Hay node_savelàm điều này cho tôi? Cảm ơn!
brian_d

Giả định của bạn là chính xác về việc lưu nút. Tuy nhiên, làm như vậy sẽ tự động đặt lại trạng thái về 1 để bạn không phải lo lắng về việc thực hiện thủ công. Tôi đã vật lộn với cái này một lúc vì không có chức năng thêm tệp vào bảng tệp được quản lý mà không đặt trạng thái thành 1. Tôi đã sử dụng nó trong một hoạt động hàng loạt tải tệp từ máy chủ khác và gắn chúng vào các nút trên trang web Drupal của tôi. Ở một bên không nếu bạn đang sử dụng một đợt thì bạn không thể sử dụng file_get_contents()nó sẽ thất bại. Bạn nên sử dụng drupal_http_request().
Jepedo

Về ý nghĩ thứ hai, tôi không chắc liệu node_save có thay đổi trạng thái thành 1. Trong ví dụ tôi đã đề cập đến tôi đã sử dụng drupal_form_submit () để đảm bảo rằng node_save chạy qua xác thực. Trong trường hợp đó, trạng thái được cập nhật tự động lên 1. Bạn có thể phải cập nhật thủ công trong trường hợp của bạn. Rất có thể là node_save () sẽ hoạt động giống nhau.
Jepedo

1

Bạn luôn có thể sử dụng cách tiếp cận Tệp dưới dạng Nút và sử dụng trường Tham chiếu nút + Trình định dạng tùy chỉnh (để hiển thị Nút dưới dạng tệp) để thực hiện việc này, điều này sẽ cho phép bạn cập nhật nút Tệp và cập nhật tất cả các tham chiếu của nút Tệp đó mọi mặt.

Trong D6, bạn cũng có thể sử dụng Mối quan hệ nút để cung cấp Thư viện tệp và trường định dạng 4 tham chiếu nút để định dạng nút như bất kỳ trình định dạng FileField có sẵn nào.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.