From 09151e97d187dfda7f0d50d252005fc04fc2b0a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Kv=C3=A1=C4=8Dek?= Date: Sun, 25 Sep 2016 01:35:03 +0200 Subject: [PATCH] FEATURE: prepare widget for displaying menu on onepage templates --- templates/Base/OnePage/Handlers/OnePage.php | 44 ++++++++----- .../OnePage/Providers/OnePageTemplate.php | 43 +++++++++--- .../OnePage/Resources/lang/en/widget/menu.php | 12 ++++ .../admin/widgets/onePageMenu/edit.blade.php | 15 +++++ .../admin/widgets/onePageMenu/form.blade.php | 27 ++++++++ .../admin/widgets/onePageMenu/new.blade.php | 9 +++ .../Widgets/OnePageMenu/OnePageMenu.php | 55 ++++++++++++++++ .../OnePage/Widgets/OnePageMenu/Presenter.php | 65 +++++++++++++++++++ 8 files changed, 246 insertions(+), 24 deletions(-) create mode 100644 templates/Base/OnePage/Resources/lang/en/widget/menu.php create mode 100644 templates/Base/OnePage/Resources/views/admin/widgets/onePageMenu/edit.blade.php create mode 100644 templates/Base/OnePage/Resources/views/admin/widgets/onePageMenu/form.blade.php create mode 100644 templates/Base/OnePage/Resources/views/admin/widgets/onePageMenu/new.blade.php create mode 100644 templates/Base/OnePage/Widgets/OnePageMenu/OnePageMenu.php create mode 100644 templates/Base/OnePage/Widgets/OnePageMenu/Presenter.php diff --git a/templates/Base/OnePage/Handlers/OnePage.php b/templates/Base/OnePage/Handlers/OnePage.php index db912392..1a0e1264 100644 --- a/templates/Base/OnePage/Handlers/OnePage.php +++ b/templates/Base/OnePage/Handlers/OnePage.php @@ -32,30 +32,42 @@ abstract class OnePage implements TemplateHandler $menu->route('template.setHomepage', trans('template::admin/mainMenu.setHomepage'), [], 1, ['icon' => 'fa fa-fw fa-home']); } + /** + * Getter for pages displayed on homepage + * + * @return array + */ + public static function getPagesOnHomepage() + { + $pageIds = (array)json_decode(Settings::get(self::HOMEPAGE_PAGES_SETTINGS_KEY, '[]')); + + if (empty($pageIds)) { + return []; + } + + // get all available pages + $pages = Content::whereIn('id', $pageIds); + + if (Auth::user()) { + $pages = $pages->where('status', '!=', Content::STATUS_DRAFT); + } else { + $pages = $pages->where('status', Content::STATUS_PUBLIC); + } + + return $pages->get(); + } + /** * Prepare Content object to be rendered using Blade template * * @param Content $content + * + * @return array */ public static function beforeRender(Content & $content) { if ($content->is_homepage) { - $pageIds = (array)json_decode(Settings::get(self::HOMEPAGE_PAGES_SETTINGS_KEY, '[]')); - - if (empty($pageIds)) { - return []; - } - - // get all available pages - $pages = Content::whereIn('id', $pageIds); - - if (Auth::user()) { - $pages = $pages->where('status', '!=', Content::STATUS_DRAFT); - } else { - $pages = $pages->where('status', Content::STATUS_PUBLIC); - } - - $pages = $pages->get(); + $pages = self::getPagesOnHomepage(); // create real content from pages $pagesRaw = $pagesInTemplates = []; diff --git a/templates/Base/OnePage/Providers/OnePageTemplate.php b/templates/Base/OnePage/Providers/OnePageTemplate.php index 642466d1..6516fa52 100644 --- a/templates/Base/OnePage/Providers/OnePageTemplate.php +++ b/templates/Base/OnePage/Providers/OnePageTemplate.php @@ -2,6 +2,7 @@ namespace Templates\Base\OnePage\Providers; use Illuminate\Support\ServiceProvider; +use Templates\Base\OnePage\Widgets\OnePageMenu\OnePageMenu; class OnePageTemplate extends ServiceProvider { @@ -11,20 +12,46 @@ class OnePageTemplate extends ServiceProvider * @return void */ public function register() - { + { $this->registerTranslations(); } public function boot() { - // register translations - $this->loadTranslationsFrom(__DIR__ . '/../Resources/lang', 'template'); - - // load views - $this->loadViewsFrom(array_merge(array_map(function ($path) { - return $path; - }, \Config::get('view.paths')), [__DIR__ . '/../Resources/views']), 'template'); + $this->registerViews(); + $this->registerWidgets(); // register event service provider for this template $this->app->register(EventProvider::class); } + + /** + * Register translations used in this base template + */ + private function registerTranslations() + { + // register translations + $this->loadTranslationsFrom(__DIR__ . '/../Resources/lang', 'template'); + } + + /** + * Register views used in this template - both visitor's and admin's + */ + private function registerViews() + { + // load views + $this->loadViewsFrom(array_merge(array_map(function ($path) { + return $path; + }, \Config::get('view.paths')), [__DIR__ . '/../Resources/views']), 'template'); + } + + /** + * Register all widgets related to this template + */ + private function registerWidgets() + { + $registrator = $this->app->make('registerWidget'); + + // register all available widgets + $registrator->register(OnePageMenu::class); + } } \ No newline at end of file diff --git a/templates/Base/OnePage/Resources/lang/en/widget/menu.php b/templates/Base/OnePage/Resources/lang/en/widget/menu.php new file mode 100644 index 00000000..04a5c5c8 --- /dev/null +++ b/templates/Base/OnePage/Resources/lang/en/widget/menu.php @@ -0,0 +1,12 @@ + 'One page menu', + 'description' => 'Simple menu used for one page templates. This menu navigates using nachor links on page. Links are generated automatically using list of pages on homepage.', + 'new' => 'Create new menu', + 'form' => [ + 'name' => 'Menu name', + 'description' => 'Description', + 'containerClass' => 'HTML class for container element', + 'save' => 'Save', + ] +]; \ No newline at end of file diff --git a/templates/Base/OnePage/Resources/views/admin/widgets/onePageMenu/edit.blade.php b/templates/Base/OnePage/Resources/views/admin/widgets/onePageMenu/edit.blade.php new file mode 100644 index 00000000..e91e4a74 --- /dev/null +++ b/templates/Base/OnePage/Resources/views/admin/widgets/onePageMenu/edit.blade.php @@ -0,0 +1,15 @@ +@extends('admin.layoutWithNavigation') + +@section('pageHeading', @trans('widgets/htmlCode.edit', ['name' => $widget->name])) + +@section('content') +
+ @include('admin.widgets.htmlCode.form', ['action' => route('widgets.postEdit', ['id' => $widget->id])]) +
+
+

@lang('widgets/htmlCode.preview')

+ + @widgetPreview($widget) +
+@stop + diff --git a/templates/Base/OnePage/Resources/views/admin/widgets/onePageMenu/form.blade.php b/templates/Base/OnePage/Resources/views/admin/widgets/onePageMenu/form.blade.php new file mode 100644 index 00000000..94d02c07 --- /dev/null +++ b/templates/Base/OnePage/Resources/views/admin/widgets/onePageMenu/form.blade.php @@ -0,0 +1,27 @@ +
+ {!! csrf_field() !!} + + + + + + + + + + + + + +
\ No newline at end of file diff --git a/templates/Base/OnePage/Resources/views/admin/widgets/onePageMenu/new.blade.php b/templates/Base/OnePage/Resources/views/admin/widgets/onePageMenu/new.blade.php new file mode 100644 index 00000000..426b2db2 --- /dev/null +++ b/templates/Base/OnePage/Resources/views/admin/widgets/onePageMenu/new.blade.php @@ -0,0 +1,9 @@ +@extends('admin.layoutWithNavigation') + +@section('pageHeading', @trans('template::widget/menu.new')) +@section('pageDescription', @trans($type->description)) + +@section('content') + @include('template::admin.widgets.onePageMenu.form', ['action' => route('widgets.postNew', ['type' => $type->id])]) +@stop + diff --git a/templates/Base/OnePage/Widgets/OnePageMenu/OnePageMenu.php b/templates/Base/OnePage/Widgets/OnePageMenu/OnePageMenu.php new file mode 100644 index 00000000..724f9871 --- /dev/null +++ b/templates/Base/OnePage/Widgets/OnePageMenu/OnePageMenu.php @@ -0,0 +1,55 @@ + isset($data->containerClass) ? $data->containerClass : '']; + + $widget->settings = json_encode($widgetSettings); + + return $widget; + } +} diff --git a/templates/Base/OnePage/Widgets/OnePageMenu/Presenter.php b/templates/Base/OnePage/Widgets/OnePageMenu/Presenter.php new file mode 100644 index 00000000..da128fa7 --- /dev/null +++ b/templates/Base/OnePage/Widgets/OnePageMenu/Presenter.php @@ -0,0 +1,65 @@ + $pages])->render(); + } + + /** + * Display form for creating new instance of widget + * + * @param WidgetType $type + * + * @return mixed + */ + public static function renderAddForm(WidgetType $type) + { + return view('template::admin.widgets.onePageMenu.new', [ + 'type' => $type, + 'widget' => new Widget(), + 'settings' => new \stdClass() + ]); + } + + /** + * Display form for editing already existing widget + * + * @param Widget $widget + * + * @return mixed + */ + public static function renderEditForm(Widget $widget) + { + $settings = json_decode($widget->settings); + return view('template::admin.widgets.onePageMenu.edit', ['widget' => $widget, 'settings' => $settings]); + } +} \ No newline at end of file