2012-09-06 15 views
6

最新の問題を把握してホームページに表示するプラグインを作成しました。すべてはうまくいくようですが、初めてサーバーを起動して起動すると動作します。そのあとで問題がキャッシュされ、新しいものは取得されません。Redmineプラグインビューのフックが更新されたときに更新する

私はこれについて少しお読みになりました。プラグインに特別な機能を追加するためのパッチを作成する必要があるようです。本当?もしそうなら、私はafter_saveアクションに何を追加すればよいですか? LatestPostsSetupモデルでも同じことが起こります - 表示する必要がある最大カウントと側の値を変更すると、サーバーを再起動するまでホームページに反映されません。

申し訳ありませんが、この質問はかなり些細なように見えますが、私はルビーが初めてです。以下のビューヘルパーのコード見つけてください:

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 

EDIT

を私は今、その場で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 

答えて

1

これが役立つかどうかを見てみましょう。私はthis tutorialを読んでいたし、ダウンセクションUsing Hooksで、この段落があります:

は、ビュー内の1つのまたは複数のフックを使用するには、Redmineの::フックから 継承するクラスを作成する必要があります:: ViewListenerと名前のメソッドを実装します を使用するフックに置き換えます。

あなたのコードでは、あなたがクラスを作成したのが見えますが、使用するフックに実装されているメソッドが表示されません。

そのセクションで与えられた例では、私が行って、このビューhttp://www.redmine.org/projects/redmine/repository/entry/tags/2.0.0/app/views/issues/show.html.erb見(わからない、これはあなたが必要とする図である)、それが可能な2つのフックがあります示したよう::view_issues_show_details_bottomという名前の1と:view_issues_show_description_bottomという名前の1は私だろう名前がフック名と一致するコードメソッドに実装することを期待してください。このビューのこれらのフックは、あなたが望むものを示しますか?そうでない場合は、おそらく別のビューを使用する必要があります。私はここにRedmineのビューのリストを見て参考に

http://www.redmine.org/projects/redmine/repository/show/tags/2.0.0/app/views

+0

は、応答をありがとうございましたが、これはそれではないようです。私は 'render_on:view_welcome_index_right、:locals => {:issues => issues}、:partial =>" latest_issues/issues "を変更し、結果は同じでした。表示したい問題の数は、データベースの変更の影響を受けませんでした。 –