I am trying to get a global search field into my navbarPage
after some tabPanel
. I am not sure if it is possible, since all my tests producing the
You can do this by manipulating the navbar HTML a little bit. Valter is correct - you can achieve this by constructing the menu entirely in HTML instead of using Shiny. But there's an easier way: you can build the navbar in regular Shiny, and then use htmltools
to slightly modify it. Here's one quick solution that I think is the cleanest out of the current proposed solutions:
library(shiny)
navbarPageWithInputs <- function(..., inputs) {
navbar <- navbarPage(...)
form <- tags$form(class = "navbar-form", inputs)
navbar[[3]][[1]]$children[[1]] <- htmltools::tagAppendChild(
navbar[[3]][[1]]$children[[1]], form)
navbar
}
ui <- navbarPageWithInputs(
"Test app",
tabPanel("tab1", "tab 1", textOutput("out")),
tabPanel("tab2", "tab 2"),
inputs = textInput("search", NULL, placeholder = "Search")
)
server <- function(input, output, session) {
output$out <- renderText(input$search)
}
shinyApp(ui = ui, server = server)
Basically I created a navbarPageWithInputs()
function that accepts all the same parameters as navbarPage()
, and also an inputs
parameter. All this function does is call the regular navbarPage()
, and then adds the given inputs to the HTML.