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?
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.
La définition de la fonction de thème donnée à partir de l'implémentation de hook_theme () est incorrecte:
&$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 () .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
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.
Voici la fonction exacte:
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,
);
}