Как я могу вставить изображение в навигационную панель на блестящей панели навигации()

Я создаю блестящее приложение, используя макет navbarPage(). Я хотел бы вставить изображение в правую сторону экрана в панели навигации. Он будет выглядеть как панель навигации вверху, например, на сайтах stackoverflow, но с логотипом в крайнем правом углу. Я пробовал:

shinyUI(
   navbarPage (title="test Page" ,
      img(src="mylogo.gif", style="float:right; padding-right:25px"),
      tabPanel(title="Panel 1",...)
 ))

Однако все это отображает изображение в правом углу под панелью навигации, а не содержимое первой вкладки (Примечание - изображение находится в каталоге www по мере необходимости).

Я могу использовать аргумент icon=, но это помещает значок на вкладку в браузере.

Любые идеи о том, как поместить изображение на панель навигации?

Ответы

Ответ 1

Теперь я могу ответить на этот вопрос, по крайней мере, для блестящего 0.10.0. Общая идея состоит в том, чтобы установить title= на div(), который содержит как изображение, так и текст для заголовка.

Однако это создает новую проблему, поскольку аргумент icon= больше не работает, и вы не можете установить заголовок для окна. Чтобы обойти это, я последовал за советом Энди Синглтона здесь. Совет должен создать fluidPage() над navbarPage(), который можно использовать для хранения заголовка окна и значка, Сделав эту страницу высотой в 0 пикселей, она скрыта в приложении. Вот ключевые бит кода.

ui.r:

shnyUI(
  fluidPage(
     list(tags$head(HTML('<link rel="icon", href="MyIcon.png", 
                                   type="image/png" />'))),
     div(style="padding: 1px 0px; width: '100%'",
         titlePanel(
                title="", windowTitle="My Window Title"
         )
      ),
      navbarPage(
         title=div(img(src="myLogo.gif"), "My Title in the Navbar"),
         tabPanel(....

Ответ 2

Это основано на @John Paul ответить, но мне кажется более простым. Сначала введите название страницы в переменную, так как мы будем использовать ее дважды - в качестве названия окна и на нашей странице:

PAGE_TITLE <- "My great title"

Ниже в вашей текучей странице:

  titlePanel(windowTitle = PAGE_TITLE,
             title =
               div(
                 img(
                   src = "my_logo.png",
                   height = 100,
                   width = 100,
                   style = "margin:10px 10px"
                 ),
                 PAGE_TITLE
               )
             ),

Ответ 3

Для тех из вас, у кого в навигационной панели более одного изображения, title= будет работать только для одного из изображений, если только вы не любите ужасное форматирование.

Этот код ниже позволяет пользователю добавлять заголовок с новым изображением, которое также является гиперссылкой. Я использовал это, чтобы создать логотип GitHub и связать мой репозиторий.

# Create Right Side Logo/Image with Link       
tags$script(HTML("var header = $('.navbar > .container-fluid');
header.append('<div style=\"float:right\"><ahref=\"URL\"><img src=\"Logo.png\" alt=\"alt\" style=\"float:right;width:33px;height:41px;padding-top:10px;\"> </a>'</div>');
    console.log(header)")
    ),

header.append </a></div>'); ДОЛЖЕН БЫТЬ В ОДНОМ РЯДУ КОДА В R

Все, что мы делаем, это помечаем этот раздел кода как HTML-скрипт, поэтому все передается в R как символьная строка и читается как HTML-код. К счастью, мы можем изменить размер изображения и переместить его, используя padding-left,right,top,bottom: _px.

Обратите внимание, что container-fluid - это моя навигационная панель, но она может отличаться для вашего приложения. Дополнительные опции форматирования могут быть включены в часть кода стиля.

enter image description here

Обратите внимание, что вы также можете добавить текст и связать его таким же образом.

# Create Right Side Text
 tags$script(HTML("var header = $('.navbar > .container-fluid');
 header.append('<div style=\"float:right\"><h3>Follow us on GitHub</h3></div>');
 )),

Снова убедитесь, что header.append через </div>'); находятся в той же строке кода в R

Ответ 4

Вот решение, которое я сделал на основе предыдущих великолепных ответов:

 ui <- 
   fluidPage(  
       list(
         tags$head(
           HTML('<link rel="icon" href="favicon.png" 
                type="image/png" />'))),

    navbarPage("App user name", windowTitle = "App name",
    ...

Место для сохранения изображений - папка "www" на сервере приложений Shiny:

shinyApp/app.R
shinyApp/www/favicon.png