web-dev-qa-db-fra.com

Enregistrer un tableau dynamique de zones de texte

J'ai développé un code pour créer des zones de texte dynamiques en cliquant sur le bouton "Ajouter" en utilisant javascript -

Javascript

function GetDynamicTextBox(value,index) {
    return
     '<input type="text" name="jform[options][]" id="jform_options_'+index+'" value="">' +
       '<input type="button" value="Remove" class="remove btn-danger" />'
}

formname.xml

<field name="options][" type="text" label="Options" multiple="true" description=""></field>

Lorsque je clique sur le bouton Ajouter, il ajoutera un nombre n de zones de texte. Mais je suis confronté à un problème pour enregistrer ce champ dans la base de données.

base de données

columnname = options, type= text

Je veux enregistrer les valeurs saisies dans les zones de texte sous forme de json. Pour cela, j'essaie de remplacer la méthode de sauvegarde du contrôleur.

nom_ordinateur.php

public function save($key = null, $urlVar = null){

    if($_POST['jform']){
        $jinput = JFactory::getApplication()->input;
        $postData = $jinput->post->get('jform', array(), 'array');
            $postData['options']=json_encode(implode(',',$postData['options'])); 
        // Save it back to the $_POST global variable
        JRequest::setVar('jform', $postData, 'post');
    }
    // Finally, save the processed form data
    return parent::save('id', $urlVar);
}

Mais toutes les valeurs restantes du formulaire sont enregistrées, mais pas le "champ options". - Remarque: vous pouvez voir l'image ci-jointe pour comprendre ce que j'essaie d'atteindre enter image description here

  • Toute aide serait appréciée
3
user5491

Vous pouvez le faire en utilisant prepareTable dans le modèle de votre composant. Vérifiez ceci exemple où je récupère les valeurs du tableau de cases à cocher "catégories", puis enregistrez-les en créant une variable de valeurs séparées par des virgules avec implode.

Au lieu bien sûr, vous pouvez utiliser json_encode.

protected function prepareTable($table)
{
    // Set the publish date to now
    $db = $this->getDbo();

    if($table->id==0)
    {
        $table->created = JFactory::getDate()->toSql();
    }

    $table->modified = JFactory::getDate()->toSql();

    $jinput = JFactory::getApplication()->input;


    $categories = $jinput->get('categories',null,'ARRAY');

    if($categories!=null)
        $table->categories = implode(",",$categories);
    else 
        $table->categories ='';


}

vous devez enregistrer les options en tant que tableau json dans la base de données afin de modifier cette ligne

  $postData['options']=json_encode(implode(',',$postData['options'])); 

à

  $postData['options']=json_encode($postData['options']); 

puis dans la méthode loadFormData dans votre modèle, vous devez utiliser json_decode pour décoder votre tableau

vous pouvez aussi utiliser le type Répétable pour votre formulaire et si vous définissez le nom de votre champ comme paramètre, tous les travaux seront gérés par joomla.

0
Silverboy.ir