From 96b827d8d1822dcd3b8d18a0b98961fb5286303e Mon Sep 17 00:00:00 2001 From: ARCANEDEV Date: Fri, 10 Mar 2017 17:00:55 +0000 Subject: [PATCH] Updating random stuff (again) --- config/seo.php | 16 +++++++ .../widgets/footer-widget.blade.php | 3 ++ .../widgets/footers/1-col-links.blade.php | 1 + .../widgets/footers/2-col-links.blade.php | 8 ++++ .../widgets/footers/4-col-links.blade.php | 8 ++++ .../widgets/footers/_links.blade.php | 7 +++ resources/views/public/footer-page.blade.php | 11 +++++ .../Controllers/Front/FootersController.php | 27 +++++++++++ src/Http/Routes/Front/FootersRoutes.php | 33 +++++++++++++ src/Providers/RouteServiceProvider.php | 10 ++++ src/Providers/ViewComposerServiceProvider.php | 31 ++++++++++++ src/SeoServiceProvider.php | 1 + .../Front/FooterWidgetComposer.php | 36 ++++++++++++++ src/ViewComposers/ViewComposer.php | 48 +++++++++++++++++++ 14 files changed, 240 insertions(+) create mode 100644 resources/views/public/_composers/widgets/footer-widget.blade.php create mode 100644 resources/views/public/_composers/widgets/footers/1-col-links.blade.php create mode 100644 resources/views/public/_composers/widgets/footers/2-col-links.blade.php create mode 100644 resources/views/public/_composers/widgets/footers/4-col-links.blade.php create mode 100644 resources/views/public/_composers/widgets/footers/_links.blade.php create mode 100644 resources/views/public/footer-page.blade.php create mode 100644 src/Http/Controllers/Front/FootersController.php create mode 100644 src/Http/Routes/Front/FootersRoutes.php create mode 100644 src/Providers/ViewComposerServiceProvider.php create mode 100644 src/ViewComposers/Front/FooterWidgetComposer.php create mode 100644 src/ViewComposers/ViewComposer.php diff --git a/config/seo.php b/config/seo.php index 26dd20a..0f0f281 100644 --- a/config/seo.php +++ b/config/seo.php @@ -59,4 +59,20 @@ ], ], + /* ----------------------------------------------------------------- + | Widgets + | ----------------------------------------------------------------- + */ + 'widgets' => [ + 'footers' => [ + 'columns' => 2, // Supported: 1, 2, 4 + + 'route' => [ + 'as' => 'public::seo.footers.', + 'namespace' => 'Arcanesoft\\Seo\\Http\\Controllers\\Front', + 'middleware' => ['public'], + ], + ], + ], + ]; diff --git a/resources/views/public/_composers/widgets/footer-widget.blade.php b/resources/views/public/_composers/widgets/footer-widget.blade.php new file mode 100644 index 0000000..fd783d1 --- /dev/null +++ b/resources/views/public/_composers/widgets/footer-widget.blade.php @@ -0,0 +1,3 @@ +@php($columns = config('arcanesoft.seo.widgets.footers.columns', 1)) + +@include("seo::public._composers.widgets.footers.{$columns}-col-links") diff --git a/resources/views/public/_composers/widgets/footers/1-col-links.blade.php b/resources/views/public/_composers/widgets/footers/1-col-links.blade.php new file mode 100644 index 0000000..612d284 --- /dev/null +++ b/resources/views/public/_composers/widgets/footers/1-col-links.blade.php @@ -0,0 +1 @@ +@include('seo::public._composers.widgets.footers._links', ['items' => $seoFooters]) diff --git a/resources/views/public/_composers/widgets/footers/2-col-links.blade.php b/resources/views/public/_composers/widgets/footers/2-col-links.blade.php new file mode 100644 index 0000000..a1507eb --- /dev/null +++ b/resources/views/public/_composers/widgets/footers/2-col-links.blade.php @@ -0,0 +1,8 @@ +
+ @foreach($seoFooters->chunk(ceil($seoFooters->count() / 2)) as $items) +
+ @include('seo::public._composers.widgets.footers._links', ['items' => $items]) +
+ @endforeach +
+ diff --git a/resources/views/public/_composers/widgets/footers/4-col-links.blade.php b/resources/views/public/_composers/widgets/footers/4-col-links.blade.php new file mode 100644 index 0000000..cefd00c --- /dev/null +++ b/resources/views/public/_composers/widgets/footers/4-col-links.blade.php @@ -0,0 +1,8 @@ +
+ @foreach($seoFooters->chunk(ceil($seoFooters->count() / 4)) as $items) +
+ @include('seo::public._composers.widgets.footers._links', ['items' => $items]) +
+ @endforeach +
+ diff --git a/resources/views/public/_composers/widgets/footers/_links.blade.php b/resources/views/public/_composers/widgets/footers/_links.blade.php new file mode 100644 index 0000000..22d3e9c --- /dev/null +++ b/resources/views/public/_composers/widgets/footers/_links.blade.php @@ -0,0 +1,7 @@ + diff --git a/resources/views/public/footer-page.blade.php b/resources/views/public/footer-page.blade.php new file mode 100644 index 0000000..8b699cb --- /dev/null +++ b/resources/views/public/footer-page.blade.php @@ -0,0 +1,11 @@ +@extends('_templates.default.master') + +@section('page-title') + {{ $footer->seo->title }} +@endsection + +@section('content') +
+ {!! $footer->content !!} +
+@endsection diff --git a/src/Http/Controllers/Front/FootersController.php b/src/Http/Controllers/Front/FootersController.php new file mode 100644 index 0000000..77d8325 --- /dev/null +++ b/src/Http/Controllers/Front/FootersController.php @@ -0,0 +1,27 @@ + + */ +class FootersController extends Controller +{ + /* ----------------------------------------------------------------- + | Main Methods + | ----------------------------------------------------------------- + */ + public function show(Footer $footer) + { + $footer->load(['seo']); + + $this->setTitle($footer->seo->title); + $this->addBreadcrumb($footer->seo->title); + + return $this->view('seo::public.footer-page', compact('footer')); + } +} diff --git a/src/Http/Routes/Front/FootersRoutes.php b/src/Http/Routes/Front/FootersRoutes.php new file mode 100644 index 0000000..0636810 --- /dev/null +++ b/src/Http/Routes/Front/FootersRoutes.php @@ -0,0 +1,33 @@ + + */ +class FootersRoutes extends RouteRegistrar +{ + /* ----------------------------------------------------------------- + | Main Methods + | ----------------------------------------------------------------- + */ + /** + * Define the routes for the application. + */ + public function map() + { + $this->bind('seo_footer_uri', function ($uri) { + return Footer::where('uri', $uri) + ->where('locale', config('app.locale')) + ->firstOrFail(); + }); + + $this->group(config('arcanesoft.seo.widgets.footers.route', []), function () { + $this->get('{seo_footer_uri}.html', 'FootersController@show')->name('show'); + }); + } +} diff --git a/src/Providers/RouteServiceProvider.php b/src/Providers/RouteServiceProvider.php index 0296cb9..f8b2426 100644 --- a/src/Providers/RouteServiceProvider.php +++ b/src/Providers/RouteServiceProvider.php @@ -34,6 +34,8 @@ public function map() $this->adminGroup(function () { $this->mapAdminRoutes(); }); + + $this->mapPublicRoutes(); } /** @@ -53,4 +55,12 @@ private function mapAdminRoutes() Routes\Admin\SettingsRoutes::register(); }); } + + /** + * Map the public routes. + */ + private function mapPublicRoutes() + { + Routes\Front\FootersRoutes::register(); + } } diff --git a/src/Providers/ViewComposerServiceProvider.php b/src/Providers/ViewComposerServiceProvider.php new file mode 100644 index 0000000..a2ca788 --- /dev/null +++ b/src/Providers/ViewComposerServiceProvider.php @@ -0,0 +1,31 @@ + + */ +class ViewComposerServiceProvider extends ServiceProvider +{ + /* ------------------------------------------------------------------------------------------------ + | Properties + | ------------------------------------------------------------------------------------------------ + */ + /** + * Register the composer classes. + * + * @var array + */ + protected $composerClasses = [ + // Dashboard view composers + + + // Public view composers (Widgets) + FooterWidgetComposer::VIEW => FooterWidgetComposer::class, + ]; +} diff --git a/src/SeoServiceProvider.php b/src/SeoServiceProvider.php index 5a8e476..b943452 100644 --- a/src/SeoServiceProvider.php +++ b/src/SeoServiceProvider.php @@ -45,6 +45,7 @@ public function boot() parent::boot(); $this->registerProvider(Providers\RouteServiceProvider::class); + $this->registerProvider(Providers\ViewComposerServiceProvider::class); // Publishes $this->publishConfig(); diff --git a/src/ViewComposers/Front/FooterWidgetComposer.php b/src/ViewComposers/Front/FooterWidgetComposer.php new file mode 100644 index 0000000..7c3295e --- /dev/null +++ b/src/ViewComposers/Front/FooterWidgetComposer.php @@ -0,0 +1,36 @@ + + */ +class FooterWidgetComposer extends ViewComposer +{ + /* ----------------------------------------------------------------- + | Constants + | ----------------------------------------------------------------- + */ + const VIEW = 'seo::public._composers.widgets.footer-widget'; + + /* ----------------------------------------------------------------- + | Main Methods + | ----------------------------------------------------------------- + */ + /** + * Compose the view. + * + * @param \Illuminate\Contracts\View\View $view + */ + public function compose(View $view) + { + $this->view = $view; + + $this->view->with('seoFooters', Footer::all()); + } +} diff --git a/src/ViewComposers/ViewComposer.php b/src/ViewComposers/ViewComposer.php new file mode 100644 index 0000000..64cad2b --- /dev/null +++ b/src/ViewComposers/ViewComposer.php @@ -0,0 +1,48 @@ + + */ +class ViewComposer +{ + /* ------------------------------------------------------------------------------------------------ + | Properties + | ------------------------------------------------------------------------------------------------ + */ + /** + * The View instance. + * + * @var \Illuminate\Contracts\View\View + */ + protected $view; + + /** + * Caching time. + * + * @var int + */ + protected $minutes = 5; + + /* ------------------------------------------------------------------------------------------------ + | Other Functions + | ------------------------------------------------------------------------------------------------ + */ + /** + * Cache the results. + * + * @param string $name + * @param \Closure $callback + * + * @return mixed + */ + protected function cacheResults($name, Closure $callback) + { + return Cache::remember('cache::' . $name, $this->minutes, $callback); + } +}