R Shiny: показывать модальное всплывающее окно ShinyBS при посещении страницы (без действий пользователя)

Раньше я успешно использовал bsModal в своем коде. Однако я не могу получить модальное всплывающее окно, которое по умолчанию показывается только тогда, когда пользователь посещает первую страницу приложения. Думал, что-то подобное сработает, но нет. Есть идеи, как я могу вызвать bsModal при посещении страницы?

library(shiny)
library(shinyBS)

ui <- fluidPage(
  mainPanel(
    bsModal(id = 'startupModal', title = 'Dum Dum', trigger = '',
            size = 'large', p("here is my mumbo jumbo")),
    width = 12
  )
)

server <- function(input, output, session) {

}

shinyApp(ui = ui, server = server)

Мне просто нужно предупредить пользователя с сообщением, когда он посещает приложение, а затем позволить ему закрыть модальное всплывающее окно и свободно перемещаться по остальной части приложения. Я использую Shinydashboard. Так что, в конце концов, это должно сработать.


person Gopala    schedule 06.12.2016    source источник


Ответы (2)


Вы можете использовать toggleModal, чтобы вручную вызвать всплывающее окно с сервера.

library(shiny)
library(shinyBS)

ui <- fluidPage(
  mainPanel(
    bsModal(id = 'startupModal', title = 'Dum Dum', trigger = '',
            size = 'large', p("here is my mumbo jumbo")),
    width = 12
  )
)

server <- function(input, output, session) {
  toggleModal(session, "startupModal", toggle = "open")
}

shinyApp(ui = ui, server = server)
person Geovany    schedule 06.12.2016
comment
Очень интересно. Он также отображает модальное всплывающее окно только один раз за сеанс, а не каждый раз, когда я попадаю на конкретную страницу, на которой я его разместил. Есть ли какие-либо побочные эффекты, о которых мне нужно беспокоиться или правильно кодировать? - person Gopala; 06.12.2016
comment
Вы можете контролировать, когда показывать / закрывать всплывающее окно, используя observer. Чтобы закрыть его, используйте toggle = "close". - person Geovany; 06.12.2016

Вот решение, использующее JS для запуска bsModal, когда страница загружается "onload" из ui, не дожидаясь server. Наряду с предлагаемым решением здесь чтобы конечные пользователи не могли случайно закрыть модальное окно, щелкнув за пределами модального окна или нажав Esc

library(shiny)
library(shinyBS)
bsModalNoClose <-function(...) {
     b = bsModal(...)
     b[[2]]$`data-backdrop` = "static"
     b[[2]]$`data-keyboard` = "false"
  return(b)
}


ui <- fluidPage(
       sidebarLayout(
          sidebarPanel(
              bsModalNoClose("window", "Window",
                  title="Enter Login Details",size='small',
                  textInput('username', 'Username'),
                  passwordInput('pwInp', 'Password'),
                  actionButton('butLogin', 'Login', class = 'btn action-button btn-success', icon = icon('sign-in')),
                  footer = h4(actionLink('create_account','Create an account'),align='right'),
                  tags$head(tags$style("#window .modal-footer{display:none}
                                       .modal-header .close{display:none}"),
                            tags$script("$(document).ready(function(){
                                        $('#window').modal();
                                        });")
                            ))
                  )
        ,mainPanel()
  ))

server <- function(input, output, session) {}

shinyApp(ui, server)

Надеюсь, это будет полезно для будущих читателей.

person A. Suliman    schedule 11.06.2018
comment
ВОТ ЭТО ДА!! Я пытался сделать то же самое с shinyalert, но это слишком хорошо! Кроме того, если бы вы могли предоставить руководство о том, как выполнить аутентификацию имени пользователя / пароля и процесс регистрации, это было бы действительно полезно. - person enigma6174; 22.06.2018
comment
@ enigma6174 Я рад, что вы нашли это полезным. Я создаю здесь репозиторий github для своей страницы входа, которую я сделал с использованием разных частей из разных участники SO и github. Однако это требует дополнительной работы в будущем. - person A. Suliman; 23.06.2018
comment
@ A.Suliman, Это решение пригодилось. Я перешел на ваш github, но я не вижу сохраненных учетных данных пользователя, как настроить доставку электронной почты в R при регистрации? - person user5249203; 26.09.2019
comment
@ user5249203 спасибо. Учетные данные пользователей будут сохранены в базе данных SQlite под названием users в www/sqlite папке «для производства вам может потребоваться более постоянное местоположение». Чтобы отправить установку по электронной почте, rJava, mailR затем раскомментируйте следующий , наконец, укажите действительное имя пользователя Gmail и пароль - person A. Suliman; 26.09.2019