web-dev-qa-db-fra.com

Thème du formulaire d'inscription utilisateur

Je veux thématiser le formulaire d'inscription utilisateur dans Drupal 7 en ajoutant un nouveau balisage, etc. Je n'arrive pas à comprendre comment le faire.

J'ai suivi quelques tutoriels qui suggéraient que vous pouviez simplement appeler hook_theme dans template.php et utiliser une fonction de thème correspondante:

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

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

Mais cela ne fait rien, indépendamment de ce que je fais dans la fonction theme_user_register(), ou combien de fois j'efface les caches.

Avez-vous des idées sur la façon de procéder dans D7?

7
ebeyrent

Il s'avère que j'ai besoin d'une combinaison de changements:

J'ai dû implémenter hook_form_alter() dans un module et définir le formulaire #theme propriété:

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

Et puis dans 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']);
}

Et puis j'ai ajouté user-register.tpl.php avec le balisage souhaité, et

<?php echo $rendered; ?> 

pour imprimer le formulaire.

9
ebeyrent

La définition de la fonction de thème donnée à partir de l'implémentation de hook_theme () est incorrecte:

  • Dans Drupal 7, l'index du tableau "arguments" n'est plus utilisé; vous devez utiliser "élément de rendu" (comme dans ce cas), ou "variables".
  • La fonction de thème reçoit un argument différent, dans Drupal 7, qui est &$variables; dans votre cas, vous devez utiliser $form = $variables['form'], une fois que vous avez défini la fonction de thème à l'aide de l'index du tableau que j'ai signalé au point précédent. Voir ce qui a été fait dans theme_locale_date_format_form () (la fonction de thème utilisée pour le formulaire défini par locale_date_format_form () , qui est définie dans locale_theme () , ou dans theme_status_report () , qui est défini dans system_theme () .
3
kiamlaluno

Je pense que cela est possible sans avoir à faire de modules. Il y a une suggestion de thème intégrée pour la page d'inscription de l'utilisateur et c'est la page - utilisateur - register.tpl.php

2
Carlos Muñiz

Vous pouvez utiliser hook_form_alter pour modifier les éléments du formulaire et ajouter un balisage personnalisé en ajoutant des éléments de formulaire de balisage. Il est également possible de définir la fonction de thème à utiliser, qui pourrait être votre propre fonction de thème personnalisée.

Voir le FAPI pour plus de détails.

2
googletorp

Voici la fonction exacte:

@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