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/admin/setHomepage.php b/templates/Base/OnePage/Resources/lang/en/admin/setHomepage.php index 9b3038ae..1609b533 100644 --- a/templates/Base/OnePage/Resources/lang/en/admin/setHomepage.php +++ b/templates/Base/OnePage/Resources/lang/en/admin/setHomepage.php @@ -11,6 +11,7 @@ return [ 'notUsedPages' => 'Not used pages', 'reallyRemovePage' => 'Do you really want to remove this page from homepage?', 'cannotSetHomepageAsPartOfHomepage' => 'Cannot set currently set homepage as one of homepage pages.', + 'noHomepageSet' => 'No homepage set, following settings will not take effect!', 'addToHomepage' => 'Add page into homepage', 'events' => [ 'names' => [ 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/homepage/set.blade.php b/templates/Base/OnePage/Resources/views/admin/homepage/set.blade.php index 7ddc086f..74078006 100644 --- a/templates/Base/OnePage/Resources/views/admin/homepage/set.blade.php +++ b/templates/Base/OnePage/Resources/views/admin/homepage/set.blade.php @@ -11,14 +11,17 @@ Improvement: http://www.html5rocks.com/en/tutorials/dnd/basics/
- - @include('admin.snippets.card', [ - 'type' => 'primary', - 'title' => $homepage->title.' '.trans($homepage->module_name).'', - 'body' => '

'.str_limit(strip_tags($homepage->content), 200).'

', - 'footerClass' => 'text-right', - 'footer' => '' - ]) + @if(isset($homepage)) + @include('admin.snippets.card', [ + 'type' => 'primary', + 'title' => $homepage->title.' '.trans($homepage->module_name).'', + 'body' => '

'.str_limit(strip_tags($homepage->content), 200).'

', + 'footerClass' => 'text-right', + 'footer' => '' + ]) + @else +
@lang('template::admin/setHomepage.noHomepageSet')
+ @endif

@lang('template::admin/setHomepage.usedPages')

@@ -51,7 +54,9 @@ Improvement: http://www.html5rocks.com/en/tutorials/dnd/basics/
-

{{$page->title}} @lang($page->module_name)

+

{{$page->title}} + @lang($page->module_name) +

@@ -61,7 +66,7 @@ Improvement: http://www.html5rocks.com/en/tutorials/dnd/basics/ - @if(!$page->is_homepage) + @if(!$page->is_homepage) @@ -69,7 +74,9 @@ Improvement: http://www.html5rocks.com/en/tutorials/dnd/basics/ @endif + class="btn btn-sm btn-primary" data-toggle="tooltip" + title="@lang('template::admin/setHomepage.addToHomepage')">
@empty 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