예제 #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
 /**
  * Save widget
  *
  * @param $sidebar
  * @param integer $ordering
  * @param integer $id
  * @param mixed $newInstance
  * @param string $themeName
  * @return bool
  */
 public final function save($sidebar, $ordering = null, $id = null, $newInstance = null, $themeName = null)
 {
     $ordering = intval($ordering);
     if ($this->validation) {
         if (!$themeName) {
             /**
              * @var CoreTemplates $CoreTemplates
              */
             $CoreTemplates = CoreTemplates::findFirst("location = 'frontend' AND published = 1");
             $themeName = $CoreTemplates->base_name;
         }
         /**
          * @var CoreWidgetValues $CoreWidgetValues
          */
         if ((int) $id) {
             $CoreWidgetValues = CoreWidgetValues::findFirst($id);
         } else {
             $CoreWidgetValues = new CoreWidgetValues();
         }
         $CoreWidgetValues->reOder('sidebar_base_name = ?0', [0 => $sidebar]);
         $queryUp = "UPDATE core_widget_values SET ordering = ordering + 1 WHERE ordering >= {$ordering} AND theme_name = '{$themeName}' AND sidebar_base_name = '{$sidebar}'";
         $queryDown = "UPDATE core_widget_values SET ordering = ordering - 1 WHERE ordering < {$ordering} AND theme_name = '{$themeName}' AND sidebar_base_name = '{$sidebar}'";
         $this->db->execute($queryDown);
         $this->db->execute($queryUp);
         $CoreWidgetValues->sidebar_base_name = $sidebar;
         $CoreWidgetValues->theme_name = $themeName;
         $CoreWidgetValues->class_name = $this->_widget_name . '_Widget';
         $CoreWidgetValues->options = $this->_processOptions($id, $newInstance);
         $CoreWidgetValues->published = 1;
         $CoreWidgetValues->ordering = $ordering;
         $CoreWidgetValues->title = $this->_title;
         if ($CoreWidgetValues->save()) {
             //Do something
         } else {
             //Do something
         }
         $this->_id = $CoreWidgetValues->widget_value_id;
         $CoreWidgetValues->reOder('sidebar_base_name = ?0', [0 => $sidebar]);
         return true;
     }
     return false;
 }
예제 #3
0
 /**
  * Update widget order
  *
  * @return PResponse
  * @throws Exception
  */
 public function updateWidgetOrderAction()
 {
     $response = new PResponse();
     $content = '';
     $response->setHeader("Content-Type", "application/json");
     if ($this->request->isAjax()) {
         $widget_id = $this->request->getPost('widget_id', 'int');
         $newIndex = $this->request->getPost('index', 'int');
         $sidebar = str_replace(' ', '', $this->request->getPost('sidebar_name', ['string', 'striptags']));
         if ($widget_id && $newIndex && $sidebar) {
             /**
              * @var CoreWidgetValues $widget
              */
             $widget = CoreWidgetValues::findFirst($widget_id);
             /**
              * @var CoreSidebars $CoreSidebars
              */
             $CoreSidebars = CoreSidebars::findFirst(['conditions' => 'sidebar_base_name = ?1', 'bind' => [1 => $sidebar]]);
             if ($widget && $CoreSidebars) {
                 /**
                  * @var CoreTemplates $defaultFrontendTemplate
                  */
                 $defaultFrontendTemplate = CoreTemplates::findFirst("location = 'frontend' AND published = 1");
                 $themeName = $defaultFrontendTemplate->base_name;
                 $widget->reOder('sidebar_base_name = ?1', [1 => $CoreSidebars->sidebar_base_name]);
                 $widget->reOder('sidebar_base_name = ?1', [1 => $widget->sidebar_base_name]);
                 if ($widget->ordering > $newIndex) {
                     $queryUp = "UPDATE core_widget_values SET ordering = ordering + 1 WHERE ordering >= {$newIndex} AND theme_name = '{$themeName}' AND sidebar_base_name = '{$sidebar}'";
                     $queryDown = "UPDATE core_widget_values SET ordering = ordering - 1 WHERE ordering < {$newIndex} AND theme_name = '{$themeName}' AND sidebar_base_name = '{$sidebar}'";
                 } elseif ($widget->ordering < $newIndex) {
                     $queryUp = "UPDATE core_widget_values SET ordering = ordering + 1 WHERE ordering > {$newIndex} AND theme_name = '{$themeName}' AND sidebar_base_name = '{$sidebar}'";
                     $queryDown = "UPDATE core_widget_values SET ordering = ordering - 1 WHERE ordering <= {$newIndex} AND theme_name = '{$themeName}' AND sidebar_base_name = '{$sidebar}'";
                 }
                 if (isset($queryUp) && isset($queryDown)) {
                     $this->db->execute($queryUp);
                     $this->db->execute($queryDown);
                 }
                 $widget->ordering = $newIndex;
                 $widget->sidebar_base_name = $CoreSidebars->sidebar_base_name;
                 if ($widget->save()) {
                     $content = '1';
                     $widget->reOder('sidebar_base_name = ?1', [1 => $sidebar]);
                     $widget->reOder('sidebar_base_name = ?1', [1 => $CoreSidebars->sidebar_base_name]);
                 } else {
                     //Do something
                 }
             }
         }
     }
     $response->setJsonContent($content);
     return $response;
 }