Joomla.it Forum
Non solo Joomla... => Sviluppo => : raoul_benneth 03 Feb 2013, 00:11:06
-
Salve a tutti e complimenti per questo magnifico forum.
Da qualche giorno mi sto cimentando nella scrittura di un componente per joomla 2.5 che attualmente
è solo a scopo didattico per il sottoscritto.
Si tratta semplicemente di una semplicissima agenda.
Passando al mio problema specifico:
ho una tabella composta da:
id (pk)
personaID (fk su tabella persone)
giorno (varchar)
dalle (time)
alle (time)
mi funziona tutto egregiamente, riesco ad inserire un record, modificarlo o eliminarlo etc...
Ho pensato quindi di complicarmi un pò la vita pensando di voler gestire degli eventi 'fissi'
durante la settimana.
Vorrei capire come fare per:
anzichè far uscire sul form "giorno -> valore"
vorrei una serie di checkbox : lun, mar, mer, gio, ven, sab, dom
sul mio "edit.php" il codice che sto provando è il seguente:
<td><a href="#" onclick="select('giorno[]',1);"><?php echo JText::_( 'SELEZIONA TUTTI' );?>[/url] | <a href="#" onclick="select('giorno[]',0);"><?php echo JText::_( 'DESELEZIONA' );?>[/url]
<div class="btns"><?php echo $this->form->lists['giorno'];?><>
</td>
l'errore che ottengo è:
Notice: Undefined property: JForm::$lists in C:\wamp\www\joomla\administrator\components\com_test\views\agenda\tmpl\edit.php on line 61
Grazie in anticipo a tutti!!
-
sull'edit non devi fare nulla poichè è una vista, al max modifichi l'html.
Il form in joomla è governato da jform che nel model si occupa di caricare le definizioni xml, caricare i dati del post o recuperati dalla sessione ( se sei di ritorno sul form) e nella table fare un bel bind dove li unisce e li salva
Se devi cambiare qualcosa lo dovrai fare nel xml dove definisci il form.
avrai un field "giorno" di tipo text (credo) deve diventare un campo checkbox o radio se ne vuoi uno solo.
Nel primo caso trovi quì come si definisce:
http://docs.joomla.org/Standard_form_field_and_parameter_types
e per il tuo caso specifico quì:
http://docs.joomla.org/Checkboxes_form_field_type
..però succede qualcosa.... il tuo valore sarà un array che dovrai gestire in alcuni punti del tuo componente e precisamente nel bind e nel caso ritorni al form per errori o altro:
nel caso di ritorno al form, loadformdata contiene un condizionale
if (empty($data)) {
$data = $this->getItem();
se non ci sono dati nel post li recupera dalla sessione nello spazio identificato da quell'item... in quello spazio i tuoi dati saranno serializzati(*) per cui devi riportarli ad array
// Convert field ( to an array.
$registry = new JRegistry;
$registry->loadString($data->Tuo_field_name);
$data->set('Tuo_field_name',$registry->toArray());
Quando i dati vengono spediti dal form per essere salvati sono un array, un array non può essere savato in un db ha bisogno di diventare una stringa serializzata (*) ; nella Table troverai il metodo Bind:
public function bind($array, $ignore = ''){
if (isset($array['params']) && is_array($array['params'])) {
$registry = new JRegistry;
$registry->loadArray($array['params']);
$array['params'] = (string) $registry;
}
return parent::bind($array, $ignore);
}
Quello che vedi è quello che solitamente fa con i parametri che sono un array, devi fare la stessa cosa col tuo fieldname
-
Perfetto !! Funziona tutto a dovere adesso sia lato admin che lato sito !
Grazie.
Avrei un'altra domanda.
Per creare una vista personalizzata (select bla from a left join x on blabla etc...)
soltanto lato sito, devo comunque creare un form nuovo o posso passare tranquillamente
alla vista già esistente una query qualsiasi ?
Scusate per le domande magari banali ma vengo da tutt'altra formazione ed è solo da qualche
giorno che mi sono innamorato di joomla.