Импортировать файлы в поле файла в Drupal 7

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

В настоящее время все эти файлы хранятся в общедоступных публикациях: //, поэтому они уже находятся в общем пути к файлам, где они должны быть, мне просто нужно «подключить их».

Вместо того, чтобы взломать это с помощью Ruby, который я обычно делал, я хотел бы использовать плохую привычку и использовать API Drupal. Я просмотрел следующие статьи:

.., но мне не удалось обернуть вокруг себя голову.

Любопытно, если другие разобрались с этой ситуацией и что они сделали для ее решения. Спасибо.

UPDATE

У меня есть файлы, которые копируются, как и должно быть. Однако я не сталкиваюсь с ошибкой, и ошибка возникает во время вызова node_save.

Вот ошибка:

PDOException: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '' for key 'uri': INSERT INTO {file_managed} (filesize, status, timestamp) VALUES (:db_insert_placeholder_0, :db_insert_placeholder_1, :db_insert_placeholder_2); Array
(
    [:db_insert_placeholder_0] => 0
    [:db_insert_placeholder_1] => 1
    [:db_insert_placeholder_2] => 1330491978
)
 in drupal_write_record() (line 6975 of /var/www/website/drupal-7.4/includes/common.inc).

И вот код.

$node = node_load($bib_value->nid);

$file = new stdClass();
$file->filename = basename($filepath);
$file->filepath = $filepath;
$file->filemime = file_get_mimetype($filepath);
$file->filesize = filesize($filepath);
$file->uid = 1;
$file->status = FILE_STATUS_PERMANENT;
$file->uri = $filepath;
$file = file_copy($file,'public://publications',FILE_EXISTS_REPLACE);

// THIS IS A PROBLEM LINE
$node->field_publication_attachment[LANGUAGE_NONE] = $file;

node_save($node);

Если я прокомментирую строку с надписью THIS IS A PROBLEM LINE, то ошибка не возникает, но это явно нежелательно, потому что это означает, что она завершается, но без прикрепления моего файла к узлу! Помогите!

Решение

$node = node_load($bib_value->nid);

$file = new stdClass();
$file->filename = basename($filepath);
$file->filepath = $filepath;
$file->filemime = file_get_mimetype($filepath);
$file->filesize = filesize($filepath);
$file->uid = 1;
$file->status = FILE_STATUS_PERMANENT;
$file->uri = $filepath;
$file->display = 1;
$file->description = '';
$file = file_copy($file,'public://publications',FILE_EXISTS_REPLACE);

$node->field_publication_attachment[LANGUAGE_NONE][] = (array)$file;

node_save($node);

Необходимо установить display и description on $file, а также листинг $file как массив при добавлении его в поле вложения. После этого все прошло гладко.

4 голоса | спросил Lester Peabody 29 FebruaryEurope/MoscowbWed, 29 Feb 2012 02:03:05 +0400000000amWed, 29 Feb 2012 02:03:05 +040012 2012, 02:03:05

2 ответа


5

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

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

$file = new stdClass();
$file->filename = basename($local_path);
$file->filepath = $local_path;
$file->uri = $local_path;
$file->filemime = $mime;
$file->filesize = filesize($local_path);

// Set this at the very beginning to correspond to USER you want posting items.
$file->uid = $uid; 
$file->status = FILE_STATUS_PERMANENT;
file_save($file);

$images[] = array(
'fid' => $file->fid,
'alt' => $page_data['title'],
'title' => $page_data['title']
);
ответил blue928 29 FebruaryEurope/MoscowbWed, 29 Feb 2012 02:42:38 +0400000000amWed, 29 Feb 2012 02:42:38 +040012 2012, 02:42:38
5

Другой способ сделать это:

$entity = entity_load($id);
$data = file_get_contents($localpath);
$destination = file_create_filename(basename($localpath), file_default_scheme() . '://yourdir/' );
$file = file_save_data($data, $destination);
$entity->field_attachment[LANGUAGE_NONE][] = (array)$file;
$entity->save();
ответил Xatoo 27 AMpFri, 27 Apr 2012 09:29:30 +040029Friday 2012, 09:29:30

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132