0

30分前に投稿したことは知っていますが、検索投稿の入力に近づいていると思います:

私はこのようなモデルを作成しました

    function matchPosts($keyword)
{
    $this->db->get('posts');
    $data = array();
    $query = $this->db->query("SELECT title,body FROM posts WHERE title LIKE '%$keyword%' or body LIKE '$keyword%' AND status='published'");        
    if( $query->num_rows() > 0)
    {
        $data = $query->row_array();
    }       
    $query->free_result();
    return  $data;
}

データベースから一致を取得しようとしていますが、

コントローラーは次のようになります。

public function searchPosts()
{
    $keyword = $this->input->post('search_value', TRUE);

    $matched_field = $this->Model_cats->matchPosts($keyword);

    echo $keyword;

    if( count($matched_field) > 0)
    {
        $this->load->view('posts_list');
    }
    else
    {
        $this->load->view('posts_list');
    }
}

これはjsファイルです

$(document).ready(function()
{
    $("#search_posts").keyup(function()
    {        
        var searchValue = $(this).val();

        $(".posted_post").each(function()
        {
               $.ajax({             
                    type: "POST",
                    url : "http://local.blog.com/welcome/searchPosts",
                    data: {
                        search_value: searchValue   
                    },  
                    success: function(data)
                    { 
                        if(data)
                        {
                            $(this).show(); 
                        }
                        else
                        {
                            $(this).fadeOut();      
                        }

                    }
                });
        });
    });
});

とビュー:

    <br>    
<form action="" method="post"> 
        <label for="search_posts"><b>Search Posts</b></label>
        <input type="text" id="search_posts" value="" />
</form>


posts_list は、投稿をループするビューです...

Em 私は近づいていますか?この状態では動作しません。

4

3 に答える 3

1

match_posts関数では、検索投稿関数でnum_rows()を使用しており、上記の関数から結果を収集し、===を使用してブール値trueと比較しています。var dumpを試して、numrows関数から返される値のタイプを確認してください。数値とブール値を比較していると思います。代わりに、カウント(一致したフィールド)>0の場合に使用できます

于 2013-02-18T13:18:05.117 に答える
1

スクリプトを次のように編集します

$("#search_posts").keyup(function()
{        
    var posts = $(this).val();        
    //$(".posted_post").each(function()
    //{
        $.ajax({
            url : 'http://local.blog.com/welcome/searchPosts',
            data: {posts},  
            success : function(data)
            {
                 $(this).show();
            }
        });
    //}
});

そしてから

$matched_field = $this->Model_cats->matchPosts($keyword);

$matched_field は、正しい検索結果の数を返します..??次に、次のようにチェックします

if($matched_field)
{
      //Here you can print result of search
}
else
{
      //You can print No results found
}
于 2013-02-18T13:14:01.157 に答える
0

モデル

class SomeModel extends CI_Model{

    /**
     * Get Posts
     * 
     * @param string LIKE param
     * @return mixed Object/Array or Boolean
     **/
    public function get_posts( $like ){

        $query = 
        $this->db
             ->select('id, title, body')
             ->like('title'   => $like)
             ->or_like('body' => $like) //not sure if your looking for FULLTEXTSEARCH on this body
             ->get_where('posts', array('status' => 'published'));


        return ( $query->num_rows() > 0) ? $query->result() : FALSE;
    }
}

ルート

//edit to match your class/method
$route['search/(:any)'] = 'welcome/search_posts/$1';

コントローラ

class Welcome extends CI_Controller{

    public function search_posts( $like ){

        if( !$posts = $this->SomeModel->get_posts( $like ))
        {
            return show_404();
        }

        //return partial view without template
        return $this->load->view('public_home', array(
            'posts' =>  $posts
        ), TRUE);
    }
}

部分図(ajax用)

/**
<ul>
    //<?php foreach($posts as $post): ?>
    <li>
        <a href=#>
            <h4><?php echo html_escape($post->title) ?></h4>
            <p>
                <?php echo html_escape($post->body) ?>
            </p>
        </a>
    </li>
    //<?php endforeach; ?>
</ul>
**/

JQuery

var SITEURL = "<?php echo site_url(); ?>";

;(function($){

    var search = {
        init: function(){

            if($('#search_posts'))
            {
                this.searchPosts();
            }

        },
        searchPosts : function(){

            var searchInput = $("#search_posts")
                result      = $("#result"),
                timeout     = '';

            //ajax request
            var doAjax = function( context, data ){
                $.ajax({
                    cache    : false,
                    url      : SITEURL + 'search/' + data.keyword,
                    dataType : 'html',
                    type     : 'POST',
                    data     : data,
                    context  : context,
                    success  : function( callback ){
                        $(this).html( callback ); //$(this) = context => $("#result")
                    }
                });
            };

            //delayed keyup event
            searchInput.on('keyup', function( event ){

                if(timeout) {
                    window.clearTimeout(timeout);
                    timeout = null;
                }

                //listen for keyup after delayed(1000)
                timeout = window.setTimeout(function(){
                    var inputVal = $(this).val();
                    var data     = {
                        'keyword'   : inputVal
                    }
                    return doAjax( result, data );//execute ajax function
                }, 1000);

            });




        }
    };

    $(function(){
        search.init();
    });

})(jQuery);
于 2013-02-18T15:14:49.103 に答える