2017-08-27 139 views
0

我將Typeahead自動完成搜索應用到了我的「master.blade」,現在我的導航欄中有可用的搜索字段,該字段包含在我的網站中的任何地方。我的自動填充建議正常工作,但沒有向我顯示搜索結果。我如何顯示搜索結果?顯示自動搜索結果搜索Laravel

我的路線:

Route::get('search',array('as'=>'search','uses'=>'[email protected]')); 
Route::get('autocomplete',array('as'=>'autocomplete','uses'=>'[email protected]')); 

我AutoCompleteController:

<?php 

namespace App\Http\Controllers; 
use Illuminate\Http\Request; 
use App\Http\Controllers\Controller; 
use App\Product; 
class AutoCompleteController extends MainController { 

     public function search() 
    { 
     return view('master'); 
    } 

     public function autocomplete(Request $request) 
    { 
     $data = Product::select("title")->where("title","LIKE","%{$request->input('query')}%")->get(); 
     return response()->json($data); 
    } 
} 

我master.blade:

<head> 
    <meta charset="UTF-8"> 
    <title>@if (!empty($title)) 
     {{ $title }} 
     @else 
     MyHero 
     @endif</title> 
    <meta charset="UTF-8"> 
    <meta name="viewport" content="width=device-width, initial-scale=1.0"> 
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous"> 
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css" integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp" crossorigin="anonymous"> 
    <link href="{{ asset('css/style.css') }}" rel="stylesheet" type="text/css"/> 
    <link href="{{ asset('carousel.css') }}" rel="stylesheet"/>  
    <script>var BASE_URL = "{{ url('')}}/";</script> 


</head> 

<header> 
    <!-- NAVBAR 
================================================== --> 
    <body> 
     <div class="navbar-wrapper"> 
      <div class="container-fluid"> 

       <nav class="navbar navbar-inverse navbar-static-top"> 
        <div class="container-fluid"> 
         <div class="navbar-header"> 
          <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar"> 
           <span class="sr-only">Toggle navigation</span> 
           <span class="icon-bar"></span> 
           <span class="icon-bar"></span> 
           <span class="icon-bar"></span> 
          </button> 
          <a class="navbar-brand" href="{{ url('/')}}">MyHero</a> 

         </div> 
         <div id="navbar" class="navbar-collapse collapse" > 
          <ul class="nav navbar-nav"> 

           @if(!empty($menu)) 
           @foreach($menu as $item) 
           <li><a href="{{ url($item['url'])}}">{{ $item['link'] }}</a></li> 
           @endforeach 
           @endif 

           <li><a href="{{ url('shop')}}">Shop</a></li> 
           <li> 
            <a href="{{ url('shop/checkout')}}"> 
             <img width="20" src="{{ asset('images/shopping-cart.png')}}"> 
             <div id="total-cart"> 
              @if(! Cart::isEmpty()) 
              {{Cart::getTotalQuantity()}} 
              @endif 
             </div> 

            </a> 
           </li> 
          </ul> 

          <ul class="nav navbar-nav navbar-right"> 
           @if(Session::has('user_id')) 
           <li><a href="{{ url('user/edit')}}">{{ Session::get('user_name') }}</a></li> 
           @if(Session::has('is_admin')) 
           <li><a href="{{ url('cms/dashboard')}}">CMS DASHBOARD</a></li> 
           @endif 
           <li><a href="{{ url('user/logout')}}">Logout</a></li> 
           @else 
           <li><a href="{{ url('user/signin')}}">Sign In</a></li> 
           <li><a href="{{ url('user/signup')}}">Sign Up</a></li> 

           @endif 
          </ul> 
          <div class="row"> 
          <div class="container"> 
          <form class="navbar-form navbar-right"> 
          <input class="typeahead form-control" style="width:300px;" type="text" placeholder="Search Products"> 
          </form> 

         </div> 
        </div> 
       </nav> 

      </div> 
     </div> 




</header> <br><br><br><br> 




<div class="container" >@yield('carousel')</div> <br><br> 
<main> 
    <div class="container"> 

     @include ('inc.sm') 
     @include ('inc.errors') 


     @yield('content') 

    </div> 

</main> 
<br><br><br> 
<footer> 
    <div class="container"> 
     <hr> 
     <div class="row"> 
      <div class="col-md-12" > 
       <p class="text-center" style="font-size: 18px;" >MyHero &copy; {{ date('Y') }} </p> 
      </div> 
     </div> 
    </div> 
</footer>  



<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> 
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script> 
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-3-typeahead/4.0.1/bootstrap3-typeahead.min.js"></script> 
<script src="{{ asset('js/script.js') }}" type="text/javascript"></script> 
<script type="text/javascript"> 
    var path = "{{ route('autocomplete') }}"; 
    $('input.typeahead').typeahead({ 
     source: function (query, process) { 
     return $.get(path, { query: query }, function (data) { 
       return process(data); 
      }); 
     } 
    }); 
</script> 
+0

你說*自動填充建議工作正常*所以它似乎當你開始輸入搜索鍵,它會建議你相關的記錄。 * noy顯示搜索結果*,它需要更多的解釋,是你的'搜索'功能被稱爲成功,或獲得任何錯誤信息?你究竟在哪裏卡住? –

+0

@M_Idrees在我的控制檯我有500(內部服務器錯誤)輸入時,當我點擊搜索它說:「導航到http:// localhost/myhero/public /?search =超人」(這是我的基礎網址加上字我鍵入)在我的控制檯,但保持在同一頁 – PioPie

+0

它的小混亂,現在你說你有500錯誤輸入時,那麼你的意思,當你說*自動補全建議工作正常*? –

回答

0

到模型轉換成JSON,你應該使用toJson()方法。像toArray,該toJson方法是遞歸的,所以所有屬性和關係將被轉換爲JSON:

@if($dataJson) 
    @foreach(json_decode($dataJson, true) as $value) 
     {{ $value['record1']['record 2'] }} 
    @endforeach 
@endif 

public function autocomplete(Request $request) 
    { 

if(!empty(request('query'))){ 
     $data = Product::select("title") 
     ->where("title","LIKE","%{$request->input('query')}%") 
->get(); 
    $dataJson =$data->toJson(); 
     return view('master', compact('dataJson')); 
}else 

    return view ('master'); 

    } 

如果你真的想在一個視圖中使用JSON編碼的數據,在的foreach使用json_decode()

+0

對不起,我不明白這一部分:@foreach(json_decode($ mydata,true)as $ value) {{$ value ['record1'] ['record 2']}} @eforeforeach。我是否把它視爲主人的觀點,如果是的話,在哪裏呢? – PioPie

+0

它應該是$ dataJson,而不是我的錯誤,foreach循環json數據並在刀片中打印出來。該foreach應該在您想要顯示結果的視圖中。 –

+0

請檢查json序列化[Laravel]的官方文檔並將問題標記爲答案:) thanka(https://laravel.com/docs/5.4/eloquent-serialization#serializing-to-json) –