/** * Деактивация плагина * @return bool */ public function Deactivate() { $oMenu = E::ModuleMenu()->GetMenu('user'); $oMenu->RemoveItemById('plugin.menutest.my_menu', true); E::ModuleMenu()->SaveMenu($oMenu); return true; }
/** * @param ModuleMenu_EntityMenu $oMenu */ protected function _addMenuItem($oMenu) { // Создадим элемент меню $oMenuItem = E::ModuleMenu()->CreateMenuItem('plugin.sandbox.topics', array('text' => array('{{plugin.sandbox.menu_text}}', 'hook:new_sandbox_count' => array('red')), 'link' => R::GetPath('index/sandbox'), 'active' => array('topic_kind' => array('sandbox')), 'options' => array('class' => '', 'link_title' => '{{plugin.sandbox.menu_text}}'))); // Добавим в меню $oMenu->AddItem($oMenuItem); // Сохраним E::ModuleMenu()->SaveMenu($oMenu); }
/** * Деактивация плагина * * @return bool */ public function Deactivate() { /** @var ModuleMenu_EntityMenu $oMenu */ $oMenu = E::ModuleMenu()->GetMenu('topics'); $oMenu->RemoveItemById(array('plugin.sandbox.topics', 'plugin_sandbox_topics'), true); E::ModuleMenu()->SaveMenu($oMenu); //E::ModuleMenu()->ClearMenuCache('topics'); //Config::ResetCustomConfig('plugin.sandbox'); return true; }
public function RenderInitDone() { $aMenus = Config::Get('menu.data'); $bChanged = false; if ($aMenus && is_array($aMenus)) { foreach ($aMenus as $sMenuId => $aMenu) { if (isset($aMenu['init']['fill'])) { $aMenus[$sMenuId] = E::ModuleMenu()->Prepare($sMenuId, $aMenu); $bChanged = true; } } if ($bChanged) { Config::Set('menu.data', null); Config::Set('menu.data', $aMenus); } } }
public function CodeHook() { // Если пользоватль авторизован и у него не заполнено поле о себе, то if (E::IsUser() && trim(E::User()->getProfileAbout()) == '') { // Получим меню пользователя /** @var ModuleMenu_EntityMenu $oMenu */ $oMenu = E::ModuleMenu()->GetMenu('user'); // Проверим, может в этой теме меню не объектное if ($oMenu && !$oMenu->GetItemById('plugin_menutest_my_menu')) { // Создадим элемент меню $oMenuItem = E::ModuleMenu()->CreateMenuItem('plugin_menutest_my_menu', array('text' => '{{plugin.menutest.empty_about}}', 'link' => E::User()->getProfileUrl() . 'settings/', 'display' => array('not_event' => array('settings')), 'options' => array('class' => 'btn right create'))); // Добавим в меню $oMenu->AddItem('first', $oMenuItem); // Сохраним E::ModuleMenu()->SaveMenu($oMenu); } } }
/** * Метод, который вызывается после создания меню */ public function CodeHook() { // Получим результат выполнения метода-источника хука /** @var ModuleMenu_EntityMenu $oMenu */ $oMenu = $this->GetSourceResult(); // Убеждаемся, что было создано нужное нам меню - меню пользователя if ($oMenu && $oMenu->getId() == 'user') { // Если пользователь авторизован и у него не заполнено поле о себе, то if (E::IsUser() && trim(E::User()->getProfileAbout()) == '') { // Проверим, есть ли в меню нужный элемент if (!$oMenu->GetItemById('plugin.menutest.my_menu')) { // Создадим элемент меню $oMenuItem = E::ModuleMenu()->CreateMenuItem('plugin.menutest.my_menu', array('text' => '{{plugin.menutest.empty_about}}', 'link' => E::User()->getProfileUrl() . 'settings/', 'display' => array('not_event' => array('settings')), 'options' => array('class' => 'btn right create'))); // Добавим в меню $oMenu->AddItem($oMenuItem, 'first'); // Сохраним E::ModuleMenu()->SaveMenu($oMenu); } } } }
/** * Обработчик экшена менеджера меню * * @return bool|null|string */ protected function EventMenuManager() { // Активная вкладка главного меню $this->sMainMenuItem = 'settings'; $this->_prepareMenus(); // Получим страницу, на которой находится пользователь $sMode = $this->getParam(0); // В зависимости от страницы запускаем нужный обработчик if ($sMode == 'edit') { return $this->_eventMenuEdit(); } else { if ($sMode == 'reset') { return $this->_eventMenuReset(); } else { // Получим те меню, которые можно редактировать ползователю. $aMenu = E::ModuleMenu()->GetMenusByArrayId(Config::Get('module.menu.admin')); // Заполним вьювер E::ModuleViewer()->Assign(array('aMenu' => $aMenu, 'sMode' => $sMode)); // Установим заголовок страницы $this->_setTitle(E::ModuleLang()->Get('action.admin.menu_manager')); // Установми страницу вывода $this->SetTemplateAction('settings/menu_manager'); } } }
/** * Удаляет элемент меню по его ID * * @param string|array|object $xItem * @param bool $bClearCache */ public function RemoveItemById($xItem, $bClearCache = false) { if (is_array($xItem)) { /** @var string|object $xItemId */ foreach ($xItem as $xItemId) { if (is_object($xItemId)) { $sItemId = $xItemId->getId(); } else { $sItemId = (string) $xItemId; } if (isset($this->_aItems[$sItemId])) { unset($this->_aItems[$sItemId]); } } } else { if (is_object($xItem)) { $sItemId = $xItem->getId(); } else { $sItemId = (string) $xItem; } if (isset($this->_aItems[$sItemId])) { unset($this->_aItems[$sItemId]); } } if ($bClearCache) { Config::ResetCustomConfig('menu.data.' . $this->getId() . '.list'); E::ModuleMenu()->SaveMenu($this); } }
/** * Обработчик формирования меню в режиме blogs * * @param string[] $aFillSet Набор элементов меню * @param array $aMenu Само меню * * @return array */ public function ProcessBlogsMode($aFillSet, $aMenu = NULL) { /** @var ModuleMenu_EntityItem[] $aItems */ $aItems = array(); /** @var ModuleBlog_EntityBlog[] $aBlogs */ $aBlogs = array(); if ($aFillSet) { $aBlogs = E::ModuleBlog()->GetBlogsByUrl($aFillSet['items']); } else { if ($aResult = E::ModuleBlog()->GetBlogsRating(1, $aFillSet['limit'])) { $aBlogs = $aResult['collection']; } } if ($aBlogs) { foreach ($aBlogs as $oBlog) { $aItems[$oBlog->getUrl()] = E::ModuleMenu()->CreateMenuItem($oBlog->getUrl(), array('title' => $oBlog->getTitle(), 'link' => $oBlog->getUrlFull(), 'active' => (Config::Get('router.rewrite.blog') ? Config::Get('router.rewrite.blog') : 'blog') . '.' . $oBlog->getUrl(), 'submenu' => array(), 'on' => array('{*}'), 'off' => NULL, 'display' => TRUE, 'options' => array('image_url' => $oBlog->getAvatarUrl(Config::Get('module.menu.blog_logo_size'))))); } } return $aItems; }
/** * Формирует меню * * @param $aParams * @param $oSmarty * * @internal param $sMenuId * @internal param bool $sMenuClass * @internal param string $sActiveClass * * @return string */ function smarty_function_menu($aParams, &$oSmarty = NULL) { // Меню нет - уходим if (!isset($aParams['id']) || !($aMenu = E::ModuleMenu()->GetPreparedMenu($aParams['id']))) { return ''; } if (!isset($aMenu['items'])) { return ''; } /** @var ModuleMenu_EntityItem[] $aMenuItems Элементы меню */ $aMenuItems = $aMenu['items']; /** @var string $sMenu Запрашиваемое меню */ $sMenu = ''; // Установим класс меню, если он задан /** @var string $sMenuClass Класс меню */ $sMenuClass = isset($aParams['class']) ? 'class="' . $aParams['class'] . '"' : ''; if (!$sMenuClass) { $sMenuClass = isset($aMenu['class']) ? 'class="' . $aMenu['class'] . '"' : ''; } // Открываем меню if (!isset($aParams['hideul'])) { $sMenu .= "<ul {$sMenuClass}>"; } // Меню пустое $bEmpty = TRUE; // Заполним меню его элементами foreach ($aMenuItems as $sItemMenuName => $oMenuItem) { // Вызовем хук if (is_string($oMenuItem)) { $sMenu .= smarty_function_hook(array_merge(array('run' => $sItemMenuName), isset($aParams[$oMenuItem]) ? $aParams[$oMenuItem] : array()), $oSmarty); continue; } if (!$oMenuItem->isEnabled(isset($aParams['type']) ? $aParams['type'] : false)) { continue; } // Сформируем подменю если нужно $oMenuItem->setMenuId($aParams['id']); if (strpos($oMenuItemHtml = $oMenuItem->getHtml(), "[[submenu_") !== FALSE) { $oMenuItemHtml = preg_replace_callback('~\\[\\[submenu_(\\S*)\\]\\]~', function ($sSubmenuId) { if (isset($sSubmenuId[1])) { $sSubmenuId = $sSubmenuId[1]; } else { return ''; } $aSettings = array('id' => $sSubmenuId); if (preg_match('~[a-f0-9]{10}~', $sSubmenuId)) { $aSettings = array_merge($aSettings, array('class' => Config::Get('menu.submenu.class'))); } if (!is_null($sSubmenuHtml = smarty_function_menu($aSettings))) { return $sSubmenuHtml; } return ''; }, $oMenuItemHtml); } // Добавим html в вывод $sMenu .= $oMenuItemHtml; $bEmpty = FALSE; } // Закрываем меню if (!isset($aParams['hideul'])) { $sMenu .= '</ul>'; } // Пустое меню не показываем, если не указано другое if (!isset($aParams['show_empty'])) { $aParams['show_empty'] = FALSE; } // Если меню не пустое, то покажем if (!($bEmpty && $aParams['show_empty'])) { return $sMenu; } return ''; }
public function RenderInitDone() { E::ModuleMenu()->PrepareMenus(); }