Kas*_*lek 6 ruby-on-rails redmine redmine-plugins
我写了一个插件来抓取最新的问题并在主页上显示它们.所有似乎都运行良好,但它只在我第一次重新启动服务器运行它时才起作用 - 之后它会"缓存"那个时间的问题,并且不会获取新的问题.
我一直在阅读它,我似乎应该编写一个补丁,以便在我的插件中添加额外的功能.真的吗?如果是这样,我应该添加什么after_save行动?对于LatestPostsSetup模型也是如此 - 如果我更改了最大计数值和应该显示它的侧面的值,主页在我重新启动服务器之前不会反映它.
对不起,如果这个问题看起来相当微不足道,我是ruby的新手.请在下面找到视图助手代码:
module LatestPosts
class ViewHookListener < Redmine::Hook::ViewListener
require 'plugins/latest_posts/app/models/latest_posts_setup.rb'
setup = LatestPostsSetup.find_by_id(1)
if setup == nil
count = LatestPostsSetup::DEFAULT_COUNT
side = LatestPostsSetup::DEFAULT_SIDE
else
count = setup.max_count
side = setup.side
end
issues = Issue.find(:all, :limit => count, :order => "created_on DESC")
if side == 'left'
render_side = :view_welcome_index_left
else
render_side = :view_welcome_index_right
end
render_on render_side, :locals => {:issues => issues}, :partial => "latest_issues/issues"
end end
Run Code Online (Sandbox Code Playgroud)
编辑
我现在已经改变了视图助手来动态渲染html,而且我不必重新启动apache来显示新的问题,我不明白为什么会使用html模板呢?请找到以下代码:
# lib/latest_posts_hook_listener.rb
module LatestPosts
class ViewHookListener < Redmine::Hook::ViewListener
def view_welcome_index_left(context={})
setup = load_setup()
if setup[:side] == "left"
load_issues(setup[:count])
end
end
def view_welcome_index_right(context={})
setup = load_setup()
if setup[:side] == "right"
load_issues(setup[:count])
end
end
def load_setup()
require 'plugins/latest_posts/app/models/latest_posts_setup.rb'
setup = LatestPostsSetup.find_by_id(1)
if setup == nil
count = LatestPostsSetup::DEFAULT_COUNT
side = LatestPostsSetup::DEFAULT_SIDE
else
count = setup.max_count
side = setup.side
end
{:count => count, :side => side}
end
def load_issues(count)
html = '<div class="box" id="statuses">'
html += '<h3 class="icon22 icon22-users">Latest Issues</h3><ul>'
issues = Issue.find(:all, :limit => count, :order => "created_on DESC")
issues.each do |issue|
html += <<EOHTML
<li>
#{link_to h(truncate(issue.subject, :length => 60)), :controller => 'issues', :action => 'show', :id => issue } (#{ format_date(issue.created_on) })
</li>
EOHTML
end
html += '</ul></div>'
return html
end
end
end
Run Code Online (Sandbox Code Playgroud)
让我们看看这是否对您有帮助。我正在阅读本教程,下面的部分Using Hooks有这样一段:
要在视图中使用一个或多个钩子,您需要创建一个继承自 Redmine::Hook::ViewListener 的类,并实现以您要使用的钩子命名的方法。
在您不起作用的代码中,我看到您已经创建了该类,但是,我没有看到为您想要使用的挂钩实现的方法。
正如该部分给出的示例一样,我查看了此视图http://www.redmine.org/projects/redmine/repository/entry/tags/2.0.0/app/views/issues/show.html。 erb(不确定这是您需要的视图),它显示有两个可用的挂钩:一个是命名的:view_issues_show_details_bottom,另一个是命名的:view_issues_show_description_bottom,我希望您在代码中实现名称与挂钩名称匹配的方法。此视图中的这些挂钩会显示您想要的内容吗?如果没有,您可能需要使用不同的视图。
作为参考,我在这里查看了Redmine视图列表: http: //www.redmine.org/projects/redmine/repository/show/tags/2.0.0/app/views