Дерево страниц
Перейти к концу метаданных
Переход к началу метаданных

Данный файл конфигурации возвращает дерево пунктов меню для договора. Выглядит конфигурация, например, так:

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" )
 
...
  • Нет меток