我写了一个插件,可以捕获最新的问题并将其显示在主页上。一切似乎都运行良好,但是只有在我第一次重新启动服务器以运行它时,它才能正常工作-之后,它会从那时开始“缓存”问题,并且不会获取新的问题。
我一直在阅读有关它的内容,看来我应该写一些补丁来解决问题,以便在插件中添加额外的功能。真的吗?如果是这样,我应该在after_save
操作中添加什么?对于LatestPostsSetup模型,也会发生相同的情况-如果我更改最大计数值和应在其上显示的那一侧,则直到重新启动服务器后,主页才会反射(reflect)出来。
抱歉,如果这个问题看似微不足道,那么我是 ruby 新手。请在下面找到 View 帮助程序代码:
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
编辑
现在,我已经更改了 View 助手以动态显示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
最佳答案
让我们看看这是否对您有帮助。我正在阅读this tutorial,然后在Using Hooks
部分中找到以下段落:
在不起作用的代码中,我看到您已经创建了该类,但是我没有看到为要使用的钩子(Hook)实现的方法。
就像该部分给出的示例一样,我去查看了http://www.redmine.org/projects/redmine/repository/entry/tags/2.0.0/app/views/issues/show.html.erb View (不确定这是您需要的 View ),它显示了两个可用的钩子(Hook):一个名为:view_issues_show_details_bottom
和一个名为:view_issues_show_description_bottom
,我希望您会在您的代码方法中实现其名称与 Hook 名称匹配的方法。这些 Hook 在此 View 中会显示您想要的东西吗?如果没有,您可能需要使用其他 View 。
作为引用,我在这里查看了Redmine View 列表:http://www.redmine.org/projects/redmine/repository/show/tags/2.0.0/app/views