Ho una serie di caselle di controllo nel mio modulo che insieme formano un array quando viene POST. Voglio invece salvare questi dati come stringa (ad es. "##, ##, ##") prima di eseguire il commit nel database.
Ecco cosa ho in\models\componentname.php:
public function save($data)
{
$input = JFactory::getApplication()->input;
$filter = JFilterInput::getInstance();
if(isset($data['dancer_id'])) {
$data['dancer_id'] = implode(",", $data['dancer_id']);
}
if (parent::save($data))
{
return true;
}
return false;
}
Ed ecco il tipo di campo personalizzato che ho creato (\ models\fields\fieldname.php):
<div class="dancer"><input id="dancer_id" type="checkbox" name="dancer_id[]" value="XXX" />XXX</div>
Tutti gli altri campi nel modulo vengono salvati tranne questo. qualche idea? Inoltre, non sono sicuro di come i dati $ vengano passati alla funzione save () ... forse ho perso una chiamata da qualche parte? Per arrivare così lontano, ho seguito il tutorial del componente HelloWorld MVC sul sito Joomla e la risposta in questo thread correlato .
L'ho capito con l'aiuto di qualcuno sul Google Gruppi di Joomla DEV ( dettagli ): Non ho aggiunto il mio campo personalizzato dancer_id all'array jform in questo modo:
<input id="dancer_id" type="checkbox" name="jform[dancer_id][]" value="2261" checked>
Una volta fatto, ha funzionato tutto. Dettagli collegati sopra.
Hai provato a recuperare direttamente l'input del modulo senza usare JFilterInput?
Prova questo:
sostituire:
$filter = JFilterInput::getInstance();
con:
$dancers = $input->get('dancer','','array');
allora puoi farlo
$data['dancer_id'] = implode(",", $dancers);
Da lì puoi finire con i tuoi metodi di salvataggio