1

好的,所以我有一个 Redmine 插件(Rails 引擎)。该插件使用钩子,以便在 Redmine 的每个页面上呈现 HTML/控件。

我正在从这个插件接收信息并将其发送到控制器。现在我有两个可以在 javascript 和 css 中使用的选项:相对路径或绝对路径。

相对路径不适用于每个页面,因为 URL 路径可能从一到三个部分到路径的任何位置(因为控件必须在每个页面上工作)。此选项要求我的插件每次都在 URL 中的相同嵌套级别呈现,但不是这样。

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

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

4

1 回答 1

2

如果它是 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'

确保插件名称与它的安装目录匹配(例如上面示例中的 vendor/plugins/redmine_kanban)。

要在 css 中引用图像等资产,您可以使用外部 css 文件和url(../images/example.png. Rails 引擎会将 assets/ 目录复制到 public/plugin_assets/plugin_name/[images|javascripts|stylesheets] 所以你只需要进入一个目录来获取图像。

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

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

希望这可以帮助。

于 2011-05-04T22:34:37.977 回答