Я нашел, как динамически создать меню по адресу: http://rstudio.github.io/shinydashboard/structure.html#dynamic-content-1.
Но я не могу понять, как получить то, что мне нужно.
С кодом, приведенным в ссылке выше, и инструкциями if я смог создать ЦЕЛОЕ меню или нет, относящееся к другим входам в моем приложении.
Но сейчас я ищу гибкость в отношении каждого элемента / подпункта.
Например, для меню по умолчанию, например:
Анализирует
- Анализ 1
- Анализ 2
- Анализ 3
Я хотел бы найти способ показа Анализа 1 и 3 только в том случае, если на сервере отсутствуют файлы, необходимые для Анализа 2.
Поэтому, в зависимости от входных данных моего приложения (выпадающих меню) и других параметров, я хотел бы иметь возможность изменять само меню. Это возможно?
До сих пор я пытался найти способ динамического объединения элементов меню / подменю, но безуспешно.
Я также пытался обманывать и генерировать строки с правильными HTML-тегами. Но это тоже не похоже на работу. Пока не знаю почему.
После первых комментариев / ответов на мой вопрос. Я приведу ниже минимальный пример того, что я попробовал. Я ценю, что это уродливый способ сделать это, и он не работает (меню не появляется). Все это основано на минимальном примере Паскаля в первом ответе:
library(shiny)
library(shinydashboard)
ui <- dashboardPage(
dashboardHeader(title = "Dynamic sidebar"),
dashboardSidebar(
sidebarMenuOutput("menu")
),
dashboardBody(selectInput(inputId = "SelectFolder", label = "Select my
analysis folder", choices =
c(".", "..", "../..")))
)
server <- function(input, output) {
# whenever input$hide_tab changes through user input, output$menu adapts
observeEvent(input$SelectFolder,{
content<-list.files(input$SelectFolder)
menu <- '<ul id="mymenu" class="sidebar-menu">'
menu <-paste0(menu,menuItem("analysis 1", tabName = "a1", icon = icon("list-ul")))
if("app.R" %in% content){
menu <-paste0(menu,menuItem("analysis 2", tabName = "a2", icon = icon("bar-chart")))
}
menu <-paste0(menu,"</ul>") # end of the whole menu
output$menu <- renderMenu(menu)
} )
}
shinyApp(ui, server)
Причина, по которой решение Pascallv не работает для меня, заключается в том, что у меня много разных случаев (меню может быть большим), и я не могу охватить все возможные комбинации анализов, присутствующих в моих папках, или нет, создав более 50 различных меню.
Имеет ли теперь смысл, пожалуйста?