web-dev-qa-db-ja.com

テキストボックスの動的配列を保存

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>

[追加]ボタンをクリックすると、n個のテキストボックスが追加されます。しかし、私はこのフィールドをデータベースに保存する際に問題に直面しています。

データベース

columnname = options, type= text

テキストボックスに入力した値をjson形式で保存したい。このため、コントローラの保存方法をオーバーライドしようとしています-

controllername.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);
}

ただし、フォームの残りの値はすべて保存されますが、「オプションフィールド」は保存されません。 -注:私が達成しようとしていることを理解するために添付の画像を見ることができます enter image description here

  • どんな助けも恐れるだろう
3
user5491

コンポーネントのモデルでprepareTableを使用してそれを行うことができます。これをチェックしてくださいチェックボックスの「カテゴリ」の配列の値を取得し、それらを保存して、implodeを使用してコンマ区切りの値変数を作成します。

もちろん、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 ='';


}

オプションをデータベースに配列jsonとして保存する必要があるため、この行を変更します

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

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

次に、モデルのloadFormDataメソッドで、配列をデコードするためにjson_decodeを使用する必要があります

繰り返しフィールド タイプをフォームに使用することもできます。フィールドの名前をparamsに設定すると、すべてのジョブがjoomlaによって処理されます

0
Silverboy.ir