2017-04-09 59 views
2

我想在标题面板的下拉菜单中放置多个链接,但现在我只能通过标记$ li创建一个平整的水平布局,而我想要一个垂直分组下拉菜单。shinydashboard header dropdown add group links

最小可重复代码如下,我的意思是我想将linkA和linkB放在grouplinkAB下,用户可以在新窗口中打开其中的一个。可以通过代码中的dropdownMenu(type ='notifications',...)来实现,但我不知道在哪里放置“grouplinkAB”的组名,以及点击链接,我也必须隐藏文字“你有2个通知”,所以我想用tags $ li和tags $ 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

好的,我在一年前看到了类似的要求,但没有看太多。这一次,我试图让你的代码工作,然后我不能看到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或字画,如果你想什么都没有,那里可能有一个空白的地方。
  • 我想如果ShinyDashboard结构发生很大变化,它会中断,所以记住这一点。
  • 也许下一个版本也会支持这个选项,它只是几行额外的代码。
+1

太棒了!它按预期工作,非常感谢。 现在下拉菜单的默认设置太宽了,并且链接无法在新窗口中打开。我会搜索一些关于它的设置。 – earclimate