route('template.setHomepage', trans('template::admin/mainMenu.setHomepage'), [], 1, ['icon' => 'fa fa-fw fa-home']); } /** * Getter for pages displayed on homepage * * @return array */ public static function getPagesOnHomepage() { if (!self::$homepagePagesInitialized) { $pageIds = (array)json_decode(Settings::get(self::HOMEPAGE_PAGES_SETTINGS_KEY, '[]')); if (empty($pageIds)) { return []; } // get all available pages $pages = Content::whereIn('id', $pageIds); if (Auth::user()) { $pages = $pages->where('status', '!=', IContent::STATUS_DRAFT); } else { $pages = $pages->where('status', IContent::STATUS_PUBLIC); } $homepagePages = $pages->get() ->getDictionary(); foreach ($pageIds as $pageId) { if (!isset($homepagePages[$pageId])) { continue; } self::$homepagePages[] = $homepagePages[$pageId]; } self::$homepagePagesInitialized = true; } return self::$homepagePages; } /** * Prepare Content object to be rendered using Blade template * * @param Content $content * * @return array */ public static function beforeRender(Content & $content) { if ($content->is_homepage) { $pages = self::getPagesOnHomepage(); // create real content from pages $pagesRaw = $pagesInTemplates = []; foreach ($pages as $page) { // save pages as models only $pagesRaw[$page->url] = $page; // save rendered pages try { $pagesInTemplates[$page->url] = PageRenderer::render($page) ->render(); } catch (\Exception $e) { if (Auth::user()) { $pagesInTemplates[$page->url] = view(Template::name('errors.cannotRender'), ['page' => $page])->render(); } } } // return pages into template return ['pagesHtml' => $pagesInTemplates, 'pagesRaw' => $pagesRaw]; } return []; } /** * Install module */ public static function install() { // register action log types $types = [ [ 'string_id' => 'pageRemovedFromHomepage', 'name' => 'template::admin/setHomepage.events.names.removedPage', 'value' => 'template::admin/setHomepage.events.descriptions.removedPage', ], [ 'string_id' => 'pageAddedIntoHomepage', 'name' => 'template::admin/setHomepage.events.names.addedPage', 'value' => 'template::admin/setHomepage.events.descriptions.addedPage', ], ]; foreach ($types as $type) { ActionLogType::create($type); } // try to create onepage menu widget $widgetName = OnePageMenu::getName(); $widgetDescription = OnePageMenu::getDescription(); CurrentTemplate::reset(); // create row in widget types WidgetType::create([ 'handler' => OnePageMenu::class, 'name' => $widgetName, 'module_id' => null, 'template_id' => CurrentTemplate::get()->id, 'description' => $widgetDescription ]); $area = WidgetArea::create(['name' => 'Top menu', 'code' => 'topMenu', 'deletable' => 0]); $widget = Widget::create([ 'widget_type_handler' => OnePageMenu::class, 'name' => 'Menu', 'settings' => '{"containerClass": null}', 'deletable' => 0 ]); // bind widget with widget area WidgetInWidgetArea::create(['widget_id' => $widget->id, 'widget_area_id' => $area->id, 'position' => 1]); } /** * Uninstall template * * @param Module $template */ public static function uninstall(Module $template) { // delete action log types ActionLogType::whereIn('string_id', ['pageRemovedFromHomepage', 'pageAddedIntoHomepage']) ->delete(); // delete settings with pages on homepage SettingsModel::where('key', self::HOMEPAGE_PAGES_SETTINGS_KEY) ->delete(); } }