Files
core/app/Helpers/WidgetAreas.php
T

44 lines
1.0 KiB
PHP

<?php
namespace App\Helpers;
use App\Models\WidgetArea;
class WidgetAreas
{
/**
* @var array list of inicialized widget areas
*/
protected static $widgetAreas = [];
/**
* Renderer for whole widget area.
*
* @param $uniqueCode
*
* @return mixed
*/
public static function render($uniqueCode)
{
if (isset(self::$widgetAreas[$uniqueCode])) {
echo self::$widgetAreas[$uniqueCode];
return;
}
$widgetArea = new WidgetArea();
$widgets = $widgetArea->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));
}
// cache this widget area
self::$widgetAreas[$uniqueCode] = $content;
echo $content;
}
}