2011-10-31 5 views
6

私は、ファイル(ファイル)とリスト(ステータス)の2つのカスタムフィールドを持つカスタムコンテンツタイプを持っています。Drupal - file_managedでのエントリの作成

私は実行して、ステータスの値を設定することができます。

は私が既にサーバー上にあるファイルのfield_fileとfile_managed(コア表)のエントリを作成したいです。私はすでにファイルのMIMEタイプ、サイズ、パスを知っています。

これを達成するための適切な方法は何ですか?

+0

もfile_managedテーブルにありますか? –

+0

いいえ、ファイルはサードパーティアプリケーション経由でサーバーに送られます。ファイルに関する情報は、Drupalが認識しているXMLファイルを介してアクセスできます。 XMLからのデータはfile_managedとfield_fileに入れる必要があります。 – djdy

答えて

14

私は手動でファイルオブジェクトをインスタンス化し、(例として、画像ファイルを使用して)、それをコミットするfile_save()を使用します。

global $user; 
$file = new stdClass; 
$file->uid = $user->uid; 
$file->filename = 'image.png'; 
$file->uri = 'public://path/to/file/image.png'; 
$file->status = 1; 
$file->filemime = 'image/png'; 

file_save($file); 

あなたはその後、Drupalは、あなたのモジュールは既得権を持って知っているようにfile_usage_add()を呼び出す必要がありますこのファイル(あなたの$nodeオブジェクトからnidを使用して):

file_usage_add($file, 'mymodule', 'node', $node->nid); 

最後に、あなたがノードにファイルを追加することができます

$node->field_file[$node->language][] = array(
    'fid' => $file->fid 
); 

希望します。

+0

ありがとう、それは多くの助けになります。 – djdy

関連する問題