使用 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 5.5 中使用 Typeahead.js 使用两个表格列进行自动完成搜索