プログラムでファイルを(アップロードではなく)ノードに割り当てようとしています。
これはシナリオです:
私は2000個のノードを作成し、2000個のPDFファイルがあります(ノードごとに1つのPDF)。これらのファイルをDrupalインターフェイス経由でアップロードしたくありません。これらすべてのPDFファイルをFTP経由でアップロードします。
これらのPDFファイルには適切な名前が付けられています。つまり、すべてのファイルに_{field_magazine_name}-{field_issue_number}.pdf
_(sites/default/files /の下など)の標準化された名前がありますたとえばpdf)。
私がやりたいことは、ノードの作成/保存中にこれらのPDFファイルを関連ノードに割り当てることです。
これを行う1つの方法は、 ファイルフィールドソース モジュールを使用することです。
リモートファイル転送はいくつかのJavaScriptコードで使用できると思います。リモートファイル転送の入力には、必要なフィールドを自動的に入力でき、機能します(たとえば、_http://example.com/sites/default/files/pdf/{field_magazine_name}-{field_issue_number}.pdf
_)...しかし、ノードを作成しません手動で 、 Feeds を使用してノードを作成しています。したがって、JavaScriptを使用することは、私が使用できる方法ではありません。
私も同じような状況でした。私の状況は、別のコンテンツタイプノードの作成時にノードにファイルを添付することです。これをhook_node_insertで行いました
使用されるコードは次のとおりです。
$source_node = node_load($nid);
$filename = $bio_file_name; //your specific filename
$dir = 'public://temp-path/'.$filename; //path to specific file with name
$file_size = filesize($dir);
//New file object
$file = new stdClass;
$file->uid = $source_node->uid;
$file->filename = $filename;
$file->uri = $dir;
$file->filemime = file_get_mimetype($dir);
// Make it permanent, otherwise it will get deleted later.
$file->status = FILE_STATUS_PERMANENT;
// Save file object to make it a 'managed file'.
$file_obj = file_move($file, 'public://newpath', FILE_EXISTS_REPLACE);
$source_node->your-file-field-name['und'][0] = array(
'fid' => $file_obj->fid,
'uid' => $file_obj->uid,
'filename' => $file_obj->filename,
'uri' => $file_obj->uri,
'filemime' => $file_obj->filemime,
'filesize' => $file_obj->filesize,
'status' => 1,
'display' => 1,
'description' => '',
);
node_save($source_node);
これがお役に立てば幸いです。
ファイル/画像フィールドを追加
// Some file on our system
$file_path = drupal_realpath('somefile.png'); // Create a File object
$file = (object) array(
'uid' => 1,
'uri' => $file_path,
'filemime' => file_get_mimetype($file_path),
'status' => 1,
);
$file = file_copy($file, 'public://'); // Save the file to the root of the files directory. You can specify a subdirectory, for example, 'public://images'
$node->field_image[LANGUAGE_NONE][0] = (array)$file; //associate the file object with the image field:
Abinに加えて、ノードの保存後に次のコードを追加して、ファイルの使用を設定します。
file_usage_add($file_obj, 'file', 'node', $source_node->nid);
drupal docs を参照してください。
これとは別にもう1つ、「und」の代わりにLANGUAGE_NONEを使用することをお勧めします。