From 81a0fc83b9575af73feac93507358afc9b25a79f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Kv=C3=A1=C4=8Dek?= Date: Mon, 15 Feb 2016 12:21:29 +0100 Subject: [PATCH] FEATURE: add widget and widget area preview into Blade template --- app/Helpers/WidgetAreas.php | 24 +++++++++++++++ app/Providers/GlobalViewDataProvider.php | 39 ++++++++++++++++++++++++ 2 files changed, 63 insertions(+) create mode 100644 app/Helpers/WidgetAreas.php diff --git a/app/Helpers/WidgetAreas.php b/app/Helpers/WidgetAreas.php new file mode 100644 index 00000000..cf52fe70 --- /dev/null +++ b/app/Helpers/WidgetAreas.php @@ -0,0 +1,24 @@ +getWidgets($uniqueCode)->get(); + + $content = ''; + foreach ($widgets as $widget) { + $handler = $widget->widget_type_handler; + $presenter = call_user_func([$handler, 'getPresenter']); + + $content .= call_user_func([$presenter, 'render'], json_decode($widget->settings)); + } + + echo $content; + } +} \ No newline at end of file diff --git a/app/Providers/GlobalViewDataProvider.php b/app/Providers/GlobalViewDataProvider.php index bd3828df..9eb03876 100644 --- a/app/Providers/GlobalViewDataProvider.php +++ b/app/Providers/GlobalViewDataProvider.php @@ -2,6 +2,7 @@ namespace App\Providers; +use Illuminate\Support\Facades\Blade; use Illuminate\Support\ServiceProvider; class GlobalViewDataProvider extends ServiceProvider @@ -14,6 +15,44 @@ class GlobalViewDataProvider extends ServiceProvider public function boot() { view()->share('vendorName', 'ja s.r.o.'); + + // register extension for rendering widget areas + Blade::extend(function ($view) { + $pattern = $this->createPattern('widgetArea'); + + return preg_replace($pattern, '', $view); + }); + + // register extension for preview of widget + Blade::extend(function ($view) { + $pattern = $this->createPattern('widgetPreview'); + $code = ' + widget_type_handler; + $presenter = call_user_func([$handler, "getPresenter"]); + + echo call_user_func([$presenter, "render"], json_decode($2->settings)); + } + ?> + '; + + + return preg_replace($pattern, $code, $view); + }); + + + } + + /** + * Creates pattern for matching Blade directives + * + * @param $function + * + * @return string + */ + private function createPattern($function){ + return '/(?