/** * Get sidebar * * @param string $sidebar_base_name * @return string */ public static function getSidebar($sidebar_base_name) { /** * @var ZCache $cache */ $cache = PDI::getDefault()->get('cache'); $sidebarKey = self::CACHE_KEY . $sidebar_base_name; $html = ''; $defaultTemplate = PDI::getDefault()->get('config')->frontendTemplate->defaultTemplate; $widgets = $cache->get($sidebarKey); if ($widgets === null) { $widgets = CoreWidgetValues::find(['conditions' => 'sidebar_base_name = ?1 AND theme_name = ?2', 'bind' => [1 => $sidebar_base_name, 2 => $defaultTemplate], 'order' => 'ordering ASC'])->toArray(); $cache->save($sidebarKey, $widgets); } if (count($widgets) > 0) { //Get widget html foreach ($widgets as $widget) { $class_name = explode('_', $widget['class_name'])[0]; if (!class_exists($widget['class_name'])) { $widget_file = APP_DIR . '/widgets/frontend/' . $class_name . '/' . $class_name . '.php'; if (file_exists($widget_file)) { require_once $widget_file; } } if (class_exists($widget['class_name'])) { /** * @var \ZCMS\Core\ZWidget $ob */ $ob = new $widget['class_name']($widget['widget_value_id']); if (method_exists($ob, 'widget')) { $html .= $ob->getWidget(); } } } } return $html; }
/** * * Update sidebar template * * @param string $defaultTemplate */ public function updateSidebarTemplate($defaultTemplate) { //global $_sidebar; $pathTemplate = APP_DIR . '/templates/frontend/' . $defaultTemplate . '/template.json'; if ($resource = check_template($pathTemplate)) { $_sidebars = $resource['sidebars']; if (count($_sidebars)) { /** * @var CoreSidebars[] $allSidebar */ $allSidebar = CoreSidebars::find(['conditions' => 'theme_name = ?1', 'bind' => [1 => $defaultTemplate]]); $sidebarBaseNames = array_column($_sidebars, 'baseName'); //Remove old sidebar in current templates foreach ($allSidebar as $oldSidebar) { if (!in_array($oldSidebar->sidebar_base_name, $sidebarBaseNames)) { /** * @var CoreWidgetValues[] $oldWidgetsValueInSidebar */ $oldWidgetsValueInSidebar = CoreWidgetValues::find(['conditions' => 'theme_name = ?0 AND sidebar_base_name = ?1', 'bind' => [$defaultTemplate, $oldSidebar->sidebar_base_name]]); foreach ($oldWidgetsValueInSidebar as $oldWidgetValueInSidebar) { $oldWidgetValueInSidebar->delete(); } $oldSidebar->delete(); } } foreach ($_sidebars as $s) { $CoreSidebars = CoreSidebars::findFirst(['conditions' => 'sidebar_base_name = ?1 AND theme_name = ?2', 'bind' => [1 => $s['baseName'], 2 => $defaultTemplate]]); if (is_object($CoreSidebars) && isset($CoreSidebars->sidebar_base_name)) { $CoreSidebars->sidebar_base_name = $s['baseName']; $CoreSidebars->save(); } else { $CoreSidebars = new CoreSidebars(); $CoreSidebars->sidebar_base_name = $s['baseName']; $CoreSidebars->theme_name = $defaultTemplate; $CoreSidebars->sidebar_name = $s['name']; $CoreSidebars->ordering = 0; $CoreSidebars->published = 1; $CoreSidebars->location = 'frontend'; $CoreSidebars->save(); } } } } }