web-dev-qa-db-ja.com

プログラムでフィールドのデフォルト値を設定する

Drupal 6では、PHPを使用してデフォルト値を設定できますが、Drupal 7で同じコードを使用することはできません。 。

hook_form_alter()を使用してこれを実行しようとしていますが、コードが機能しません。

function my_form_alter(&$form, &$form_state, $form_id) {
  dsm($form);

  switch($form_id) {
    case 'accounts_node_form':
      $form["field_accounts"]["und"]['#default_value'] = $default;
      // …
      break;
  }
}
10
giorgio79

フォーム変更関数が実際に実行されていると仮定すると(dsm()への呼び出しで確認できます)、フィールド要素に到達するために下がる必要がある配列のレベルが実際にはさらに2つあります。

$form["field_accounts"][LANGUAGE_NONE][0]['value']['#default_value'] = $default;

Drupal 7では、フィールドが翻訳された各言語の値の配列があり(複数/無制限のカーディナリティを持つフィールドに対応できるようにするため)、それぞれの下にさまざまな異なるフィールド列の配列。ほとんどの場合、これは「値」になりますが、常にそうとは限りません(たとえば、画像フィールドにはファイルID列、代替列などがあります)。

それが役に立てば幸い

17
Clive

これは正しい:

function my_form_alter(&$form, &$form_state, $form_id) {
  dsm($form);

  switch($form_id) {
    case 'accounts_node_form':
      $form["field_accounts"][LANGUAGE_NONE][0]['value']['#default_value'] = $default;
      // …
      break;
  }
}
0
keopx

これはうまくいきます:

function my_form_alter(&$form, &$form_state, $form_id) {
  dsm($form);
  switch($form_id) {
    case 'accounts_node_form':
      $form["field_accounts"]["und"][0]['value']['#default_value']=$default;
      break;
  }
}
0
keopx