프로그래밍 방식으로 필드의 기본값을 설정


10

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;
  }
}

답변:


17

form alter 함수가 실제로 실행 중이라고 가정하면 (에 대한 호출로 확인할 수 있음 dsm()) 실제로 field 요소에 도달하기 위해 내려 가야 할 두 가지 수준의 배열이 있습니다.

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

Drupal 7에는 필드가 변환 된 각 언어에 대한 값의 배열이 있으며 (따라서 다중 / 무제한 카디널리티가있는 필드를 제공 할 수 있음) 각 필드 아래에 다양한 다른 필드 열에 대한 배열이 있습니다. 대부분의 경우이 값은 '값'이지만 항상 그런 것은 아닙니다 (예 : 이미지 필드에 파일 ID 열, 대체 열 등이 있음)

희망이 도움이


그것은 한 번 더 깊이입니다 :)$form["field_accounts"]["und"][0]["value"]['#default_value'] = $default;
giorgio79의

2
이 답변은 모든 위젯에서 작동하지는 않습니다. 그들이 그들의 가치를 어떻게 지정하는지에 달려 있습니다. 예를 들어, entityreference 필드와 함께 다음을 사용하십시오. $ form [ 'field_name'] [ 'und'] [0] [ 'target_id'] [ '# default_value'] = $ default
Renee

@Renee 매우 사실; 여기에 더 자세한 설명이 있습니다
Clive

1
필드 값은 항상 @Mouneer 언어를 사용합니다. 다국어 사이트가없는 경우 기본값을 LANGUAGE_NONE사용해야합니다.
Clive

1
실제로, 나는 조금 더 나은 @Mouneer라고 설명 할 수 있었다 :) 어딘가에 현재 언어를 찾을 수있을 것이다 $form['#entity']->language. 또한 $language글로벌에 의해 결정된 현재 언어를 사용 하지만 어쨌든 그것을 도울 수있는 API 메소드가 있습니다 ( field_get_items또는 EntityMetadataWrapper엔티티 모듈 에서 제공하는 것이 더 좋습니다 )
Clive

0

이 올바른 :

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

이것은 잘 작동합니다 :

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;
  }
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.