public function getProducts($category_id, $language_id, $params) { $paging = array_get($params, 'paging', []); $page_index = 1; $page_size = 10; if (count($paging) > 0) { $page_index = count($paging) == 2 ? $paging[0] : 1; $page_size = count($paging) == 2 ? $paging[1] : $paging[0]; } // force current page to 5 //Paginator::setCurrentPage($page_index); Paginator::currentPageResolver(function () use($page_index) { return $page_index; }); $query = Product::select('id', 'price', 'tax_class_id', 'price', 'image', 'views', 'pd.name as name', 'pd.description as description')->join('products_to_categories as pc', function ($join) use($category_id) { $join->on('products.id', '=', 'pc.product_id'); $join->where('pc.category_id', '=', $category_id); })->leftJoin('products_descriptions AS pd', function ($join) use($language_id) { $join->on('products.id', '=', 'pd.product_id'); $join->where('pd.language_id', '=', Context::getLanguageId()); }); $sorting = array_get($params, 'sorting', []); if (count($sorting) > 0) { $tokens = explode(":", $sorting[0]); $sort_column = $tokens[0]; $sort_direction = count($tokens) > 1 ? $tokens[1] : 'asc'; switch ($sort_column) { case 'price': $query->orderBy('price', $sort_direction); break; case 'popular': $query->orderBy('views', $sort_direction); break; case 'newest': $query->orderBy('created_at', $sort_direction); break; } } $items = $query->paginate($page_size); foreach ($items as $item) { $this->calculateTax($item); } return $items; }