0

私のウェブサイトは、ユーザーの入力によって提供される独自のコンテンツに依存しています。

「スポーツ」と入力すると、スポーツに基づいたコンテンツが表示されます。それはとても簡単です。ただし、キーワードを追加し始めると、少なくとも私が行っている方法では、もう少し複雑になります。

ユーザーが入力したデータが配列であるかどうかを常に確認し、データを別の方法で操作する必要があります。

現在、Codeigniter のセッション クラスを使用してユーザーの選択を保存し、その値に基づいてデータを取得して操作しています。

彼らがフォームを送信すると、私の JS が実行されます。

$('#topics_form').submit(function() {
    var topic = document.getElementById('topics_filter').value
    $.ajax({
        type: "POST",
        url: 'ajax/update_session_topic',
        dataType: 'json', 
        data: { topic: topic },
            success: function(){
                load_custom_topics()
            }
    });
    return false;
});

次に、AJAX モデルで update_session_topic が実行されます

public function update_session_topic()
{
    if ($this->session->userdata('active_topic') == FALSE) 
    {
        $array['active_topic'] = $this->input->post('topic');
        $this->session->set_userdata($array);
        return true;
    } else {
        $this->page_model->add_session_topic($this->input->post('topic'));
        return true;
    }
}

値が 1 つしかない場合は、大したことではありません。

ただし、2番目の値を追加しようとすると...配列かどうかを確認するか、配列にする必要があります。

    public function add_session_topic($current_filter)
    {
        $session = $this->session->userdata('active_topic');
        if (is_array($session) == false)
        {
            $session = array($this->session->userdata('active_topic'));
        } 
        foreach ($session as $keyword)
        {
            if ($keyword == $current_filter)
            {
                return false;
            }
        }
        $session[] = $current_filter;
        $active['active_topic'] = $session;
        $this->session->set_userdata($active);
        return true;
    }

これは私の見解でも起こります。

ちょっと面倒なので、これを行うためのより良い方法があることを望んでいました。私はまだ PHP/codeigniter に慣れていないので、何でも受け入れることができます。

ありがとう!

4

0 に答える 0