예제 #1
0
 /**
  * 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;
 }
예제 #2
0
 /**
  *
  * 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();
                 }
             }
         }
     }
 }