管理ファイル:#default_valueを設定する適切な方法は何ですか?


7
$form['picture']['file'] = array(
  '#type' => 'managed_file',
  '#title' => t('picture'),
  '#description' => t('Allowed extensions: gif png jpg jpeg'),
  '#default_value' => (isset($foo->picture->fid) ? $foo->picture->fid : ''),
  '#upload_location' => variable_get('picture_upload_location'),
  '#upload_validators' => array(
    'file_validate_extensions' => array('gif png jpg jpeg'),
    // Pass the maximum file size in bytes
    'file_validate_size' => array(MAX_FILE_SIZE*1024*1024),
  ),
);

ここに上記のコードスニペットがあります。とても便利ですが、設定が大変です#default_value

なに$foo?どこに設定され、どのように変更できますか?他のページにアップロードされた画像を使用しますか(同じモジュールにコード化されています)。

回答:


6

Drupal Answersへようこそ。fid整数値をデフォルト値に渡すだけです。fidについて理解を深めるには、以下の説明を参照してください。

fidは、Drupal File Systemを使用してアップロードされたファイルごとにデータベースに保存される一意のファイルIDです。

したがって、デフォルトの画像を設定する場合は、Drupal File System経由でアップロードする必要があります。理想的には、アップロードハンドラのvariable_setを使用して、アップロードされたファイルのfidを変数に格納し、fidを設定するためにデフォルト値でvariable_getを実行する必要があります。それでおしまい !!

それが答えることを願っています:-)


問題は、ユーザーのアップロードによって画像が変更される場合があることです。つまり、私は別のfidを持つことになります。私はDEFAULT_VALUEとして設定することができますので、私は、現在のFIDを取得する必要があります
Jayjay・D・ルフィ

はい。そのためには、アップロードしたファイルのfidを変数に設定するフォームの送信ハンドラでvariable_setを使用する必要があります。そして、variable_getを使用して同じものをロードします!私の更新された回答を読んでください:-)
Anil Sagar

0

送信関数を呼び出さずにファイルを再度レンダリングする場合、ユーザーは$ _GETプロパティを使用できます。ファイルが送信関数の後に呼び出されている場合は、$ form_state ['values'] ['file']を使用します

$ form ['file'] = array(
    '#type' => 'managed_file'、
    '#upload_location' => 'private://'、
    '#weight' => 5
    '#upload_validators' => array(
      'file_validate_extensions' => array( 'gif png jpg jpeg doc docx pdf xls xlsx rtf odt tiff')、
    )、
  );

  if(isset($ _ GET ['file'])){
      $ form ['file'] ['#default_value'] = $ _GET ['file'];
  }

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.