添加一个favicon到redmine主题

时间:2014-12-11 07:23:58

标签: redmine favicon

redmine使用位于/usr/share/redmine/public/favicon.ico

的图标

我使用cd /usr/share/redmine/; grep -HR favicon app/

找到了很多代码段
app/helpers/application_helper.rb:  def favicon
app/helpers/application_helper.rb:    "<link rel='shortcut icon' href='#{favicon_path}' />".html_safe
app/helpers/application_helper.rb:  # Returns the path to the favicon
app/helpers/application_helper.rb:  def favicon_path
app/helpers/application_helper.rb:    icon = (current_theme && current_theme.favicon?) ? current_theme.favicon_path : '/favicon.ico'
app/helpers/application_helper.rb:  # Returns the full URL to the favicon
app/helpers/application_helper.rb:  def favicon_url
app/helpers/application_helper.rb:    path = favicon_path
app/views/journals/index.builder:  xml.icon    favicon_url
app/views/common/feed.atom.builder:  xml.icon    favicon_url
app/views/layouts/base.html.erb:<%= favicon %>

但是没有运气找到有关如何设置favicon_pathfavicon_url的更多信息。

解决方法:

我在主题文件夹中添加了一个小javascript:javascripts/theme.js

document.head = document.head || document.getElementsByTagName('head')[0];

function changeFavicon(src) {
 var link = document.createElement('link'),
     oldLink = document.getElementById('dynamic-favicon');
 link.id = 'dynamic-favicon';
 link.rel = 'shortcut icon';
 link.href = src;
 if (oldLink) {
  document.head.removeChild(oldLink);
 }
 document.head.appendChild(link);
}

changeFavicon('../themes/freifunk-red-andy/images/favicon.ico');

(但该解决方法仅在访问者使用javascript时才有效)

2 个答案:

答案 0 :(得分:4)

Redmine会自动加载它在主题的favicon子目录中找到的第一个文件。因此,如果您将您的图标放入例如favicon/favicon.ico,它将由Redmine自动使用。

答案 1 :(得分:0)

我认为这个问题是模棱两可的,因为您必须根据自己真正想做的事情考虑两个地方。

如果要更改...的图标,

  1. ...一个另外安装的主题,您必须使用@Holger Just的答案(https://stackoverflow.com/a/27440983/887930),然后将您自己的收藏夹图标复制到文件夹redmine/htdocs/public/themes/YOURTHEME/favicon/中(覆盖现有的favicon.ico或根据需要在主题文件夹中创建文件夹favicon
  2. ... 预安装的标准Redmine主题,您必须将自己的收藏夹图标复制到文件夹redmine/htdocs/public中(覆盖现有favicon.ico