Присоединение существующих файлов сервера к файловому полю

7

Как установить существующий путь к файлу для файлового поля в Drupal 7? Единственный вариант, который я вижу, это загрузить файл снова.

В Drupal 6 FileField Sources, кажется, делает это.

Позволяет ли FileField Paths или IMCE вместе с полем file назначать файлы сервера?
Есть ли API для программного управления полями файлов?

Редактировать
Я только что обнаружил , что это может быть сделано с помощью модуля СМИ. У меня также установлен медиаэлемент . Однако это не совсем интуитивно понятно, поэтому вот шаги, которые я предпринял:

Импорт в медиатеку: /admin/content/media/import

Создать mediafile assetполе. Это позволяет вам прикреплять из библиотеки.

Форматы отображения (например, для аудио) имеют /admin/config/media/types/manage/audio/display/вместо типа контента «управление отображением», который обеспечивает только «большой», «маленький», «предварительный просмотр» и т. Д.

brian_d
источник

Ответы:

3

Я бы попробовал Media и связанные с ним модули. Это эволюция FileField Sources и предоставляет большую часть функциональности того же рода, хотя и с полями Drupal 7.

Ким Пеппер
источник
3

Я выбрал IMCE в сочетании с IMCE для FileField (D7), потому что клиенту требовался быстрый и беспрепятственный выбор файлов, загруженных с помощью ftp, и это без дублирования их для каждого узла.

Насколько я вижу, Filefield Sources всегда дублирует вложенные файлы в данный момент. Это делает и импортер, предоставленный СМИ.

Phils
источник
3

Исходники FileField были портированы для D7, и это здорово. Также есть модуль под названием Visual select file, который добавляет аббилиты для красивого выбора существующих файлов на основе Views (хорошо для изображений).

Бобик
источник
2

Я могу помочь вам с прикреплением файла к файлу. Однако я не пытался создать виджет автозаполнения, чтобы получить файл, который вы хотите прикрепить к полю файла.

Вы можете использовать, file_get_contents()чтобы получить файл, который вы хотите прикрепить, а затем использовать file_save_data, чтобы получить его в Drupal. Уловка в том, что вам нужно изменить статус файла, который вы только что добавили, чтобы потом можно было присоединить его к узлу. В противном случае вы получите ошибку проверки.

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

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

После того, как форма отправлена ​​с указанием fid, значение для поля файла, к которому вы хотите прикрепить файл к состоянию управляемых файлов, будет автоматически обновлено.

Посетите http://api.drupal.org/api/drupal/includes--file.inc/group/file/7 для дальнейшего ознакомления.

Jepedo
источник
Это выглядит очень многообещающе. Два быстрых вопроса: 1) Чтобы потом присоединиться к узлу, $node = node_load($nid); $node->field_myfilefield[$node->language][0] = $file; node_save($node); должно работать? 2) Я полагаю, я должен установить статус обратно 1после подключения к узлу? Или делает node_saveэто для меня? Спасибо!
brian_d
Ваши предположения верны в отношении сохранения узла. Однако при этом автоматически устанавливается статус 1, поэтому вам не нужно беспокоиться о том, чтобы сделать это вручную. Я боролся с этим некоторое время, так как не было функции добавить файл в таблицу управляемых файлов без установки статуса 1. Я использовал его в пакетной операции, которая загружает файлы с другого сервера и прикрепляет их к узлам. на моем сайте Drupal. С другой стороны, если вы не используете партию, вы не сможете ее использовать file_get_contents(). Вы должны использовать drupal_http_request().
Jepedo
Во-вторых, я не уверен, что node_save меняет статус на 1. В примере, на который я ссылался, я использовал drupal_form_submit (), чтобы гарантировать, что node_save прошел проверку. В этом случае статус был обновлен до 1 автоматически. Возможно, вам придется обновить его вручную в вашем случае. Скорее всего, node_save () будет вести себя так же.
Jepedo
1

Вы всегда можете воспользоваться подходом «Файл как узел» и использовать для этого поле «Ссылка на узел» + « Пользовательские средства форматирования» (чтобы отобразить узел как файл), что позволит вам обновить узел «Файл» и обновить все ссылки на этот узел «Файл». пересечь границу.

В D6 вы также можете использовать Узловые Отношения, чтобы предоставить Библиотеку Файлов и Поле Узла Форматирования 4, чтобы отформатировать узел как любой доступный форматер FileField.

Расшифруйте
источник