Можете ли вы получить доступ к файлу css с git / общего диска для совместного использования компанией?

#css #r #shiny #r-markdown

#css #r #блестящий #r-markdown

Вопрос:

Есть ли лучший способ для программистов в группе, желающих использовать общий стиль для shiny apps или rmarkdown docs, получить доступ к файлу css из одного места, а не вручную копировать нужный файл в субконтенты каждого приложения или документа?

Идеальным результатом было бы поместить файл (ы) в репозиторий github, а затем прикрепить его к любому блестящему приложению или файлу rmarkdown с его веб-ссылкой, возможно ли это?

Спасибо.

Ответ №1:

Возможно, было бы проще включить ваши таблицы стилей в пакет R. Это избавило бы от необходимости внешнего запроса при каждой загрузке вашего приложения или открытии документа. Поместите ваши файлы css в папку в inst и напишите единственную функцию R, которая задает пути ресурсов к вашему css и загружает файлы соответствующим образом.

Допустим, ваш пакет имеет следующую структуру. (Для этого примера я даю имя пакету mypkg )

 mypkg/
  R/
    use_stylesheets.R
  inst/
    stylesheets/
      styles.min.css
      ...
  ...
  

В use_stylesheets.R создайте функцию, которая загружает таблицы стилей в заголовок документа ( tags$head ) с помощью tags$link .

 use_stylesheets <- function() {

  shiny::addResourcePath(
    "styles",
    system.file("stylesheets", package = "mypkg")
  )

  shiny::tags$head(
    shiny::tags$link(rel = "stylesheet", href = "styles.min.css")
  )

}
  

Затем в вашем приложении или документе Rmarkdown вы можете загрузить файлы в свое приложение с помощью: mypkg::use_stylesheets()

Ответ №2:

После некоторой переделки я смог добиться успеха (ожидая, пока коллеги протестируют на своих машинах), используя эти структуры для добавления css или html из пакета как в блестящие приложения, так и в документы Rmarkdown.

 
# For attaching a css file to an Rmarkdown file
use_package_style_rmd <- function(css_file = "my_css.css"){
  # css file
  file_name <- paste0("/", css_file)
  file_path <- paste0(system.file("stylesheets", package = "my_pkg"), file_name)
  shiny::includeCSS(path = file_path)
}


# For placing an HTML headers/footers in place
use_package_header <- function(html_file = "my_header.html"){
  # HTML Header
  file_name <- paste0("/", html_file)
  file_path <- paste0(system.file("stylesheets", package = "my_pkg"), file_name)
  shiny::includeHTML(path = file_path)
}


# For attaching css to a shiny app via resourcePath
use_package_style_shiny <- function(stylesheet = "my_css.css"){

  # Add Resource Path
  shiny::addResourcePath(
    prefix = "styles",
    directoryPath = system.file("stylesheets", package = "my_pkg"))

  # Link to App
  shiny::tags$head(
      shiny::tags$link(rel = "stylesheet", 
      href = paste0("styles/", stylesheet)))
}

  

use_package_style_rmd Функция может быть помещена в любой фрагмент кода, в то время как функция заголовка добавит html на место, где выполняется функция.

В случае использования приложения Shiny следует запустить функцию для определения пути ресурса к папке, затем в пользовательском интерфейсе под fluidpage параметром темы можно установить файл css, используя префикс для пути к ресурсу styles/my_css.css .

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