2015-02-03 2 views
1

У меня есть раскрывающееся меню, которое я использую для фильтрации изображений по категориям. Моя первая проблема в том, что я хочу, чтобы выбранный выбор был выбран после фильтра, как я могу это сделать?Фильтр с выпадающим списком Laravel

Это мой первый раз, когда я использовал Laravel, и мне интересно, пойду ли я в правильном направлении с моим решением (теперь у меня есть тот же код в двух функциях, я планирую это исправить) По-настоящему понять, как это сделать. Могу ли я иметь функцию, которая принимает либо категорию, либо нуль?

 <div class="dropdown"> 
     <button class="btn btn-default dropdown-toggle" type="button" data-toggle="dropdown" value="">Show all</button> 
     <ul class="dropdown-menu" role="menu"> 
      @foreach ($categories as $category) 
       <li value="{{ $category->id }}"><a href="{{$category->id}}">{{ $category->name }}</a></li> 
      @endforeach 
     </ul> 
    </div> 

маршруты

Route::get('/', array('uses' => '[email protected]')); 
Route::get('/{category?}', array('uses' => '[email protected]')); 

контроллер

public function index() 
{ 
    $images = Image::all(); 

    $categories = ..\Models\Category::all(); 

    return View::make('index', array('images' => $images, 'categories' => $categories)); 
} 

public function filter($category){ 

    $images = Image::where('category_id', '=', $category); 

    $categories = ..\Models\Category::all(); 

    return View::make('index', array('images' => $images, 'categories' => $categories)); 

} 

ответ

1

На ваш взгляд, добавить условие, чтобы проверить, если текущая категория в петле выбран один.

@foreach ($categories as $category) 
    @if($category->id == Input::get('category') 
      // echo category as selected 
    @else 
      // echo category 
    @endif 
@endforeach 

Возможно, вам потребуется использовать html <select>.

Вы можете использовать тот же подход для объединения двух функций.

if(Input::has('category')) 
    $images = Image::where('category_id', '=', $category); 
else 
    $images = Image::all(); 

Это должно работать, так как вы используете дополнительный параметр маршрута.

Update:

Использование выбрать следующим образом:

@foreach ($categories as $category) 
    <select onchange="filter(this.value)"> 
     @if($category->id == Input::get('category') 
      <option selected="selected" value="{{ $category->id }}">{{ $category->name }}</option> 
     @else 
       <option value="{{ $category->id }}">{{ $category->name }}</option> 
     @endif 
    </select> 
@endforeach 

Использование onchange приписывать яваскрипта функция будет вызываться, то вы можете использовать переадресацию.

<script> 
    function filter(id) 
    { 
     window.location.href = {{ URL::action('[email protected]') }} + '/' + id; 
</script> 

, где filter - это функция вашего контроллера.

+0

Спасибо за ваш ответ, но я не могу заставить его работать. Я пробовал с