Я создаю систему электронной торговли. У меня есть функция getCategories()
в контроллере. Эта функция работает, но я попытался расширить ее функциональность, чтобы она вернула соответствующее представление в соответствии с фильтром.Laravel 4 - Фильтровать результаты и кешировать
Допустим, пользователь просматривает определенную категорию. Каждая категория содержит продукты, и я попытался создать фильтр для продуктов на основе их бренда. Например, если пользователь находится в категории 'Guitars', он должен иметь возможность фильтровать свои товары на основе существующей торговой марки 'Gibson'.
Итак, я реализовал вышеупомянутый сценарий, но я не уверен, что это очень эффективно. Я создал ссылку:
@foreach($brand as $key => $value)
<a href="/store/categories/{{$category->slug}}?brand={{$value->slug}}">{{$value->name}}</a>
@foreach
Как вы можете видеть, я передаю параметр brand
через URL и эта связь вызывает функцию getCategories()
, где внутри этой функции я проверяю, если ссылка содержит параметр, как так :
if (Input::has('brand')) {
$brandflag = true;
$brand_input = Input::get('brand');
$brandfilter = array('type'=>'Brand', 'name' => ucfirst($brand_input));
}
$brandflag
первоначально установлен на false
и если он существует, то он изменяет свое значение true
. Также еще один if
, чтобы вернуть другие данные в представление, если $brandflag
изменено на true
.
if ($brandflag == true) {
$b = Brand::whereSlug($brand_input)->first();
$products = Product::where('brand_id','=', $b->id)->whereIn('category_id', $children->lists('id'));
return View::make('store.categories')
->with('products', $products->paginate(6))
->with('ranges', $ranges)
->with('brandfilter', $brandfilter)
->with('category', $main)
->with('brands', $brands)
->with('children', $children_array)
->with('seo', $seo);
}
Все вышеперечисленные работы, однако, когда я Кэширование категории маршрута все это не будет работать, потому что он будет кэшировать вид, и он будет ссылаться на этот кэшированный файл. Все, что прошло после того, как ?
проигнорировано.
Route::get('categories/{slug}', array(
'as' => 'store.categories',
'uses' => '[email protected]'
))->where('slug', '(.*)?')->before('cache.fetch')->after('cache.put');
Как следует очистить/исправить мой код, чтобы получить эту функциональность работать и иметь возможность кэшировать категории?
Я просто хочу сделать комментарий, потому что я не уверен на 100%. Я не думаю, что это будет мудрая страница для кэширования. Эта страница имеет возможность постоянно меняться, и, поскольку это так, это не идеальная точка кеширования. Вы хотите кэшировать страницы, которые не меняются часто и не принимают много параметров. Это более важно для кэширования. –