【问题标题】:Manual autocomplete search with Laravel, how to pass on info to div's in views使用 Laravel 手动自动完成搜索,如何将信息传递给视图中的 div
【发布时间】:2015-05-26 21:55:25
【问题描述】:

我正在尝试进行自动完成搜索,即从输入中的字符串中搜索,在我的数据库中从几个表(例如 Persons、Users 和 Bands)中进行搜索。使用 Laravel 4.2。

然后,我希望在我已经位于的视图的#div 中访问和更新三个对象。

我尝试了很多,但这一次很难。我的解决方案在本地主机上工作,但不是在线,但无论如何它都是一个糟糕的解决方案,通过传递带有->(对象)的视图。已发送标头,在线失败。

我认为我的解决方案应该是这样的:

查看:

{{ Form::open(['action' => ['SearchController@search'], 'method' => 'post']) }}
{{ Form::text('term', '', ['class' => 'uk-width-1-1', 'id' =>  'term', 'placeholder' =>  'Søk etter person'])}}
{{ Form::close() }}

控制器:

   public function search(){
    $term = Input::get('term');

    $fest = Session::get('festival');
    $festival = Festival::find($fest);

        $persons = DB::table('fs_persons')
            ->join('fs_festival_persons', 'person_id','=','fs_persons.id')
            ->where('festival_id', '=', $fest)
            ->get();  

    foreach ($persons as $query)
    {
        if ((strpos(strtolower($query->firstname), strtolower($term)) !== false) OR ((strpos(strtolower($query->lastname), strtolower($term)) !== false))) {
           $results[] = [ 'id' => $query->id, 'value' => $query->firstname.' '.$query->lastname, 'tlf' => $query->tlf ];
        }

}
return Response::json($results);
}

但我不确定如何正确使用它,这里只是一个对象,尝试用对象创建一个多级数组,但这对我来说非常混乱。这是来自 jquery 自动完成的一点点代码,我得到了它的工作,但我想要我自己的搜索结果呈现。

我希望能够在一个视图中更新搜索输入上的 keyup,以及我可以在哪里使用刀片模板:

@if($persons)
 @if(sizeof($persons)>0)
    <div class="uk-width-small-4-4">
    Personar:
    </div>
    <div class="uk-width-small-4-4">
    @foreach($persons as $person)
    <?php
                $tmp_pers = Person::find($person->id);
?>

    <span class="search_name">
    <a href='{{ URL::to("festival/$festivalen->slug/person/$person->id") }}'>
    {{ $person->firstname }} {{ $person->lastname }}
    </a>
    </span>
</div>
@endforeach
@endif
@endif

但我不确定如何从 json 中获取\retrieve 变量,这一切都比我预期的要困难得多,所以希望有人能指导我,谢谢!

【问题讨论】:

    标签: php jquery laravel laravel-4 autocomplete


    【解决方案1】:
    your view 
    
    <script>
      <?php foreach($Prods as $Pr)
      {
          $arr[]=$Pr->Pname;
      }
      ?>
      $( function() {
      var availableTags = <?php echo json_encode($arr); ?>;
        $( "#tags" ).autocomplete({
          source: availableTags
        });
      } );
      </script>
    
    and your conrtoller
    
    public function create()
        {   
            $Products = DB::table('Products')->get();
            $Prods=DB::table('Products')->select('Pname')->get();
            return view('test', ['Products'=>$Products],['Prods'=>$Prods]);
           }
    

    【讨论】:

      【解决方案2】:

      您可以关注一个示例项目。 laravel-smart-search

      您的视图中还应该存在以下代码集,您可以在“选择:”中定义您想要的值。当用户选择任何建议时,其他元素将发生变化。

      查看

      $(function() {
            $("#search_text").autocomplete({
                source: "{{URL::route('searchajax')}}",
                minLength: 2,
                select: function( event, ui ) {
                    $('#data').val(ui.item.id);
                    $('#search_text').val(ui.item.value);
                    $('#search').hide();
                }
            });
        });
      

      控制器

      foreach ( $persons as $query ){
              $data[] = array('value' => $row->$column, 'id' =>$row->id);
      }
      return Response::json($data);
      

      【讨论】:

      • 我刚刚通过关注 laravel-smart-search 项目取得了成功。非常感谢。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-28
      • 2016-10-28
      • 2013-10-15
      • 2021-11-30
      • 2020-12-28
      • 2018-01-29
      相关资源
      最近更新 更多