/** * Retrieve a set of products, based on the given parameters. Checks get query for sorting and pagination. * * @param string $extraFilter Additional SQL filters to apply to the Product retrieval * @param bool $recursive include sub-categories * * @return PaginatedList */ public function ProductsShowable($recursive = true) { // Figure out the categories to check $groupids = array($this->ID); if (!empty($recursive) && self::config()->include_child_groups) { $groupids += $this->AllChildCategoryIDs(); } $products = Product::get()->leftJoin('Product_ProductCategories', '"Product_ProductCategories"."ProductID" = "Product"."ID"')->filterAny(array('ParentID' => $groupids, 'Product_ProductCategories.ProductCategoryID' => $groupids)); if (self::config()->must_have_price) { if (Product::has_extension('ProductVariationsExtension')) { $products = $products->filterAny(array("BasePrice:GreaterThan" => 0, "Variations.Price:GreaterThan" => 0)); } else { $products = $products->filter("BasePrice:GreaterThan", 0); } } $this->extend('updateProductsShowable', $products); return $products; }