Joomla.it Forum
Forum traduzioni italiano => Le traduzioni e le informazioni della community => Articoli della community => : capera 01 Aug 2014, 13:39:33
-
E' un articolo un forse molto tecnico, ma credo possa essere interssante per gli sviluppatori. Una problematica sorta quando, sapendo che che l'oggetto checkbox assume una valore predefinito SOLO nel caso sia passato il valore di checked (Sappiamo che il form invia il valore di un checkbox solo nel momento in qui questo è checked, diversamente non invia nessun tipo di valore.), avevamo comunque necessità di utilizzare questo oggetto non potendo rivolgerci al più consueto oggetto SELECT.
Questo ci ha generato un grosso problema durante lo sviluppo di un componente poiché era indispensabile passare il valore "campo vuoto" nella posizione di default.
link all'articolo: http://www.joomla.it/notizie/7549-un-problema-con-i-checkbox-nello-sviluppo-di-un-componente.html
-
Ciao Capera,
e se invece di creare un nuovo tipo di form field si andasse a sovrascrivere il metodo save() del controller aggiungendo solo un controllo sulla variabile della checkbox?
Un semplice
public function save($key = null, $urlVar = null)
{
// Get the original POST data
$original = JFactory::getApplication()->input->get('jform',NULL,NULL);
//Effetuo il controllo ed applico il valore 0 se la variabile non esiste
$original["checkbox1"] = JRequest::getVar('jform', 0, 'checkbox1');
// Save it back to the $_POST global variable
JFactory::getApplication()->input->post->set('jform', $original);
parent::save($key,$urlVar);
return;
}
potrebbe risolvere tutto in un unico passaggio. Come la vedi come alternativa al metodo da te descritto?
-
ciao!!
la soluzione proposta in alternativa, sembra essere più "efficiente", ma ci sono almeno un paio di motivi che,secondo me, la rendono "inefficace":
Il primo è che per ogni checkbox presente nel form , un questionario potrebbe contenerne uno svariato numero, oggetto del save, occorrerebbe riscrivere quel piccolo pezzo di codice, che, per quanto piccolo, potrebbe annidare errori di scrittura dello stesso;
Il secondo, stiticamente parlando, è che il save descritto è relativo ad un form, ovvero due form due save, tre form tre save, il che fa pensare ad una soluzione ad hoc estemporanea.
Invece la soluzione descritta, ne risolve il problema a livello di componente, avendo solo cura, per ogni checkbox, di assegnarli il tipo di cui all' articolo. Del resto, informaticamente parlando, la riusabilità del codice è la cosa più gradita.
grazie per il feed..
-
personalmente non seguo la strada né dell'uno né dell'altro ;)
in j3+ la cosa migliore è un override di JModelAdmin::validate($form, $data, $group = null); qui abbiamo i dati recuperati dal post (array $data) e l'oggetto $form.
In poche righe di codice, ed assolutamente indipendenti dalla form, si fa la scansione della stessa alla ricerca dei checkboxs e l'inserimento di quelli non valorizzati in $data, a quel punto restituisci $data ed il gioco è fatto: integrato nel framework, invariante rispetto alla definizione della form e quindi riusabile senza alcun problema.
ciao,
marco
-
L’ override di jModelAdmin::validate….. ti mette al sicuro di non dover riscrivere codice ripetitivo ma, non ti risparmia “ la scansione della stessa alla ricerca dei checkboxs e l'inserimento di quelli non valorizzati in $data” che, ripeto, in determinate condizioni, come ad esempio un questionario che ne potrebbe contenere decine e decine di checkBox risulterebbe di difficile lettura e tediosa. Inoltre, ti obbliga a preoccuparti di ricordare i nomi di tali oggetti (ti sfido a non dimenticarne o sbagliarne uno sotto determinate condizioni ) che, invece, verrebbe facile in fase di definizione di tali campi nel predisposto file xml del form corrispondente di definizione del tracciato record.
-
e no, non ti ho proposto la ricetta di giovi in una salsa diversa! ;D
l'obiezione opposta a giovi, circa la non riusabilità del codice, è incontrovertibile, così come è imprescindibile la condizione che non ci si debba ricordare di tutte le checkbox; ma è soprattutto necessario che una modifica alla struttura della form, fatta da una terza persona, non crei comportamenti anomali che nessuno sa spiegare, dato che, tra qualche mese, nessuno si ricorderà ove fossero state messe le mani ::)
all'interno del metodo validate($form, $data [, ...]) hai due elementi: l'hash table $data, con i dati presi dal canale post e presenti nella form (dato che joomla ha già effettuato il bind con la form stessa) ed $form, un'istanza dell'oggetto JForm associato a questo data model.
è quindi possibile, ma solo in j3+, iterare i fields contenuti in $form alla ricerca dei checkbox ed agire di conseguenza; non ti interessa né il nome né il numero, ti basta solo che sia type=='Checkbox', e, se il relativo fieldname non è presente in $data ...
poi ognuno usi la metodologia che preferisce, io suggerivo solo una strada alternativa, che finora non ho mai visto usare da altri... magari è perché non funziona ;D ;D
ciao,
marco