with([ 'slider' => Slider::findWithSlides(setting('storefront_slider')), 'sliderBanners' => Banner::getSliderBanners(), 'features' => Feature::all(), 'featuredCategories' => $this->featuredCategoriesSection(), 'threeColumnFullWidthBanners' => $this->threeColumnFullWidthBanners(), 'productTabsOne' => $this->productTabsOne(), 'topBrands' => $this->topBrands(), 'flashSaleAndVerticalProducts' => $this->flashSaleAndVerticalProducts(), 'twoColumnBanners' => $this->twoColumnBanners(), 'productGrid' => $this->productGrid(), 'threeColumnBanners' => $this->threeColumnBanners(), 'tabProductsTwo' => $this->tabProductsTwo(), 'oneColumnBanner' => $this->oneColumnBanner(), ]); } private function featuredCategoriesSection() { if (!setting('storefront_featured_categories_section_enabled')) { return; } return [ 'title' => setting('storefront_featured_categories_section_title'), 'subtitle' => setting('storefront_featured_categories_section_subtitle'), 'categories' => $this->getFeaturedCategories(), ]; } private function getFeaturedCategories() { $categoryIds = Collection::times(6, function ($number) { if (!is_null(setting("storefront_featured_categories_section_category_{$number}_product_type"))) { return setting("storefront_featured_categories_section_category_{$number}_category_id"); } })->filter(); return Category::with('files') ->whereIn('id', $categoryIds) ->when($categoryIds->isNotEmpty(), function ($query) use ($categoryIds) { $query->orderByRaw("FIELD(id, {$categoryIds->filter()->implode(',')})"); }) ->get() ->map(function ($category) { return [ 'name' => $category->name, 'logo' => $category->logo, ]; }); } private function threeColumnFullWidthBanners() { if (setting('storefront_three_column_full_width_banners_enabled')) { return Banner::getThreeColumnFullWidthBanners(); } } private function productTabsOne() { if (!setting('storefront_product_tabs_1_section_enabled')) { return; } return Collection::times(4, function ($number) { if (!is_null(setting("storefront_product_tabs_1_section_tab_{$number}_product_type"))) { return setting("storefront_product_tabs_1_section_tab_{$number}_title"); } })->filter(); } private function topBrands() { if (!setting('storefront_top_brands_section_enabled')) { return collect(); } $topBrandIds = setting('storefront_top_brands', []); return Cache::rememberForever(md5('storefront_top_brands:' . serialize($topBrandIds)), function () use ($topBrandIds) { return Brand::with('files') ->whereIn('id', $topBrandIds) ->when(!empty($topBrandIds), function ($query) use ($topBrandIds) { $topBrandIdsString = collect($topBrandIds)->filter()->implode(','); $query->orderByRaw("FIELD(id, {$topBrandIdsString})"); }) ->get() ->map(function (Brand $brand) { return [ 'url' => $brand->url(), 'logo' => $brand->getLogoAttribute(), ]; }); }); } private function flashSaleAndVerticalProducts() { return [ 'flash_sale_title' => setting('storefront_flash_sale_title'), 'vertical_products_1_title' => setting('storefront_vertical_products_1_title'), 'vertical_products_2_title' => setting('storefront_vertical_products_2_title'), 'vertical_products_3_title' => setting('storefront_vertical_products_3_title'), ]; } private function twoColumnBanners() { if (setting('storefront_two_column_banners_enabled')) { return Banner::getTwoColumnBanners(); } } private function productGrid() { if (!setting('storefront_product_grid_section_enabled')) { return; } return Collection::times(4, function ($number) { if (!is_null(setting("storefront_product_grid_section_tab_{$number}_product_type"))) { return setting("storefront_product_grid_section_tab_{$number}_title"); } })->filter(); } private function threeColumnBanners() { if (setting('storefront_three_column_banners_enabled')) { return Banner::getThreeColumnBanners(); } } private function tabProductsTwo() { if (!setting('storefront_product_tabs_2_section_enabled')) { return; } $tabs = Collection::times(4, function ($number) { if (!is_null(setting("storefront_product_tabs_2_section_tab_{$number}_product_type"))) { return setting("storefront_product_tabs_2_section_tab_{$number}_title"); } })->filter(); return [ 'title' => setting('storefront_product_tabs_2_section_title'), 'tabs' => $tabs, ]; } private function oneColumnBanner() { if (setting('storefront_one_column_banner_enabled')) { return Banner::getOneColumnBanner(); } } }