it-swarm.it

Temi il modulo di registrazione dell'utente

Voglio inserire il tema del modulo di registrazione utente in Drupal 7 aggiungendo un nuovo markup, ecc. Non riesco a capire come farlo.

Ho seguito alcuni tutorial che suggeriscono che potresti semplicemente invocare hook_theme in template.php e utilizzare una funzione tema corrispondente:

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

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

Ma questo non sta facendo nulla, indipendentemente da ciò che faccio nella funzione theme_user_register() o da quante volte svuoto le cache.

Qualche idea su come farlo in D7?

7
ebeyrent

Si scopre che ho bisogno di una combinazione di modifiche:

Ho dovuto implementare hook_form_alter() in un modulo e impostare il modulo #theme proprietà:

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

E poi 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']);
}

E poi ho aggiunto user-register.tpl.php con il markup desiderato e

<?php echo $rendered; ?> 

per stampare il modulo.

9
ebeyrent

La definizione della funzione tema data dall'implementazione di hook_theme () è errata:

  • In Drupal 7, l'indice di array "argomenti" non viene più utilizzato; dovresti usare "render element" (come in questo caso) o "variabili".
  • La funzione tema riceve un argomento diverso, in Drupal 7, che è &$variables; nel tuo caso, dovresti usare $form = $variables['form'], una volta definita la funzione del tema utilizzando l'indice di array riportato nel punto precedente. Guarda cosa è stato fatto in theme_locale_date_format_form () (la funzione tema utilizzata per il modulo definito da locale_date_format_form () , che è definito in locale_theme () , o in theme_status_report () , che è definito in system_theme () .
3
kiamlaluno

Penso che questo sia possibile senza dover fare alcun modulo. C'è un suggerimento di temi incorporato per la pagina di registrazione dell'utente ed è page - user - register.tpl.php

2
Carlos Muñiz

Puoi usare hook_form_alter per modificare gli elementi del modulo e aggiungere markup personalizzati aggiungendo elementi del modulo markup. È anche possibile impostare quale funzione tema utilizzare quale potrebbe essere la propria funzione tema personalizzata.

Vedi FAPI per maggiori dettagli.

2
googletorp

Ecco la funzione esatta:

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