2017-04-09 2 views
2

머리글 패널의 드롭 다운 메뉴에 여러 링크를 넣으 려하지만 이제 그룹화 된 세로로 그룹화 된 드롭 다운 메뉴를 원하는 동안 태그 $ li를 통해 평평한 수평 레이아웃으로 만 만들 수 있습니다.shinydashboard header dropdown 그룹 링크 추가

최소 반복 코드는 다음과 같습니다. 즉, grouplinkAB 아래에 linkA 및 linkB를 넣고 사용자가 새 창에서 그 중 하나를 열 수 있음을 의미합니다. 그것은 코드에서와 같이 dropdownMenu (type = 'notifications', ...)를 사용하여 얻을 수 있지만 "grouplinkAB"의 그룹 이름을 어디에 넣어야할지 모르며, "grouplinkAB"을 클릭하면 새 창을 열 수 없습니다. 링크, 또한 텍스트를 숨길 필요가 "당신은 2 통보가"태그와 함께 그것을 달성하고 싶습니다 $ 리튬 및 태그 $ ul,하지만 난 HTML에 대한 지식이 거의 없다, 어떤 도움을 주신 것입니다.

library(shinydashboard) 
library(shiny) 

runApp(
    shinyApp(
    ui = shinyUI(
     dashboardPage(
     dashboardHeader(title='Reporting Dashboard', 
         tags$li(class="dropdown",tags$a("grouplinkAB",href="http://stackoverflow.com/", target="_blank")), 
         tags$li(class="dropdown",tags$a("linkA",href="http://stackoverflow.com/", target="_blank")), 
         tags$li(class="dropdown",tags$a("linkB",href="http://stackoverflow.com/", target="_blank")), 
         dropdownMenu(type='notifications', 
            notificationItem(text='linkA',href="http://stackoverflow.com/"), 
            notificationItem(text='linkB',href="http://stackoverflow.com/") 
            ) 
     ), 
     dashboardSidebar(), 
     dashboardBody() 
    ) 
    ), 
    server = function(input, output){} 
), launch.browser = TRUE 
) 

답변

2

좋아, 나는 1 년 전에 비슷한 요청을 보았지만 훨씬 더 깊게 보지 않았다. 이번에는 코드를 작동 시키려고 시도했는데 dropdownMenu 코드를 살펴 보았지만이 코드를 처리하기위한 설정이 아니라는 것을 알았지 만 쉽게 처리 할 수있었습니다.

나는 대신 이것을 수행하기 위해 dropdownMenu이라는 새 버전을 만들었습니다. 여기

코드입니다 :

library(shinydashboard) 

dropdownHack <- function (...,badgeStatus = NULL, .list = NULL,menuname=NULL) 
{ 
    if (!is.null(badgeStatus)){ 
    shinydashboard:::validateStatus(badgeStatus) 
    } 
    items <- c(list(...), .list) 
    lapply(items, shinydashboard:::tagAssert, type = "li") 
    dropdownClass <- paste0("dropdown ", "text-menu") 
    numItems <- length(items) 
    if (is.null(badgeStatus)) { 
    badge <- NULL 
    } 
    else { 
    badge <- span(class = paste0("label label-", badgeStatus), numItems) 
    } 
    tags$li(class = dropdownClass, a(href="#", class="dropdown-toggle", 
            `data-toggle`="dropdown", menuname, badge), 
      tags$ul(class = "dropdown-menu", items ) 
) 
} 

menuitemHack <- function(text,href){ 
    notificationItem(text=text,href=href,icon=shiny::icon("rocket")) 
} 

runApp(
    shinyApp(
    ui = shinyUI(
     dashboardPage(
     dashboardHeader(title='Reporting Dashboard', 
         dropdownHack(menuname="GroupAB", 
            menuitemHack(text='linkA',href="http://stackoverflow.com/"), 
            menuitemHack(text='linkB',href="http://stackoverflow.com/") 
         ), 
         dropdownMenu(type='notifications', 
            notificationItem(text='linkA',href="http://stackoverflow.com/"), 
            notificationItem(text='linkB',href="http://stackoverflow.com/") 
         ) 
     ), 
     dashboardSidebar(), 
     dashboardBody() 
    ) 
    ), 
    server = function(input, output){} 
), launch.browser = TRUE 
) 

그리고 여기 결과입니다

enter image description here

주 :

  • 그것은 아이콘이 필요합니다, 당신은 어떤 fontAwesome을 선택하거나 수 글리 피콘 (Glyphicons)은 아무 것도 갖고 싶지 않으면 어딘가에 빈 공간이있을 것입니다.
  • ShinyDashboard 구조가 많이 변경되면 중단 될 것이라고 생각합니다. 따라서이를 명심하십시오.
  • 아마도 다음 버전에서도이 옵션을 지원할 것입니다. 단지 몇 줄의 추가 코드 일 것입니다.
+1

좋아요! 예상대로 작동합니다. 정말 고마워요. 이제 드롭 다운의 기본 설정이 너무 넓어 링크를 새 창에서 열 수 없습니다. 그것에 관한 몇 가지 설정을 검색 할 것입니다. – earclimate