it-swarm-eu.dev

Je to registrační formulář uživatele

Chci motivovat registrační formulář uživatele v Drupal 7 přidáním nové značky atd.) Nedokážu přijít na to, jak na to.

Sledoval jsem několik tutoriálů, které naznačovaly, že byste mohli jednoduše vyvolat hook_theme v template.php a použít odpovídající funkci motivu:

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

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

Ale to nedělá nic, bez ohledu na to, co dělám ve funkci theme_user_register(), nebo kolikrát vyčistím mezipaměti.

Nějaké myšlenky, jak to udělat v D7?

6
ebeyrent

Ukazuje se, že potřebuji kombinaci změn:

Musel jsem implementovat hook_form_alter() do modulu a nastavit vlastnost #theme Ve formuláři:

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

A pak v 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']);
}

A pak jsem přidal user-register.tpl.php s požadovanou značkou a

<?php echo $rendered; ?> 

vytisknout formulář.

8
ebeyrent

Definice funkce motivu daná implementací hook_theme () je nesprávná:

  • V Drupal 7) se už index indexu pole „argumenty“ nepoužívá, měli byste použít „prvek vykreslení“ (jako v tomto případě) nebo „proměnné“.
  • Funkce motivu obdrží jiný argument v Drupal 7, což je &$variables; ve vašem případě byste měli použít $form = $variables['form'], jakmile jste definovali funkci tématu pomocí indexu pole, který jsem uvedl v předchozím bodě. Podívejte se, co se stalo v theme_locale_date_format_form () (funkce motivu použitá pro formulář definovaný locale_date_format_form () , který je definován v locale_theme () , nebo v theme_status_report () , který je definován v system_theme () .
3
kiamlaluno

Myslím, že je to možné, aniž byste museli dělat žádné moduly. Pro stránku registrace uživatele je vestavěný návrh motivu a jedná se o stránku - uživatel - register.tpl.php

2
Carlos Muñiz

Můžeš použít hook_form_alter změnit prvky formuláře a přidat vlastní označení přidáním prvků formuláře označení. Je také možné nastavit, která funkce motivu se použije, což by mohla být vaše vlastní funkce motivu.

Další podrobnosti najdete v FAPI .

2
googletorp

Zde je přesná funkce:

@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