“system_settings_form”부두입니까?


8

친구가 양식의 구성 파일에서 system_settings_form을 실제로 보여주었습니다.

문제의 코드는 다음과 같습니다 (간체).

function my_module_generateAdminForm($form){
  $form = array();
  $form['super_secret_password'] = array(
    '#type' => 'textfield',
    '#title' => t('Headline'),
    '#default_value' => variable_get('super_secret_password','password'),
  );
  system_settings_form($form);
}

system_settings_form은 제출 단추를 추가하고 양식 제출을 처리하여 변수를 저장합니다. 또한 "기본값으로 재설정"버튼을 추가하여 모든 변수를 기본값으로 재설정합니다.

기본적으로 문서가 많지 않아 친구가 정확히 무엇을 알지 못하기 때문에 기본적으로 그 기능을 추측했습니다. 내 질문은 변수를 저장 / 재설정하는 방법을 어떻게 알 수 있습니까? 그냥 배열을 전달하지 않습니까?

또한 system_settings_form에 알아야 할 다른 마술이 있습니까?

답변:


14

구현 세부 사항 은 system_settings_formsystem_settings_form_submit 을 참조 하십시오. Drupal 7에서 기본값으로 재설정 버튼이 시스템 설정 양식에서 제거되었습니다.

function system_settings_form($form) {
  $form['actions']['#type'] = 'actions';
  $form['actions']['submit'] = array(
    '#type' => 'submit',
    '#value' => t('Save configuration'),
  );

  if (!empty($_POST) && form_get_errors()) {
    drupal_set_message(t('The settings have not been saved because of the errors.'), 'error');
  }
  $form['#submit'][] = 'system_settings_form_submit';
  // By default, render the form using theme_system_settings_form().
  if (!isset($form['#theme'])) {
    $form['#theme'] = 'system_settings_form';
  }
  return $form;
}

System_settings_form :

구성 저장 버튼을 추가하고 콜백을 system_settings_form_submit 함수에 제출하십시오.

system_settings_form_submit :

function system_settings_form_submit($form, &$form_state) {
  // Exclude unnecessary elements.
  form_state_values_clean($form_state);

  foreach ($form_state['values'] as $key => $value) {
    if (is_array($value) && isset($form_state['values']['array_filter'])) {
      $value = array_keys(array_filter($value));
    }
    variable_set($key, $value);
  }

  drupal_set_message(t('The configuration options have been saved.'));
}

모든 양식 요소를 반복하고 키를 양식 요소 키로 사용하고 사용자가 제출 한 양식 요소 값으로 $ form_state [ 'values']를 사용하여 값을 갖는 각 양식 요소에 대한 변수를 설정합니다.

따라서 variable_set 함수를 사용하여 모든 양식 값에 변수를 설정하는 제출 핸들러가있는 양식 일뿐입니다.


5
좋은 설명입니다. "각 양식 요소 키를 양식 요소 키로 사용"과 혼동되는 경우 위의 예에서 $ form [ 'super_secret_password']는 Drupal이 variable_set ( 'super_secret_password', ...)를 호출하게합니다. system_settings_form_submit은 폼의 배열 키 ( 'super_secret_password')에서 변수 이름을 가져 오기 때문입니다.
greg_1_anderson

1
도움이됩니다. api.drupal.org가 왜 영어로 무엇을하는지 설명 할 수없는 이유는 무엇입니까? 대신 코드를 제공합니다 ... 요약하면 부두가 아닌 내 필드 키를 사용합니다.
쿠미

1
직접 variable_get이 있는지 여부에 관계없이 모든 페이지 요청에 대해 메모리에 유지되므로 큰 변수를 저장하는 데 이것을 사용해서는 안된다는 점에 주목할 가치가 있다고 생각합니다. 모두 메모리에 한 번 캐시됩니다. 또한 정기적 인 제출 및 유효성 검사 핸들러는 문제없이 작동합니다. 자유롭게 추가하십시오.
AyeshK
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.