Данный файл конфигурации возвращает дерево пунктов меню для договора. Выглядит конфигурация, например, так:
menu { // список пунктов верхнего уровня children = [ // Новости menu( page: "kernel/news", icon: "fa-newspaper-o", title: "menu.news" ), // Уведомления + Рассылки menu( page: "kernel/notificationsEx", subPage: "notifications", icon: "fa-envelope-o", title: "menu.notifications", badge: "#{notificationBean.getUnreadCount()}", badgeUpdate: "#{notificationBean.populate()}", show: isCustomer() ), // Уведомления (отдельно от рассылок) menu( page: "kernel/notifications", icon: "fa-envelope-o", title: "menu.notifications", show: !isCustomer() ), // Баланс menu( page: "kernel/balance", icon: "fa-rub", title: "menu.balance" ), // Лимит menu( page: "kernel/limit", icon: "fa-umbrella", title: "menu.limit" ), // Тарифные опции menu( page: "kernel/tariffOptions", icon: "fa-cogs", title: "menu.tariffOptions", show: isCustomer() ), // Договор menu( icon: "fa-briefcase", title: "menu.contract" ) { children = [ // Статус menu( page: "kernel/status", title: "menu.status" ), // Тарифы menu( page: "kernel/tariffs", title: "menu.tariffs", show: isCustomer() ), // Действия menu( page: "kernel/additionalActions", title: "menu.additionalActions", show: isCustomer() ), // Документы menu( page: "kernel/documents", title: "menu.documents", show: isCustomer() ), // Документы (включены в предыдущий пункт) //menu( page: "plugins/documents/documents", title: "menu.documents" ), // Бухгалтерия menu( module: "bill", page: "modules/bill/bill", title: "menu.bill", show: isCustomer() ), // Примечания menu( page: "kernel/notes", title: "menu.notes", show: isCustomer() ), // Смена пароля menu( page: "kernel/password", title: "menu.password", show: isCustomer() ) ] }, // Интернет menu( module:"inet", icon:"fa-globe", title:"menu.inet" ) { children = [ // Сессии menu( page: "modules/inet/sessions", title: "menu.inet.sessions" ), // Трафик menu( page: "modules/inet/traffics", title: "menu.inet.traffics" ), // Смена пароля menu( page: "modules/inet/password", title: "menu.inet.password", show: isCustomer() ) ] }, // ТВ menu( module:"tv", page:"modules/tv/tv", icon:"fa-tv", title:"menu.tv" ), // Поддержка menu( page: "plugins/helpdesk/helpdesk", icon: "fa-wrench", title: "menu.helpdesk", badge: "#{helpdeskBean.getUnreadTopicCount()}", badgeUpdate: "#{helpdeskBean.populateTopics()}", show: isCustomer() ) ] }
У каждого объекта-пункта меню есть набор параметров:
- module - модуль, если данный пункт относится к модулю, наследуется дочерними пунктами;
- moduleId - ID модуля (необязательно, если указан module, то подставляется автоматически), наследуется дочерними пунктами. Можно использовать, если одинаковые модули нужно показывать по разному;
- page - страница, без .xhtml;
- subPage - подстраница;
- icon - иконка;
- title - название пункта меню (ключ для Locale.properties);
- badge - счетчик, указывается JSF-вызов метода, который вернет число;
- badgeUpdate - JSF-вызов метода, который нужно произвести для обновления счетчика
- show - показывать пункт или нет (если не указан, то показывать)
- children - список дочерних пунктов меню
Список дочерних пунктов меню children задается как массив, поэтому в данном случае следует разделять элементы запятыми.
Используя параметр show, можно ограничивать использование пунктов меню для групп договоров:
menu( moduleId: 210, page: "modules/tv/tv", icon: "fa-tv", title: "menu.tv", show: contractInGroup( contract, [1, 2, 3, 4, 20] ) )
При необходимости список дочерних пунктов меню можно определить как переменную и добавлять пункты в этот список, используя условия:
menu { // список пунктов верхнего уровня def firstLevel = []; children = firstLevel; // Новости firstLevel << menu( page: "kernel/news", icon: "fa-newspaper-o", title: "menu.news" ) // если авторизован по логину/паролю if( isCustomer() ) { // Уведомления + Рассылки firstLevel << menu( page: "kernel/notificationsEx", subPage: "notifications", icon: "fa-envelope-o", title: "menu.notifications", badge: "#{notificationBean.getUnreadCount()}", badgeUpdate: "#{notificationBean.populate()}" ) } else { // Уведомления firstLevel << menu( page: "kernel/notifications", subPage: "", icon: "fa-envelope-o", title: "menu.notifications" ) } // Баланс firstLevel << menu( page: "kernel/balance", icon: "fa-rub", title: "menu.balance" ) // если авторизован по логину/паролю if( isCustomer() ) { // Лимит firstLevel << menu( page: "kernel/limit", icon: "fa-umbrella", title: "menu.limit" ) // Тарифные опции firstLevel << menu( page: "kernel/tariffOptions", icon: "fa-cogs", title: "menu.tariffOptions" ) ...