it-swarm.com.de

Theming des Benutzerregistrierungsformulars

Ich möchte das Benutzerregistrierungsformular in Drupal 7 durch Hinzufügen eines neuen Markups usw.) thematisieren. Ich kann anscheinend nicht herausfinden, wie es geht.

Ich habe einige Tutorials befolgt, in denen vorgeschlagen wurde, einfach hook_theme in template.php aufzurufen und eine entsprechende Themenfunktion zu verwenden:

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

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

Dies macht jedoch nichts, unabhängig davon, was ich in der Funktion theme_user_register() mache oder wie oft ich die Caches lösche.

Irgendwelche Gedanken darüber, wie das in D7 geht?

7
ebeyrent

Es stellt sich heraus, dass ich eine Kombination von Änderungen brauche:

Ich musste hook_form_alter() in ein Modul implementieren und die Eigenschaft #theme Des Formulars festlegen:

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

Und dann in 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']);
}

Und dann habe ich user-register.tpl.php mit meinem gewünschten Markup hinzugefügt und

<?php echo $rendered; ?> 

um das Formular auszudrucken.

9
ebeyrent

Die Definition der Themenfunktion aus der Implementierung von hook_theme () ist falsch:

  • In Drupal 7) wird der Array-Index "Argumente" nicht mehr verwendet. Sie sollten "Renderelement" (wie in diesem Fall) oder "Variablen" verwenden.
  • Die Themenfunktion erhält ein anderes Argument in Drupal 7, das ist &$variables; In Ihrem Fall sollten Sie $form = $variables['form'] Verwenden, sobald Sie die Themenfunktion definiert haben Verwenden Sie den Array-Index, über den ich im vorherigen Punkt berichtet habe. Sehen Sie, was in theme_locale_date_format_form () (der Themenfunktion, die für das von locale_date_format_form () definierte Formular verwendet wird) definiert ist locale_theme () oder in theme_status_report () , definiert in system_theme () .
3
kiamlaluno

Ich denke, das ist möglich, ohne irgendwelche Module machen zu müssen. Es gibt einen integrierten Themenvorschlag für die Benutzerregistrierungsseite und es ist Seite - Benutzer - register.tpl.php

2
Carlos Muñiz

Sie können hook_form_alter zum Ändern der Formularelemente und Hinzufügen eines benutzerdefinierten Markups durch Hinzufügen von Markup-Formularelementen. Sie können auch festlegen, welche Themenfunktion verwendet werden soll. Dies kann Ihre eigene benutzerdefinierte Themenfunktion sein.

Weitere Informationen finden Sie im FAPI .

2
googletorp

Hier ist die genaue Funktion:

@see 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