it-swarm-eu.dev

Prima dell'elaborazione dei dati del modulo prima del salvataggio nel database

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 .

2
Mhaddy

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.

1
Mhaddy

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

1
Terry Carter