Salve a tutti.
Uso la versione 5.1 di Drupal. Ho fatto un modulo con relativa form (miomodulo_form()) , ma non riesco a fare funzionare la funzione di submit. Ho messo un campo nella form del tipo
$form['nome] = array(
'#type' => 'textfield',
'#title' => t('Nominativo'),
'#size' => 50,
'#maxlength' => 50,
'#default_value' => $values['nome'],
'#attributes' => array('title' => t('nome')),
);
essendo $values['nome'] il valore letto da DB.
Ho poi creato la funzione miomodulo_form_submit($form_id, $form_values) e la miomodulo_form_validate($form_id, $form_values). Quando faccio il submit della form (method='post') le due funzioni vengono correttamente chiamate. Però il valore $form_values['nome'] contiene il valore letto inizialmente e non quello aggiornato, mentre l'array $_POST['nome'] contiene correttamente il valore aggiornato.
Tutto questo cosa significa? I valori aggiornati non sono copiati da Drupal in $form_values? Sapete se la versione 5.1 ha un bug in questo senso? Sbaglio qualcosa io? Non so più cosa pensare e fare .... qualcuno sa darmi qualche consiglio.
Grazie
Ciao,
Dando per scontato che drupal 5.1 funziona (non conosco problemi a riguardo/ lo uso tutti i giorni) le funzioni devono essere:
miomodulo_form() Main function
miomodulo_form_validate($form_id, $form_values)
miomodulo_form_submit($form_id, $form_values)
Inoltre all'interno delle funzioni puoi prelevare i valori tramite:
check_plain($form_values['bla'])
Mi sembra tutto corretto verifica, se il problema non lo risolvi posta pure il codice intero!
Uccio
Il mio sito con drupal
Grazie uccio per la risposta.
Le tre funzioni che hai indicato le ho fatte ed infatti vengono chiamate.
Ho provato con il checkg_plain($form_values['bla']) ma non ha dato esiti migliori.
Il modulo (si chiama phonebook) è lungo per cui ti riporto le funzioni principali (semplificate)
Che ne pensi? grazie ciao.
FORSE L'ERRORE STA NEL NON AVER CAPITO BENE COME SI USA LA FUNZIONE
drupal_get_form('phonebook_form',$form_values);
Sugli esempi delle API di Drupal trovo sempre
Poi per visualizzare la Form in qualche funzione si chiama la drupal_get_form() .. ad esempio
In altri casi invece trovo che la funzione drupal_get_form() sta all'interno della funzione
di costruzione della form stessa. Ad esempio ..
Ma se la drupal_get_form() chiama proprio la funzione miomodulo_form() in cui è contenuta, si dovrebbero
creare tante chiamate ricorsive alla miomodulo_form() senza mai più uscirne!!!!
Siccome non succede, che logica ha questa benedetta drupal_get_form()?
E ancora , quando viene chiamata nella forma drupal_get_form('miomodulo_form',$form), ma la $form chi deve essere?
Forse chiedo troppo scusate, comunque grazie
________________________________________________________________________________________
Quando risolverai il problema, scrivi come hai fatto, e se puoi scrivi [RISOLTO]
Sarà utile ad altri. Grazie
enzoazzolini.it
Dunque ho capito quanto segue, ma devo necessariamente postare un po' di codice:
VISUALIZZA LA FORM
FUNZIONE COSTRUTTORE FORM
ATTENZIONE QUI!!! FUNZIONE THEMATIZZATA PER LA COSTRUZIONE DELLA FORM
Mette in forma tabellare i campi della form
ED INFINE LA SUBMIT!!
Allora ho scoperto che se non uso la funzione thematizzata trovo i valori aggiornati
nell'array $form_values mentre se la uso ... con il cavolo che li trovo aggiornati!!!!
Ora la theme('table', array(), $rows) genera una tabella e nelle celle (<TD>) c'è il tag HTML <INPUT> e quindii su invio dei dati l'array $_POST viene riempita.
Perchè non succede anche per la $form_values?
Chi riempie e come riempie la $form_values passata alla funzione di submit?
QUESTO LO DEVO ANCORA CAPIRE!!! Se qualcuno lo sa ...
Ciao
P.S.
Resta sempre da capire perchè in alcuni casi ho trovato la funzione drupal_get_form() all'interno del costruttore della form stessa!!
________________________________________________________________________________________
Quando risolverai il problema, scrivi come hai fatto, e se puoi scrivi [RISOLTO]
Sarà utile ad altri. Grazie
enzoazzolini.it
Bene ho scoperto un'altra cosa.
Chiaramente ho scoperto l'effetto ma non la causa!!!
Dunque alla funzione thematizzata deve essere aggiunta la seguente riga:
$output .= drupal_render($form);
E quindi la funzione diventa:
Perchè? .... per il momento così funziona, perchè funziona bisogna ancora capirlo.
Ciao
P.S.
Resta sempre da capire perchè in alcuni casi ho trovato la funzione drupal_get_form() all'interno del costruttore della form stessa!!
________________________________________________________________________________________
Quando risolverai il problema, scrivi come hai fatto, e se puoi scrivi [RISOLTO]
Sarà utile ad altri. Grazie
enzoazzolini.it
Ciao,
Come puoi vedere anche qui: http://www.drupalitalia.org/node/2537
la cosa che fai è corretta, non ho molta dimestichezza con la funzione Theme ma penso che guardando bene il diagramma di flusso di render delle pagine si possa capire il perchè (lo trovi nell' handbooka da qualche parte!)
alla prossima uccio
Uccio
Il mio sito con drupal