web-dev-qa-db-ja.com

CCKフィールド設定のファイルアップロードフィールド

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リファレンスは、私が望むほど詳細には入りません。

4
Joe

フォーム送信時にファイルのステータスにFILE_STATUS_PERMANENTを追加して、ファイルを保存する必要があります。

$file->status = FILE_STATUS_PERMANENT;
file_save($file);
1
LSU_JBob