首页 > 解决方案 > R Shiny:如何使用带有图标功能的fontawesome pro版?

问题描述

我通过该icon功能在我的 Shiny 应用程序中使用了 fontawesome 图标。

我已经下载了 fontawesome 的专业版,并使用了此处的说明:shinydashboard some Font Awesome Icons Not Working将 Shiny 默认使用的免费版本(内部shiny\www\shared\font-awesome)替换为我的付费版本。这在本地运行良好,所有专业图标都显示在我的应用程序中。

但是,当我部署到 时shinyapps.io,Shiny 似乎又回到了使用默认版本。我确实尝试将我的 pro 目录包含在/www/我的应用程序的文件夹中,但没有成功。似乎没有办法告诉icon()函数查看本地版本的 fontawesome,比如icon(...,lib=local),或者icon(...,lib=path_to_fa)......

任何帮助都会非常受欢迎。

标签: rshinyfont-awesomeshinyapps

解决方案


诀窍是,在htmlDependency调用内部(icon()函数中),删除package = "shiny"并替换"www/shared/fontawesome"为我的 FA 文件夹的绝对路径(我还更新了版本号)。

编辑:更准确地说,下面是(非常轻微的)修改后的图标功能:

my_icon = function (name, class = NULL, lib = "font-awesome") {

prefixes <- list(`font-awesome` = "fa", glyphicon = "glyphicon")
  prefix <- prefixes[[lib]]
  if (is.null(prefix)) {
    stop("Unknown font library '", lib, "' specified. Must be one of ", 
         paste0("\"", names(prefixes), "\"", collapse = ", "))
  }
  iconClass <- ""
  if (!is.null(name)) {
    prefix_class <- prefix
    #if (prefix_class == "fa" && name %in% font_awesome_brands) {
    #  prefix_class <- "fab"
    #}
    iconClass <- paste0(prefix_class, " ", prefix, "-", name)
  }
  if (!is.null(class)) 
    iconClass <- paste(iconClass, class)
  iconTag <- tags$i(class = iconClass)
  if (lib == "font-awesome") {
    htmlDependencies(iconTag) <- htmlDependency("font-awesome", 
                                                "5.7.2", "./www/shared/fontawesome/", 
                                                stylesheet = c("css/all.min.css"))
  }
  htmltools::browsable(iconTag)
}

除了注释掉一些行之外,我唯一改变的部分是htmlDependency调用。在原始函数中,它是:

htmlDependency("font-awesome", "5.3.1", "www/shared/fontawesome", package = "shiny",
               stylesheet = c("css/all.min.css", "css/v4-shims.min.css")

推荐阅读