settings = json_decode($widget->settings); $handler = $widget->widget_type_handler; $presenter = call_user_func([$handler, 'getPresenter']); return call_user_func([$presenter, 'render'], $widget); } protected function loadWidget($containerId) { $widget = WidgetModel::where('container_id', $containerId) ->first(); if (!$widget) { return; } $widget->timestamps = false; $widget->viewed++; $widget->save(); $widget->timestamps = true; self::$widgets[$containerId] = $this->getRenderedWidget($widget); } protected function initWidgets() { if (self::$initialized) { return; } $widgets = WidgetModel::where('viewed', '>=', setting('preloadFrequentedWidgetsTreshold', 10)) ->where('language', LaravelLocalization::getCurrentLocale()) ->get(); foreach ($widgets as $widget) { self::$widgets[$widget->container_id] = $this->getRenderedWidget($widget); } self::$initialized = true; } public function register($shortcode, $containerId, $compiler, $name) { $this->initWidgets(); if (!isset(self::$widgets[$containerId])) { $this->loadWidget($containerId); } return self::$widgets[$containerId]; } }