FEATURE: add widget and widget area preview into Blade template

This commit is contained in:
Michal Kváček
2016-02-15 12:26:12 +01:00
parent c1e65d5651
commit 81a0fc83b9
2 changed files with 63 additions and 0 deletions
+39
View File
@@ -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, '<?php \App\Helpers\WidgetAreas::render($2); ?>', $view);
});
// register extension for preview of widget
Blade::extend(function ($view) {
$pattern = $this->createPattern('widgetPreview');
$code = '
<?php
if ($2 instanceof \App\Models\Widget) {
$handler = $2->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 '/(?<!\w)(\s*)@'.$function.'\(\s*(.*)\)/';
}
/**