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;
}
}
フォーム変更関数が実際に実行されていると仮定すると(dsm()
への呼び出しで確認できます)、フィールド要素に到達するために下がる必要がある配列のレベルが実際にはさらに2つあります。
$form["field_accounts"][LANGUAGE_NONE][0]['value']['#default_value'] = $default;
Drupal 7では、フィールドが翻訳された各言語の値の配列があり(複数/無制限のカーディナリティを持つフィールドに対応できるようにするため)、それぞれの下にさまざまな異なるフィールド列の配列。ほとんどの場合、これは「値」になりますが、常にそうとは限りません(たとえば、画像フィールドにはファイルID列、代替列などがあります)。
それが役に立てば幸い
これは正しい:
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;
}
}
これはうまくいきます:
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;
}
}