Files
core/app/Providers/GlobalViewDataProvider.php
T

68 lines
1.5 KiB
PHP

<?php
namespace App\Providers;
use Illuminate\Support\Facades\Blade;
use Illuminate\Support\ServiceProvider;
class GlobalViewDataProvider extends ServiceProvider
{
/**
* Bootstrap the application services.
*
* @return void
*/
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*(.*)\)/';
}
/**
* Register the application services.
*
* @return void
*/
public function register()
{
//
}
}