私は数週間前に似たようなことをしなければならず、最終的にRemote File モジュールのいくつかの機能、特に関数を適応させましたremote_file_cck_attach_file()
。filefield モジュールの関数を使用しfield_file_save_file()
ます。これは、探している関数である可能性があります。
私の場合、ファイルはいくつかのリモートの場所から取得され、を使用して一時的に保存されますfile_save_data()
。それらをCCKファイルフィールドに添付することhook_nodeapi()
は、次を使用して事前保存時に行われます。
public static function attachAsCCKField(&$node, $filepath, $fieldname, $index=0) {
// Grab the filefield definition
$field = content_fields($fieldname, $node->type);
$validators = array_merge(filefield_widget_upload_validators($field), imagefield_widget_upload_validators($field));
$fieldFileDirectory = filefield_widget_file_path($field);
// This path does not necessarily exist already, so make sure it is available
self::verifyPath($fieldFileDirectory);
$file = field_file_save_file($filepath, $validators, $fieldFileDirectory);
// Is the CCK field array already available in the node object?
if (!is_array($node->$fieldname)) {
// No, add a stub
$node->$fieldname=array();
}
$node->{$fieldname}[$index] = $file;
}
$filepath
は添付するファイルへのパス、$fieldname
はノード内で使用するファイル フィールド インスタンスの内部名、$index
複数のフィールド エントリの場合は添付ファイルの 0 ベースのインデックスになります。
関数はユーティリティ クラス内で終了したため、verifyPath() 呼び出しのクラス構文です。この呼び出しは、ターゲット ディレクトリが利用可能であることを確認するだけです。
public static function verifyPath($path) {
if (!file_check_directory($path, FILE_CREATE_DIRECTORY)) {
throw new RuntimeException('The path "' . $path . '" is not valid (not creatable, not writeable?).');
}
}
それは私のためにそれをしました - 他のすべてはノードの保存で自動的に起こります。
getid3 モジュールはまだ使用していないので、この方法でうまくいくかどうかはわかりません。また、追加の情報/属性をファイル フィールドに追加する必要はなかったので、field_file_save_file()
. とにかく、これがお役に立てば幸いです。