레드마인(Redmine) 플러그인 개발 가이드 - 5. 메뉴 확장

by Tom posted Dec 15, 2015
?

단축키

Prev이전 문서

Next다음 문서

ESC닫기

크게 작게 위로 아래로 댓글로 가기 인쇄
이 문서는 Redmine 2.x 기반의 플러그인 개발 가이드입니다. 그리고 이 문서는 redmine.org의 플러그인 개발 가이드를 번역하였습니다. 

5. 메뉴 확장

Redmine Plugin API를 사용하여 표준 메뉴를 확장할 수 있습니다. 
다음 절을 참고하여 수행하면 새로운 메뉴를 추가할 수 있습니다.

5.1 어플리케이션 메뉴(Application Menu) 확장

플러그인 루트 디렉토리에서 plugins/polls/init.rb를 에디터로 오픈합니다. 플러그인 등록의 코드 블럭 끝 부분에 다음 라인을 추가합니다. 

Redmine::Plugin.register :redmine_polls do
  [...]

  menu :application_menu, :polls, { :controller => 'polls', :action => 'index' }, :caption => 'Polls'
end

메뉴 추가에 대한 문법은 다음과 같습니다. 

menu(menu_name, item_name, url, options={})


menu(메뉴이름, 아이템메뉴, 주소, 옵션)


다음과 같은 5개의 메뉴를 확장할 수 있습니다.

  • :top_menu - 상단 왼쪽 메뉴를 추가합니다.
  • :account_menu - 로그인/아웃과 함께 상단 오른쪽 메뉴를 추가합니다.
  • :application_menu - 프로젝트 밖의 메인 메뉴에 추가합니다.
  • :project_menu - 프로젝트 안쪽의 메인 메뉴에 추가합니다.
  • :admin_menu - 관리자 페이지에서 메뉴를 추가합니다. (can only insert after Settings, before Plugins)

메뉴와 관련하여 사용 가능한 옵션들은 다음과 같습니다.

  • :param - 파라미터 키는 프로젝트 id를 위해 사용됩니다. (기본값 :id)
  • :if - if가 true일 경우 메뉴를 출력합니다.
  • :caption - 메뉴의 캡션을 보여줍니다.
  • :before, :after - 메뉴가 삽입되는 위치를 나타냅니다. (예. :after => :activity)
  • :first, :last - 만약 true를 설정한다면, 아이템은 메뉴의 시작/끝에 위치됩니다. (예. :last => true)
  • :html - a hash of html options that are passed to link_to when rendering the menu item

우리의 예제에서, 우리는 기본적으로 비어있는 어플리케이션 메뉴에 아이템을 추가했습니다. 
어플리케이션을 재시작하고 다음 링크를 실행합니다. 
  • http://localhost:3000

이제 Welcome 화면으로부터 Polls 메뉴를 클릭하여 Polls 어플리케이션에 접근할 수 있습니다.

5.2 프로젝트 메뉴(Project Menu) 확장

현재 Polls앱의 메뉴는 프로젝트 밖에 정의되어 있습니다. 이를 프로젝트 레벨에 정의할 수 있습니다. 
이를 위해 먼저 init.rb 파일을 Open합니다. 그리고 아래와 같이 추가한 두 라인을 수정합니다. 

Redmine::Plugin.register :redmine_polls do
  [...]

  permission :polls, { :polls => [:index, :vote] }, :public => true
  menu :project_menu, :polls, { :controller => 'polls', :action => 'index' }, :caption => 'Polls', :after => :activity, :param => :project_id
end

두번째 라인은 activity 후에 Polls 메뉴를 추가합니다. 
첫번째 라인은 PollsController의 2 actions을 요구하거나 선언합니다. 
세부적인 사항은 나중에 다시 설명합니다. Redmine을 재시작하고 특정 프로젝트를 선택하면 Polls 메뉴가 있는 것을 확인할 수 있습니다. 

현재 상태에서 Polls 메뉴를 클릭하면, 메뉴의 내용이 디스플레이되지 않음을 알 수 있습니다. 메뉴를 보이게 하기 위해, 콘트롤러의 인스턴스 변수 @project를 초기화할 수 있습니다. 
PollsController를 다음과 같이 수정하면 메뉴를 확인할 수 있습니다.

def index
  @project = Project.find(params[:project_id])
  @polls = Poll.find(:all) # @project.polls
end