Personalizzare campi form del profilo utente - best practices

8 contenuti / 0 new
Ultimo contenuto
Personalizzare campi form del profilo utente - best practices

Salve,
nel profilo utente del sito che sto costruendo ho inserito due campi custom:
- Soggetto di tipo select
- Ragione Sociale di tipo testo.
In sede di registrazione vorrei che Ragione Sociale venisse mostrato soltanto per un particolare valore di Soggetto.
Ho quindi applicato a Ragione Sociale uno stile display:none tramite css e fin qui tutto ok.
Adesso vorrei applicare l'attributo onchange="mostraDiv()" a Soggetto dove mostraDiv() è una piccola funzione js che cambia lo stile da none a block e viceversa.
A questo punto è necessario che io personalizzi il form user_register, perciò leggendo qua e là su internet ho trovato un articolo in cui si propongono due diversi approcci:
- realizzare un modulo custom
- fare l'override di una funzione del template, che in drupal 6 sembra abbastanza diverso da com'era prima.
Poiché nel mio caso si tratta di una piccolissima modifica che probabilmente non si ripeterà su altri campi, qual'è la soluzione migliore a vostro avviso?
E se decidessi di scrivere un nuovo modulo (quindi usare hook_form_alter) dovrei riscrivere l'intero form oppure solo i campi che intendo modificare?

Altra opzione, che secondo me può funzionare: usi content_profile per i campi aggiuntivi e conditional_fields per la gestione della visualizzazione dei campi. Perché le due cose funziono insieme, va usata una patch: http://drupal.org/node/619290

Pinolo wrote:
Altra opzione, che secondo me può funzionare: usi content_profile per i campi aggiuntivi e conditional_fields per la gestione della visualizzazione dei campi. Perché le due cose funziono insieme, va usata una patch: http://drupal.org/node/619290[/quote]
Grazie della risposta Pinolo,
ho valutato anche conditional fields, ma non essendo a conoscenza della patch per l'integrazione con content_profile ho lasciato perdere.
Dei due approcci ho scelto il modulo custom visto che, l'override di funzioni del template mi dava dei problemi.
Nel caso interessasse posso condividere il codice.

Interessa sempre! :)

Grazie.

Questo è il mio semplicissimo modulo che con un'implementazione di hook_form_alter, in base al form_id modifica gli attributi di due custom fields.
Ho utilizzato anche una piccola funzione javascript richiamata con drupal_add_js che sull'onchange di un campo select (profilo) abilita e disabilita il successivo (ragsociale).

<?php
 
/**
   * Implementation of hook_form_alter().
   *
   * Modifica alcuni campi dei form per la registrazione
   * e la modifica del profilo utente
   */
 
function customform_form_alter(&$form, $form_state, $form_id) {
   
// Include un file javascript
   
drupal_add_js(drupal_get_path('module', 'customform') . '/js/customform.js');  
   
// Altera i campi tipologia e ragsociale per i due form
   
switch ($form_id) {
        case
'user_register':
        case
'user_profile_form':
         
$form['Informazioni personali']['profile_tipologia']['#attributes']=array('onchange' => 'mostraDiv(this.value)');
         
$form['Informazioni personali']['profile_ragsociale']['#attributes']=array('disabled' => 'disabled');
        break;
      }
}
?>

Per completezza: potresti allegare anche il file .js?

Grazie.
(così vedo se riesco a riportare la cosa sul modulo Contact, come spiegato qui:http://www.drupalitalia.org/node/13177 )

Dret wrote:
Per completezza: potresti allegare anche il file .js?

Grazie.
(così devo se riesco a riportare la cosa sul modulo Contact, come spiegato qui:http://www.drupalitalia.org/node/13177 )

Ecco il contenuto del file ./js/customform.js:

function mostraDiv(value){
    obj = document.getElementById('edit-profile-ragsociale');
    if (value == 'Privato') {
        obj.disabled='disabled';
    }
    else if (value == 'Azienda') {
        obj.disabled='';
    }
}

grazie uastasi