6

最新号を取得してホームページに表示するプラグインを作成しました。すべてがうまく機能しているように見えますが、最初にサーバーを再起動して実行したときにのみ機能します。その後、その時点の問題が「キャッシュ」され、新しい問題は取得されません。

私はそれについて少し読んでいましたが、プラグインに追加機能を追加するために、問題に対するパッチを作成する必要があるようです。本当?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

編集

オンザフライで 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
4

1 に答える 1

1

これが役立つかどうか見てみましょう。私はこのチュートリアルを読んでいて、セクションUsing Hooksの下にこの段落があります:

ビューで 1 つ以上のフックを使用するには、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 (これが必要なビューかどうかはわかりません) で、2 つのフックが使用可能であることを示してい:view_issues_show_description_bottomます。このビューのこれらのフックは、あなたが望むものを示していますか?? そうでない場合は、おそらく別のビューを使用する必要があります。

参考までに、ここで Redmine ビューのリストを見ました: http://www.redmine.org/projects/redmine/repository/show/tags/2.0.0/app/views

于 2012-09-15T04:27:40.860 に答える