2012-09-06 6 views
6

Escribí un complemento que capta los últimos problemas y los muestra en la página de inicio. Todo parece funcionar bastante bien, pero solo funciona la primera vez que reinicio el servidor para ejecutarlo, después de eso 'almacena en caché' los problemas de ese momento, y no se recuperan los nuevos.Redmine plugin view hook refresh cuando los problemas cambian

He estado leyendo un poco al respecto, y parece que debería escribir un parche para los problemas para agregar funcionalidad adicional en mi complemento. ¿Es eso cierto? Si es así, ¿qué debo agregar a la acción after_save? Lo mismo ocurre con el modelo LatestPostsSetup: si cambio los valores para el recuento máximo y el lado en el que debe mostrarse, la página principal no lo refleja hasta que reinicie el servidor.

Disculpa si estas preguntas parecen bastante triviales, soy nuevo en ruby. Por favor, encontrar el código de ayudante de vista a continuación:

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 

EDITAR

Ahora he cambiado el ayudante de vista para hacer que el html sobre la marcha, y no tenga que reiniciar Apache para las nuevas emisiones para que se muestre, no entiendo por qué funcionaría con el uso de una plantilla html? A continuación el código:

# 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 

Respuesta

1

Vamos a ver si esto le ayuda. Estaba leyendo this tutorial y hacia abajo en la sección de Using Hooks hay este párrafo:

utilizar uno o más ganchos en puntos de vista, es necesario crear una clase que hereda de Redmine :: :: Gancho ViewListener y poner en práctica métodos con el nombre con los ganchos que desea usar.

En el código que no funciona, veo que ha creado la clase, pero no veo los métodos implementados para los enganches que desea utilizar.

Al igual que en el ejemplo dado en esa sección, que fueron a mirar a este punto de vista http://www.redmine.org/projects/redmine/repository/entry/tags/2.0.0/app/views/issues/show.html.erb (no estoy seguro que este es el punto de vista que necesita) y se nota que hay dos ganchos disponibles: uno llamado :view_issues_show_details_bottom y un nombre :view_issues_show_description_bottom y me esperamos que implemente en sus métodos de código cuyo nombre coincida con los nombres de los ganchos. ¿Estos ganchos en esta vista muestran lo que quieres? Si no, probablemente necesite usar una vista diferente.

Como referencia Miré la lista de vistas Redmine aquí: http://www.redmine.org/projects/redmine/repository/show/tags/2.0.0/app/views

+0

darle las gracias por la respuesta, pero esto no parece que sea. Cambié 'render_on: view_welcome_index_right,: locals => {: issues => issues},: partial =>" latest_issues/issues "' y el resultado fue el mismo. el recuento de problemas que deseo mostrar no se vio afectado por los cambios en la base de datos. –

Cuestiones relacionadas