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; } } }
/** * Устанавливает текущий раздел * @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; }
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; }
/** * Получить все модули раздела * @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; }