使用 Laravel 手动自动完成搜索,如何将信息传递给视图中的 div

Posted

技术标签:

【中文标题】使用 Laravel 手动自动完成搜索,如何将信息传递给视图中的 div【英文标题】:Manual autocomplete search with Laravel, how to pass on info to div's in views 【发布时间】: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 变量,这一切都比我预期的要困难得多,所以希望有人能指导我,谢谢!

【问题讨论】:

【参考方案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 项目取得了成功。非常感谢。

以上是关于使用 Laravel 手动自动完成搜索,如何将信息传递给视图中的 div的主要内容,如果未能解决你的问题,请参考以下文章

在 laravel 中搜索自动完成 ajax

在 Laravel 5.5 中使用 Typeahead.js 使用两个表格列进行自动完成搜索

输入字段自动完成搜索选择名称并将id存储在输入框laravel

html Laravel自动完成搜索

手动触发 jQuery 自动完成

Angular 2/4 自动完成搜索框