Drupal 7に、CCKの小さな設定領域とは対照的に、「通常の」フォーム(つまり、モジュールの構成用の個別のページ)にファイルアップロードフィールドを追加する)に違いはありますか?フィールド([表示の管理]タブで変更するフィールドの歯車をクリックした後に表示されるフィールド)?
hook_field_formatter_settings_form を使用したカスタムフィールドの設定オプションがたくさんありますが、ファイルアップロードフィールドを作成する方法を理解しようとしています。ユーザーが画像を参照して、ページをリロードせずにアップロードできるようにしたいのですが。これは私が現在持っているすべてです:
$element['custom_field_name']['image'] = array(
'#type' => 'file',
'#size' => 48,
'#title' => t('Image upload'),
'#description' => t("Upload an image."),
);
この領域にファイルアップロードフィールド(ajaxを使用する)を含めることができる場合、他に何をする必要がありますか?
編集:
ファイルフィールドは次のようになります。
$element['custom_field_name']['image'] = array(
'#type' => 'managed_file',
'#title' => t('Image upload'),
'#upload_validators' => array(
'file_validate_extensions' => array(0 => 'png jpg jpeg gif'),
'file_validate_image_resolution' => array('64x64', '10x10')
),
'#upload_location' => 'public://default_images/',
'#description' => t("Upload an image."),
);
これは一種の動作です:ファイルをアップロードしてsites/default/files/default_images
に移動しますが、それは一時的なものです。私は フォームAPIリファレンス を実行してきましたが、永続的に保存する必要があると表示されています。このロジックをどこに配置すればよいかわかりません。 #process
キーをファイルフィールドに追加してプライベート関数を呼び出しますか?または、送信ハンドラを作成しますか? APIリファレンスは、私が望むほど詳細には入りません。
フォーム送信時にファイルのステータスにFILE_STATUS_PERMANENT
を追加して、ファイルを保存する必要があります。
$file->status = FILE_STATUS_PERMANENT;
file_save($file);