faire un lien vers un autre onglet depuis R Shiny

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Carine Lambert
Messages : 37
Enregistré le : 18 Fév 2021, 15:16

faire un lien vers un autre onglet depuis R Shiny

Messagepar Carine Lambert » 02 Avr 2021, 10:15

Bonjour,

j'ai réalisé une appli R shiny où se trouve différents onglets (via TabsetPanel) et dans chaque onglet j'ai indiqué le nom de l'onglet et le contenu.

http://rshiny.naomis.fr:3838/databat/eKollo/

J'aimerai sur ma page d'accueil faire des liens vers les différents onglets mais les liens # après l'url changent tout le temps !
Est-ce que quelqu'un aurait une idée ?

Merci beaucoup :)

jframi
Messages : 8
Enregistré le : 17 Déc 2004, 16:05

Re: faire un lien vers un autre onglet depuis R Shiny

Messagepar jframi » 02 Avr 2021, 12:41

Bonjour,
Peut-etre une possibilité en utilisant la fonction updateNavbarPage

Code : Tout sélectionner

library(shiny)

ui <- fluidPage(navbarPage(title = "Mon appli shiny", id = "tabsetId",
                           tabPanel("Accueil",value = "accueil",
                                    actionButton("goto_tab1","Tab1"),
                                    actionButton("goto_tab2","Tab2")),
                           tabPanel("Tab1",value = "tab1"),
                           tabPanel("Tab2",value = "tab2")
)
)
server <- function(input, output, session) {
  observeEvent(input$goto_tab1,{
   updateNavbarPage(session, "tabsetId", selected = "tab1")
   })
  observeEvent(input$goto_tab2,{
   updateNavbarPage(session, "tabsetId", selected = "tab2")
   })
}

shinyApp(ui, server)


Il y a surement moyen d'utiliser autre chose que des boutons, en utilisant le même principe.

JF

jframi
Messages : 8
Enregistré le : 17 Déc 2004, 16:05

Re: faire un lien vers un autre onglet depuis R Shiny

Messagepar jframi » 02 Avr 2021, 12:43

En utilisant updateTabsetPanel en l’occurrence, je n'avais pas bien lu votre message.

Carine Lambert
Messages : 37
Enregistré le : 18 Fév 2021, 15:16

Re: faire un lien vers un autre onglet depuis R Shiny

Messagepar Carine Lambert » 06 Avr 2021, 07:12

Merci pour votre retour jframi !

j'ai remplacé updatenavbar par updateTabsetPanel mais ca ne fonctionne pas... rien ne se passe...
faut-il que je fasse l'essai en version serveur directement ?

Mickael Canouil
Messages : 1315
Enregistré le : 04 Avr 2011, 08:53
Contact :

Re: faire un lien vers un autre onglet depuis R Shiny

Messagepar Mickael Canouil » 06 Avr 2021, 09:32

Bonjour,

sans code reproductible (et minimal) de votre part, il est difficile de vous aidez.

Voici un exemple (les lapply sont simplement pour éviter de copier-coller plusieurs fois le même code) sur lequel vous baser.

Code : Tout sélectionner

library(shiny)

ui <- fluidPage(sidebarLayout(
  sidebarPanel(
    lapply(1:3, function(i) {
      list(actionLink(inputId = paste0("topanel", i), label = paste("Go to Panel ", i)), br())
    })
  ),
  mainPanel(
    tabsetPanel(id = "inTabset",
      tabPanel(title = "Panel 1", value = "panel1", "Panel 1 content"),
      tabPanel(title = "Panel 2", value = "panel2", "Panel 2 content"),
      tabPanel(title = "Panel 3", value = "panel3", "Panel 3 content")
    )
  )
))

server <- function(input, output, session) {
  lapply(1:3, function(i) {
    observeEvent(input[[paste0("topanel", i)]], {
      updateTabsetPanel(session, "inTabset", selected = paste0("panel", i))
    })
  })
}

shinyApp(ui, server)


Cordialement,
Mickaël
mickael.canouil.fr | rlille.fr

Carine Lambert
Messages : 37
Enregistré le : 18 Fév 2021, 15:16

Re: faire un lien vers un autre onglet depuis R Shiny

Messagepar Carine Lambert » 06 Avr 2021, 15:45

Voici ce que j'ai fait à ce jour... sans succès...(avec quelques tests sur les action link / button)

Code : Tout sélectionner

library(shiny)

shinyServer <- function(input, output, session) {
 
  observeEvent(input$goto_tab1,{
    updateTabsetPanel(session, "onglet", selected = "Tab1")
  })
}


shinyUI(fluidPage(
  tabsetPanel(id ="onglet",
             
                #onglet1----
                tabPanel( "Accueil",
                          value="accueil",
                    actionLink("Tab1", "goto_tab1"),
                    actionLink("goto_tab2", "Tab2"),
                    actionButton("goto_tab3", "Tab3")),
                               
                #onglet2----
                tabPanel( "Comprendre",
                         value= "Tab1"),
                               
                #onglet3----
                tabPanel("Se comparer",
                         value= "Tab2" ),
               
                #onglet4----
                tabPanel("Faire mieux",
                          value= "Tab3"),

    )
  ))

Mickael Canouil
Messages : 1315
Enregistré le : 04 Avr 2011, 08:53
Contact :

Re: faire un lien vers un autre onglet depuis R Shiny

Messagepar Mickael Canouil » 06 Avr 2021, 17:06

Vous avez inversé l'identifiant et l'étiquette de votre premier actionLink(), qui est, soit dit en passant, le seul qui puisse fonctionner puisque le seul (quand l'inversion est corrigée) à être présent du côté serveur.

Du point de vue du design de l'application, avoir un menu dans le premier onglet pour naviguer dans les autres onglets, me semble très curieux.
Mickaël
mickael.canouil.fr | rlille.fr

Carine Lambert
Messages : 37
Enregistré le : 18 Fév 2021, 15:16

Re: faire un lien vers un autre onglet depuis R Shiny

Messagepar Carine Lambert » 07 Avr 2021, 06:48

Oui j'avais inversé pour faire des tests, et les autres commandes coté serveur sont présentes mais en vain :/

effectivement la config est étrange! le but est de faire des liens vers des onglets particuliers pour faciliter l'expérience utilisateur (on est clairement plus sur un site grand public avec une partie data ...)

Merci quand même :)

Mickael Canouil
Messages : 1315
Enregistré le : 04 Avr 2011, 08:53
Contact :

Re: faire un lien vers un autre onglet depuis R Shiny

Messagepar Mickael Canouil » 07 Avr 2021, 07:52

Là encore, vous ne fournissez pas de code, en copiant collant le observeEvent du premier onglet et en changeant proprement les identifiants des inputs et onglet, cela fonctionne parfaitement.

Code : Tout sélectionner

server <- shinyServer <- function(input, output, session) {
  observeEvent(input$goto_tab1, {
    updateTabsetPanel(session, "onglet", selected = "Tab1")
  })
  observeEvent(input$goto_tab2, {
    updateTabsetPanel(session, "onglet", selected = "Tab2")
  })
  observeEvent(input$goto_tab3, {
    updateTabsetPanel(session, "onglet", selected = "Tab3")
  })
}


Au sujet de l'interface,
la votre :

Code : Tout sélectionner

ui <- shinyUI(fluidPage(
  tabsetPanel(
    id = "onglet",

    # onglet1----
    tabPanel("Accueil",
      value = "accueil",
      actionLink("goto_tab1", "Tab1"),
      actionLink("goto_tab2", "Tab2"),
      actionButton("goto_tab3", "Tab3")
    ),

    # onglet2----
    tabPanel("Comprendre",
      value = "Tab1"
    ),

    # onglet3----
    tabPanel("Se comparer",
      value = "Tab2"
    ),

    # onglet4----
    tabPanel("Faire mieux",
      value = "Tab3"
    )
  )
))

Image

Avec un menu dans une barre latéral (il y a navbarpage aussi)

Code : Tout sélectionner

ui <- shinyUI(fluidPage(sidebarLayout(
  sidebarPanel = sidebarPanel(
    titlePanel("Accueil"),
    actionLink("goto_tab1", "Tab1"),
    br(),
    actionLink("goto_tab2", "Tab2"),
    br(),
    actionButton("goto_tab3", "Tab3")
  ),
  mainPanel = mainPanel(
    tabsetPanel(
      id = "onglet",
      tabPanel("Comprendre",
        value = "Tab1"
      ),
      tabPanel("Se comparer",
        value = "Tab2"
      ),
      tabPanel("Faire mieux",
        value = "Tab3"
      )
    )
  )
)))

Image

Cordialement,
Mickaël
mickael.canouil.fr | rlille.fr


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité