2011-05-02 33 views
0

好吧,我有一个Redmine插件(Rails引擎)。插件使用钩子,使得它的HTML /控件在Redmine的每个页面上呈现。Redmine插件/ Rails引擎 - 每个页面上的插件中的images/javascripts路径?

我从这个插件接收和发送信息给控制器。现在我有两个选项可以用于javascript和css:相对路径或绝对路径。

相对路径不会适用于每个页面,因为URL路径可能从一个到三个节的任何位置到路径(由于控件必须从每个页面起作用)。这个选项要求我的插件每次都在URL中相同的嵌套级别进行渲染。

绝对路径适用于特定的安装,但当别人在安装时使用它时,我的插件会中断,而路径不在域根下,即www.mysite.com/redmine/而不是www.mysite.com。这需要手动编辑,这根本不算优雅。

有什么方法可以轻松解决这个看似简单的问题吗?

回答

1

如果它是一个CSS,JS,或图像文件,你可以使用标签佣工的:plugin选项(Rails的引擎修补这些)

stylesheet_link_tag 'redmine_kanban.css', :plugin => 'redmine_kanban' 
javascript_include_tag 'jquery-1.3.2.min.js', :plugin => 'redmine_kanban' 
image_tag 'example.png', :plugin => 'redmine_kanban' 

确保插件名称与它匹配的安装目录(如供应商/ plugins/redmine_kanban在上面的例子中)。

参考资产像您的CSS中的图像,您可以使用外部的CSS文件和url(../images/example.png。 Rails Engines会将资产/目录复制到public/plugin_assets/plugin_name/[images | javascripts | stylesheets],所以你只需要沿着一个目录到达图像。

JavaScript有点困难。最好的办法是导出当前相对路径的JavaScript变量。我做这样的事情来将语言翻译字符串导出到JSON中以在我的JavaScript中使用。

javascript_tag("var redmineRootPath = #{Redmine::Utils.relative_url_root}") 

希望这会有所帮助。

+0

在引用位上,JavaScript有意义,它会起作用。然而,CSS - 如果我的插件显示在每个页面上,相对路径将改变,例如www.mysite.com/projects和www.mysite.com/projects/new不是吗? – 2011-05-05 04:04:39

+0

我知道了thx的帮助! – 2011-05-29 03:11:39