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 '/(?