it-swarm-ko.tech

사용자 등록 양식 테마

새 마크 업 등을 추가하여 Drupal 7)의 사용자 등록 양식을 테마로하고 싶습니다. 어떻게해야하는지 알 수 없습니다.

나는 template.php에서 hook_theme를 호출하고 해당 테마 함수를 사용할 수 있다고 제안하는 몇 가지 자습서를 따랐다.

function mytheme_theme(){
  return array(
    'user_register' => array(
      'arguments' => array('form' => NULL),
    ),
  );
}

function mytheme_user_register($form) {
  // print, die, etc
}

그러나 이것은 theme_user_register() 함수에서 수행 한 작업이나 캐시를 몇 번이나 지우는 지에 관계없이 아무것도하지 않습니다.

D7에서이 작업을 수행하는 방법에 대한 생각이 있습니까?

7
ebeyrent

변경 조합이 필요하다는 것이 밝혀졌습니다.

모듈에서 hook_form_alter()을 구현하고 폼의 #theme 특성:

function mymodule_form_user_register_form_alter(&$form, &$form_state, $form_id) {
  $form['#theme'] = 'user_register';
}

그리고 template.php에서 :

function mytheme_theme($existing, $type, $theme, $path){
  return array(
    'user_register' => array(
      'render element' => 'form',
      'template' => 'templates/user-register',
    ),
  );
}

function mytheme_preprocess_user_register(&$variables) {
  $variables['rendered'] = drupal_render_children($variables['form']);
}

그런 다음 원하는 마크 업으로 user-register.tpl.php를 추가했습니다.

<?php echo $rendered; ?> 

양식을 인쇄합니다.

9
ebeyrent

hook_theme () 구현에서 제공된 테마 함수의 정의가 잘못되었습니다.

  • Drupal 7에서 배열 인덱스 "arguments"는 더 이상 사용되지 않으므로 "렌더링 요소"(이 경우와 같이) 또는 "변수"를 사용해야합니다.
  • 테마 함수는 Drupal 7, 7에서 &$variables; 귀하의 경우에는 $form = $variables['form'], 이전에보고 한 배열 인덱스를 사용하여 테마 함수를 정의한 후 theme_locale_date_format_form () ( locale_date_format_form () 에 의해 정의 된 양식에 사용 된 테마 함수에서 수행 된 작업을 참조하십시오. locale_theme () , 또는 theme_status_report () 에서 system_theme () 에 정의되어 있습니다.
3
kiamlaluno

나는 모듈을 할 필요없이 이것이 가능하다고 생각합니다. 사용자 등록 페이지에 대한 테마 제안이 내장되어 있으며 페이지는 user--register.tpl.php입니다.

2
Carlos Muñiz

당신이 사용할 수있는 hook_form_alter 양식 요소를 변경하고 마크 업 양식 요소를 추가하여 사용자 정의 마크 업을 추가합니다. 사용할 테마 기능을 사용자 정의 테마 기능으로 설정할 수도 있습니다.

자세한 내용은 FAPI 을 참조하십시오.

2
googletorp

정확한 기능은 다음과 같습니다.

@ 참조 hook_form_FORM_ID_alter

function hook_form_user_login_alter(&$form, &$form_state, $form_id) {
  // Modification for the form with the given BASE_FORM_ID goes here. For
  // example, if BASE_FORM_ID is "node_form", this code would run on every
  // node form, regardless of node type.

  // Add a checkbox to the node form about agreeing to terms of use.
  $form['terms_of_use'] = array(
    '#type' => 'checkbox', 
    '#title' => t("I agree with the website's terms and conditions."), 
    '#required' => TRUE,
  );
}
1
Adam S