Back to top

Autore Topic: Un problema con i checkbox nello sviluppo di un componente  (Letto 4598 volte)

Offline capera

  • Nuovo arrivato
  • *
  • Post: 45
    • Mostra profilo
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
« Ultima modifica: 03 Ago 2014, 09:33:01 da alexred »
Un giorno anche noi riusciremo a fare del nostro sito un casino decente!!

Offline giovi

  • Instancabile
  • ******
  • Post: 9835
  • Sesso: Maschio
    • Mostra profilo
Re:Un problema con i checkbox nello sviluppo di un componente
« Risposta #1 il: 16 Ago 2014, 11:51:31 »
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
Codice: [Seleziona]
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?

Offline capera

  • Nuovo arrivato
  • *
  • Post: 45
    • Mostra profilo
Re:Un problema con i checkbox nello sviluppo di un componente
« Risposta #2 il: 30 Ago 2014, 09:52:14 »

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..
Un giorno anche noi riusciremo a fare del nostro sito un casino decente!!

Offline mmleoni

  • Global Moderator
  • Instancabile
  • ********
  • Post: 5547
  • Sesso: Maschio
  • Just another *nix coder/sysadmin...
    • Mostra profilo
Re:Un problema con i checkbox nello sviluppo di un componente
« Risposta #3 il: 30 Ago 2014, 14:19:49 »
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
mmleoni web consulting - creazione siti web aziendali ed e-commerce avanzati - sviluppo moduli e componenti Joomla

Offline capera

  • Nuovo arrivato
  • *
  • Post: 45
    • Mostra profilo
Re:Un problema con i checkbox nello sviluppo di un componente
« Risposta #4 il: 31 Ago 2014, 20:26:41 »
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.
Un giorno anche noi riusciremo a fare del nostro sito un casino decente!!

Offline mmleoni

  • Global Moderator
  • Instancabile
  • ********
  • Post: 5547
  • Sesso: Maschio
  • Just another *nix coder/sysadmin...
    • Mostra profilo
Re:Un problema con i checkbox nello sviluppo di un componente
« Risposta #5 il: 02 Set 2014, 15:38:39 »
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
mmleoni web consulting - creazione siti web aziendali ed e-commerce avanzati - sviluppo moduli e componenti Joomla

 



Web Design Bolzano Kreatif