2012-09-06 15 views
6

Ho scritto un plug-in che cattura gli ultimi problemi e li visualizza sulla home page. Tutto sembra funzionare piuttosto bene, ma funziona solo la prima volta che riavvio il server per eseguirlo, dopodiché "memorizza nella cache" i problemi di quel momento e non ne vengono recuperati di nuovi.Aggiornamento plug-in redmine aggiornamento hook quando i problemi cambiano

Ne ho letto un po 'e sembra che dovrei scrivere una patch per i problemi per aggiungere funzionalità extra nel mio plugin. È vero? In tal caso, cosa devo aggiungere all'azione after_save? Lo stesso accade per il modello LatestPostsSetup: se cambio i valori per il conteggio massimo e il lato su cui dovrebbe essere visualizzato, la pagina iniziale non lo riflette fino a quando non riavvio il server.

Scusate se questa domanda sembra abbastanza banale, sono nuovo di rubino. Si prega di trovare il codice view helper di seguito:

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

Ora ho cambiato l'helper vista per rendere il codice HTML al volo, e non essere necessario riavviare apache per le nuove emissioni per essere visualizzato, non capisco perché dovrebbe lavorare su un modello html? Si prega di trovare il codice qui sotto:

# 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 

risposta

1

Vediamo se questo ti aiuta. Stavo leggendo this tutorial e giù per la sezione Using Hooks c'è questo paragrafo:

di utilizzare uno o più ganci in vista, è necessario creare una classe che eredita da Redmine :: :: Hook ViewListener ed applicare metodi nominati con il/i gancio/i che si desidera utilizzare.

Nel tuo codice che non funziona, vedo che hai creato la classe ma, non vedo i metodi implementati per gli hook che vuoi usare.

Come nell'esempio dato in quella sezione, sono andato e ho guardato questo punto di vista http://www.redmine.org/projects/redmine/repository/entry/tags/2.0.0/app/views/issues/show.html.erb (non sono sicuro questa è la vista è necessario) e si vede ci sono due ganci disponibili: uno di nome :view_issues_show_details_bottom e uno di nome :view_issues_show_description_bottom E vorrei aspetto che implementeresti nei tuoi metodi di codice il cui nome corrisponde ai nomi degli hook. Questi ganci in questa vista mostreranno ciò che vuoi ?? In caso contrario, probabilmente è necessario utilizzare una vista diversa.

Per riferimento ho guardato la lista di punti di vista Redmine qui: http://www.redmine.org/projects/redmine/repository/show/tags/2.0.0/app/views

+0

Grazie per la risposta, ma questo non sembra essere così. Ho cambiato 'render_on: view_welcome_index_right,: locals => {: issues => issues},: partial =>" latest_issues/issues "' e il risultato è stato lo stesso. il numero di problemi che voglio mostrare non è stato influenzato dalle modifiche nel database. –

Problemi correlati