2017-08-24 9 views
1

私のカテゴリのページ内と私の製品ページ内に同じ名前とIDの検索フィールドがあります。オートコンプリートの提案はうまくいくようですが、検索フィールド内で検索候補をクリックすると私の検索文字列を私の製品IDである整数に変換します.Afterwardsは "mysite/products id"に "このメニューの内容なし"とリダイレクトします。問題は私のルートと私のwindow.Location私のJSの中にあると思うが、私はそれを把握することはできません。ルートとwindow.location - Laravel

Route::get('shop', '[email protected]');// my categories page 

Route::get('shop/{category_url}', '[email protected]'); // my products page 

マイAutoCompleteController:

<?php 

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

    public function show(Product $product) { 
     return view('content.products', ['product' => $product]); 

    } 
    public function autoComplete(Request $request) { 
     $query = $request->get('term',''); 

     $products=Product::where('title','LIKE','%'.$query.'%')->get(); 

     $data=array(); 
     foreach ($products as $product) { 
        $data[]=array('label'=>$product->title,'value'=>$product->id); 
     } 
     if(count($data)){ 
     return $data;} 
     else{ 
      return ['value'=>'No Result Found','id'=>'']; 
    }} 

} 

で私の見解ここ

は私のコードは

マイルートカテゴリおよび製品に接続

Route::get('products/{id}', '[email protected]'); 
    Route::get('autocomplete',array('as'=>'autocomplete','uses'=>'[email protected]')); 
    Route::get('searchajax',array('as'=>'searchajax','uses'=>'[email protected]')); 

さらにいくつかのルートであります私のオートコンプリートの検索のためのproducts.bladeとcategories.bladeは同じである:あなたのautoComplete方法で

@extends ('master') 

@section('content') 
<link href="http://demo.expertphp.in/css/jquery.ui.autocomplete.css" rel="stylesheet"> 
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> 
<script src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script> 

<div class="row"> 
    <form class="navbar-form text-center " form method="GET" action=" "> 
     <input id="search_text" placeholder=" Search products" name="search_text" type="text" value="" style="width: 400px; height: 35px; border-radius: 5px ; padding-left: 12px;"><br><br> 
     <input class="btn btn-default " type="submit" value=" Search" > 
    </form> 
</div> 


<script> 
     $(document).ready(function() { 
     src = "{{ route('searchajax') }}"; 
$("#search_text").autocomplete({ 

    source: function (request, response) { 
     $.ajax({ 
      url: src, 
      dataType: "json", 
      data: { 
       term: request.term 
      }, 
      success: function (data) { 
       response(data); 

      } 
     }); 
    }, 
    minLength: 3, 
    select: function(event, ui) { 

     window.location = '{{ url('shop/{category_url}')}}' + ui.item.value 
    } // not sure if this is the correct way , please advise 
}); 
     }); 
</script> 
+0

あなたは、私が試したLeonardoCabré@ window.locationの= 'ショップ/' + ui.item.valueまたはwindow.locationの= 'ショップ/' + ui.item.label –

+0

を試すことができます。それは動作していません。「非オブジェクトのプロパティを取得しようとしています」というエラーが発生しました。 – PioPie

+0

'category_url'の値はどれですか、' autoComplete() 'メソッドから返すことができませんでしたか? –

答えて

0

foreach ($products as $product) { 
     // I guess you have product->cagegory relationship, and category model 
     // has a URL? 
     $category_url = $product->category->url; 
     $data[]=array('label'=>$product->title,'value'=>$category_url); 
    } 

今すぐあなたのオートコンプリートの結果がcategory_urlを含めるので、あなたは自分のJSを更新します。

window.location = '{{ url("shop/" + ui.item.value) }}'; 
+0

OPのコメントを確認 *私の製品テーブルには、id、categorie_id、title、article、url、imageupfated_at、created_atが含まれています... category_url *はありません。あなたの答えに '$ product-> category-> url'がどのように働いていますか? –

+0

@AddWebSolutionPvtLtdもう一度私の答えをチェックし、あなたが何を求めているのかを正確に説明するコメントを書き留め、ラーベル関係を読んでください。 –

+0

@ Don'tPanicはい私はcategorie.phpモデルの間に1対1の関係があります。 – PioPie