Example #1
0
 public function run()
 {
     if ($this->place === null) {
         throw new ErrorException("Не задано место блока (BlockWidget).");
     }
     $modules = null;
     if (Yii::app()->controller->idSiteModuleTemplate == null) {
         // если у контроллера не установлен свой набор виджетов
         if (Yii::app()->menu->current != null) {
             // иначе берем набор модулей меню
             $modules = Yii::app()->menu->current->getModulesByPlace($this->place);
         } else {
             // иначе пытаемся найти набор по умолчанию
             Yii::app()->controller->idSiteModuleTemplate = SiteModuleTemplate::getIdDefaultTemplate();
         }
     }
     if ($modules === null && Yii::app()->controller->idSiteModuleTemplate != null) {
         if (self::$_modules == null) {
             self::$_modules = SiteModule::model()->with(array('place' => array('condition' => 'place.id_module_template=:id_template', 'params' => array('id_template' => Yii::app()->controller->idSiteModuleTemplate)), 'phpScriptInstance.phpScript'))->findAll();
         }
         $modules = array();
         foreach (self::$_modules as $module) {
             if ($module->place->place == $this->place) {
                 $modules[] = $module;
             }
         }
     } else {
         if ($modules === null) {
             return;
         }
     }
     foreach ($modules as $module) {
         if ($module->id_php_script != null) {
             // динамический модуль
             // формируем массив с параметрами
             $params = array();
             $moduleParams = $module->phpScriptInstance->phpScript->getParametersConfig();
             foreach ($moduleParams as $paramName => $config) {
                 $params[$paramName] = $module->phpScriptInstance->getParameterValue($paramName);
             }
             $className = $module->phpScriptInstance->phpScript->import();
             $this->controller->widget($className, $params);
         } else {
             // статика
             echo $module->content;
             echo $module->html;
         }
     }
 }
Example #2
0
 /**
  * Устанавливает текущий раздел
  * @param string $route - Роут
  * @param array $actionParams - Параметры, переданные действию 
  * @return boolean
  */
 public function setCurrent($route, $actionParams, $urlAlias = null)
 {
     $current = null;
     //Если статическая страница
     if (is_array($actionParams) && !isset($actionParams[MenuModule::ROUTE_STATIC_MENU_PARAM]) && $urlAlias == null) {
         $idMenu = Yii::app()->domain->model->id_default_page;
         $current = $this->getAll()->getById($idMenu);
         if ($route != MenuModule::ROUTE_STATIC_MENU && Yii::app()->request->url != '/') {
             // не главная страница. Текущий контроллер не связан с каким-либо разделом.
             // Даем ему все свойства главной страницы, а набор виджетов присваеваем набору по умолчанию
             $current->id_module_template = SiteModuleTemplate::getIdDefaultTemplate();
         }
     } else {
         if ($urlAlias != null || isset($actionParams[MenuModule::ROUTE_STATIC_MENU_PARAM])) {
             $alias = $urlAlias;
             if ($alias == null) {
                 $aliases = explode(Menu::SEPARATOR, $actionParams[MenuModule::ROUTE_STATIC_MENU_PARAM]);
                 $alias = array_pop($aliases);
             }
             $current = $this->getAll()->getByAlias($alias);
         } else {
             if ($route == MenuModule::ROUTE_STATIC_MENU && isset($actionParams[MenuModule::ROUTE_STATIC_MENU_PARAM])) {
                 $aliases = explode(Menu::SEPARATOR, $actionParams[MenuModule::ROUTE_STATIC_MENU_PARAM]);
                 $alias = array_pop($aliases);
                 $current = $this->getAll()->getByAlias($alias);
             } else {
                 //Если динамическая
                 $posLastSlash = mb_strrpos($route, '/');
                 $controller = mb_substr($route, 0, $posLastSlash);
                 $action = mb_substr($route, $posLastSlash + 1);
                 $current = $this->getAll()->getByRoute($controller, $action);
             }
         }
     }
     $this->_current = $current;
     return $current !== null;
 }
Example #3
0
 public function deleteMenu($idMenu, $data, $idModuleTemplateKey = null)
 {
     /**
      * @var $menu Menu
      */
     $menu = Menu::model()->findByPk($idMenu);
     if ($menu != null) {
         if ($idModuleTemplateKey != null) {
             if ($menu->id_module_template == SiteModuleTemplate::getIdDefaultTemplate() && isset($data[$idModuleTemplateKey])) {
                 unset($data[$idModuleTemplateKey]);
             } else {
                 $data[$idModuleTemplateKey] = $menu->id_module_template;
             }
         }
         $menu->removable = true;
         $menu->update(array('removable'));
         $menu->delete();
     }
     return $data;
 }
Example #4
0
 /**
  * Получить все модули раздела
  * @return array SiteModule
  */
 public function getModules($idTemplate = null)
 {
     if ($this->_modules !== null) {
         return $this->_modules;
     }
     $this->_modules = array();
     $idTemplate = $idTemplate != null ? $idTemplate : $this->id_module_template;
     if ($idTemplate == null) {
         // Если модулей нет, то устанавливаем родительские модули
         $parent = $this->getParent();
         if ($parent != null) {
             $this->_modules = $parent->getModules();
             return $this->_modules;
         } else {
             // получаем дефолтный шаблон модулей
             $idTemplate = SiteModuleTemplate::getIdDefaultTemplate();
             if ($idTemplate == null) {
                 return $this->_modules;
             }
         }
     }
     $this->_modules = SiteModule::model()->with(array('place' => array('condition' => 'place.id_module_template=:id_template', 'params' => array('id_template' => $idTemplate)), 'phpScriptInstance.phpScript'))->findAll();
     return $this->_modules;
 }