Personalizzare user login form

10 contenuti / 0 new
Ultimo contenuto
Personalizzare user login form

Ciao a tutti.
Vorrei fare il form di user login con due campi input (user e pass) allineati orizzontalmente e levare il submit. Tutti gli altri testi li vorrei levare.
Però ho visto in giro per la rete che è cosa assai problematica.
Non esiste un file tpl.php per la personalizzazione quindi bisognerà fare in altro modo.

Ho visto questi link:

drupal.org che però per la versione 7 presenta degli errori (o forse no, ma a me pare così).. e inoltre non riesco a capire come fare per recuperare le variabili interne a $variables['rendered'] = drupal_render_children($variables['form']); ... anche perchè così se stampo $rendered ho personalizzato ben poco... solo la parte esterna al form.

apaddedcell che però non è un vero e proprio intervento sul html.

Voi avete info a riguardo?

grazie!

per un mio progetto ho utilizzato User Login Bar (http://drupal.org/project/userloginbar) e poi ho lavorato un po' con il Css.
Ma proprio ieri ho trovato anche delle indicazioni su drupal.org
http://drupal.org/node/92657 (questa è per D5 e non so se è applicabile anche a D6)
http://drupal.org/node/19855 (questo invece è per tutte le versioni dalla 4.6 alla 7)

di più non so! :)

buon lavoro e facci sapere i risultati ;)

---
"Solo gli imbecilli non hanno dubbi"
"Ne sei sicuro?"
"Non ho alcun dubbio!"
(da Il dubbio di Luciano De Crescenzo)

Ciao,
la soluzione è questa per Drupal 7:
nel template.php place Metti il seguente codice, ma !importante, sostituisci "YOURTHEME" con il nome del tuo tema:

<?php
/**
* Registers overrides for various functions.
*
* In this case, overrides three user functions
*/
function YOURTHEME_theme() {
  return array(
   
'user_login' => array(
     
'template' => 'user-login',
     
'variables' => array('form' => NULL),
    ),
   
'user_pass' => array(
     
'template' => 'user-pass',
     
'variables' => array('form' => NULL),
    ),
  );
}
function
YOURTHEME_preprocess_user_login(&$variables) {
 
$variables['form']['name']['#description'] = '';
 
$variables['form']['pass']['#description'] = '';
 
$variables['form']['submit']['#attributes'] = array('style' => 'display:none');
 
//attenzione sen non funziona con style devi mettere la classe nel css
  //$variables['form']['submit']['#attributes'] = array('class' => 'myhiddenbutton');
$variables['form'] = drupal_build_form('user_login', user_login(array(),$form_state));
}
?>

Poi crei un file chiamato user-login.tpl.php e lo metti nella cartella del tuo tema con ad esempio questo codice (nel senso che lo personalizzi come vuoi) con il selettore myuser-login-form:
<div id="myuser-login-form">
  <?php print $rendered; ?>
</div>

non l'ho testato quindi... fammi sapere

Ciao Danzisiweb e grazie mille per la tua risposta.
Purtroppo però non funziona :(
Compaiono sempre sopra i campi di input il Nome utente*, Password* e i link "Crea un profilo" e "Richiedi nuova password".
Ho provato anche a mettere nel file user-login.tpl.php, al posto di $rendered che non ho capito dove si crea, la variabile $form, che è generata invece dalla funzione preprocess.
Non capisco perchè non ci sia un file.tpl.php per il blocco di login user.... mah...
Alla fine mi sa che una soluzione vera e proprio non cè... in rete ci sono codici, errori e relative correzioni di codice, per la versione 7, per la 6 ecc.... insomma mi sembra che non sia il solo a non capirci molto su come fare per mettere mano nell'html del form login user.
Mi sa che cederò e proverò a fare tutto con i css, anche se odio dal profondo avere codice sporco e superfluo.
Tu lo hai gia fatto per qualche sito?

grazie mille!

ps: dimenticavo.... dove hai reperito le informazioni circa il contenuto dell'array
$variables['form']['name']['#description'] ... io ho cercato tantissimo ma non sono riuscito a sapere che diavolo cè in quel cavolo di array!!

Alla fine ho fatto così:

/**
* Implements hook_form_FORM_ID_alter().
*/
function MIOTHEMA_form_user_login_block_alter(&$form) {
  unset($form['links']);
  //print_r($form);
}

e con questo mi vado a nascondere i link.
Poi il resto con i css:

#block-user-login .form-item { margin-top: 0; padding-top: 0; display:inline; }
#block-user-login label { display:none; }
#block-user-login input[type="submit"] { visibility:hidden; }

La cosa errata è che ho dovuto mettere il bottone submit a visibilty hidden e non a display none, altrimenti non andava il form. Ma questo comporta che il bottone è ancora presente anche se invisibile e crea gli ingombri spostando elementi sottostanti!!!!

Inoltre nei campi di input ora non ci sono indicazioni. Vorrei potergli mettere dentro il value di default o il nuovo placeholder dell' HTML 5... tipo "user" e "pass"...
Ma questo significherebbe avere accesso alla scrittura html del form, cosa che abbiamo visto è per ora a me impossibile.

:( che ne dite?

Ciao somtam,
in questi casi con Drupal si prendono delle forte delusioni perchè questo CMS chiede il suo codice e siccome ha un framework, lavora a modo suo (cme predefinito nel core)

Se vuoi analizzare un tema con login presonalizzato lo trovi sul mio sito ma è per D6
http://danzisiweb.it/content/tema-di-drupal-6-personalizzato-stile-facebook

Ciao
Aggiornami...

Ciao danzisiweb, ho visto come è il tuo form di login. Quello con i css e un paio di risorse che avevo trovato lo so fare.
Ne ho provati mille, ma ancora per il 7 non ho trovato nulla che funzioni che ti dia accesso nella riscrittura dell'html del formettino... sto uscendo pazzo :)
grazie lo stesso!

Ciao somtam, non ho capito... ma se togli il pulsante di submit come fa l'utente a fare login?

a livello di usability forse non è il massimo, ma dipende dal target del sito...
io personalmente quando mi loggo dopo avere scritto la password batto un enter.
Comunque si, non è il massimo e infatti lo lascio.

Ho risolto solo con i css. Con questi i campi e il bottone si mettono tutti in linea, poi con altri css gli ho dato l'aspetto che volevo:

div#edit-actions.form-actions.form-wrapper { float:left; margin-top:0px; margin-left:6px; margin-bottom:0px; }
div.form-item.form-type-password.form-item-pass { float:left; margin-bottom:0px; }
div.form-item.form-type-textfield.form-item-name { float:left; margin-bottom:0px; }

a, dimenticavo, nel file template.php ho messo questo codice per eliminare i links:

function tuttinudi_form_user_login_block_alter(&$form) {
  // Remove the links provided by Drupal.
  unset($form['links']);
}

grazie mille a tutti!

ciao a tutti :)
ho un piccolo problema con il form di creazione utente. Ho personalizzato il form inserendo altri campi..ho inserito anche due radio (azienda o privato) e, selezionando "azienda", tramite js faccio comparire due campi in più. Ora il problema é sulla validazione: i due campi in piu devono essere obbligatori solo se "azienda" é selezionato. Possibili soulzioni:

1)Ho provato a non settare i due campi come obbligatori, e facendo un controllo sull'onSubmit del form li rendo obbligatori aggiungendo la classe di errore, solo se "azienda" é selezionato::ma non funziona::

2)ho pensato di fare una mia validazione quindi ho eliminato tutti i vincoli di "obbligatorietà" dalle impostazioni ma mi rimangono comunque password e username che non dipendono da me, quindi cozzo sempre con la validazione di drupal e sono al problema del punto 1

3)esiste un modo di "riscrivere" il form di creazione utente e sostituirlo col mio? in modo che vada a scrivere gli stesi dati su db, ovvio::

grazie :)