/**
  * 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;
 }