Files
core/app/Providers/GlobalViewDataProvider.php
T
Michal Kváček 37a698b631 FEATURE #1427: add homepage functionality.
Displaying homepage now depends on module handler
2016-02-17 13:24:16 +01:00

74 lines
1.9 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.');
// extend Blade "@extends" macro - with this macro allows to use "hierarchy" in templates
Blade::extend(function ($view) {
$pattern = $this->createPattern('extendVisitor');
$code = '@extends(\App\Helpers\Template::name($2))';
return preg_replace($pattern, $code, $view);
});
// 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()
{
//
}
}