使用 Laravel 进行手动自动完成搜索,如何将信息传递给视图中的 div
Manual autocomplete search with Laravel, how to pass on info to div's in views
我正在尝试进行自动完成搜索,即从输入中的字符串搜索,在我的数据库中从多个表(如 Persons、Users 和 Bands)进行搜索。使用 Laravel 4.2.
然后我想在我已经在的视图上的#div 中访问和更新三个 object。
我已经尝试了很多,但是这个很难。我的解决方案在 localhost 上运行,但不能在线运行,但无论如何,通过使用 ->(the objects) 传递视图,这是一个糟糕的解决方案。在线失败,因为 headers 已经发送。
我认为我的解决方案应该是这样的:
查看:
{{ 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);
}
但我不确定如何正确使用它,这里只有一个 object,尝试用 object 制作一个多级数组,但这对我来说非常混乱。这是来自 jquery 自动完成的一小段代码,我可以正常工作,但我想要自己的搜索结果展示。
在视图中,我希望能够在搜索输入的 keyup 上进行更新,并且我可以在哪里使用 blade 模板:
@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 中 make\retrieve 变量,这一切比我预期的要难得多,所以希望有人能指导我,谢谢!
有一个示例项目可供您参考。
laravel-smart-search
还应该存在您视图中的波纹管代码集,您可以在 "select:" 中定义您想要的值。当用户 select 时,其他元素的任何建议都会改变。
查看
$(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);
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]);
}
我正在尝试进行自动完成搜索,即从输入中的字符串搜索,在我的数据库中从多个表(如 Persons、Users 和 Bands)进行搜索。使用 Laravel 4.2.
然后我想在我已经在的视图上的#div 中访问和更新三个 object。
我已经尝试了很多,但是这个很难。我的解决方案在 localhost 上运行,但不能在线运行,但无论如何,通过使用 ->(the objects) 传递视图,这是一个糟糕的解决方案。在线失败,因为 headers 已经发送。
我认为我的解决方案应该是这样的:
查看:
{{ 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);
}
但我不确定如何正确使用它,这里只有一个 object,尝试用 object 制作一个多级数组,但这对我来说非常混乱。这是来自 jquery 自动完成的一小段代码,我可以正常工作,但我想要自己的搜索结果展示。
在视图中,我希望能够在搜索输入的 keyup 上进行更新,并且我可以在哪里使用 blade 模板:
@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 中 make\retrieve 变量,这一切比我预期的要难得多,所以希望有人能指导我,谢谢!
有一个示例项目可供您参考。 laravel-smart-search
还应该存在您视图中的波纹管代码集,您可以在 "select:" 中定义您想要的值。当用户 select 时,其他元素的任何建议都会改变。
查看
$(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);
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]);
}