2013/5/30 Roberto Rascioni <[email protected]>: > Il 30/05/13 17.03, Luca Fabbri ha scritto: > >> 2013/5/30 Roberto Rascioni <[email protected]>: >>> >>> Salve lista! >>> avrei la necessità di aggiungere un nuovo campo nello schema di una >>> portlet >>> già esistente. >>> >>> Googlelando un po' non ho trovato molto tranne il consiglio di >>> subclassare >>> la portlet esistente e crearne una nuova con l'aggiunta dello schema >>> voluto. >>> Un buon consiglio ma purtroppo sono costretto ad aggiungere campi alla >>> portlet esistente perchè quest'ultima è già in produzione in diversi >>> siti. >>> >>> Qualcuno di voi sa consigliarmi una metodologia da seguire? O anche un >>> prodotto che si occupi di aggiungere nuovi campi ad una portlet >>> esistente? >>> >> Se ho capito il tuo dubbio non è un problema, se il nuovo campo >> dell'assignment è un attributo di classe con un default, non avrai >> problemi: >> Ne parlavo qui: >> http://blog.keul.it/2011/04/plone-portlets-are-not-enemies-just.html >> Andando poi in gestione delle vecchie portlet avrai il nuovo attributo >> da compilare. >> >> Se non vuoi creare una nuova portlet puoi probabilmente limitarti a >> definire un nuovo portletRenderer: >> >> http://plone.org/documentation/kb/customization-for-developers/portlet-renderers >> Nell'esempio sopra viene solo cambiato il template, ma la direttiva >> plone:portletRenderer dovrebbe prevedere anche l'uso di "class". >> >> > Ciao Luca! > e grazie della pronta risposta! Il mio problema è proprio quello descritto > nel primo post che mi hai inviato ma rileggendo il messaggio mi sono accorto > di aver omesso alcuni importanti particolari: > > nel mio caso dovrò aggiungere dei nuovi campi alla gestione della portlet > esistente e dovrò farlo estendendo un prodotto installato via buildout e che > risiede quindi nella cartella eggs. > > In effetti ho già esteso il prodotto perchè avevo la necessità di > sovrascrivere la pt originale: > > class Renderer(portletOriginale.Renderer): > render = ViewPageTemplateFile('templates/miaPageTemplate.pt') > > > Ma quando provo con la stessa logica ad estedere la classe Assignment per > aggiungere i nuovi campi non succede nulla..tra le altre cose non ricevo > nemmeno errori: > > > class IMiaPortlet(portletOriginale.IOriginalPortlet): > > count = schema.Int(title=_(u'Number of items to display'), > description=_(u'How many items to list.'), > required=True, > default=5) > > > class Assignment(portletOriginale.Assignment): > > implements(IMiaPortlet) > > count = 5 > > def __init__(self, count=5): > self.count = count > > > Non so se questa sia la procedura corretta e sto sbagliando qualcosa > o se sto sbagliando tutto da principio perchè è impossibile aggiungere nuovi > campi attraverso questo metodo >
Innanzi tutto: il mio suggerimento di usare un nuovo portletRenderer era sbagliato, scusami. Come appunto hai evidenziato tu hai bisogno di manipolare l'assignment e non il renderer. La modifica che hai fatto, estendendo le varie classi, potrebbero andare bene per un nuovo tipo di portlet ma non per le vecchie portlet (cosa che invece vuoi ottenere). Il problema è che le vecchie portlet usano il vecchio assignment (portletOriginale.Assignment). Non ho presente il tuo codice o il codice del prodotto originale, ma la cosa più veloce che mi viene in mente al momento sarebbe quella di iniziare ad utilizzare un branch del prodotto originale (i sorgenti li hai?). NB. Usare branch è un po' come il Lato Oscuro: paga molto velocemente e raggiungi velocemente il risultato, ma se il prodotto originale viene aggiornato e puoi portarti dietro le modifiche, ti troverai ad dover "inseguire". Altra possibilità: monkey patch (probabilmente). Magari qualcun altro ha soluzioni più eleganti :) -- Saluti/Regards Luca Fabbri - RedTurtle Technology E-mail: [email protected] Web Site: http://www.redturtle.it/ Phone: +39 0532 1915958 Fax: +39 0532 287070 _______________________________________________ Plone-IT mailing list [email protected] https://lists.plone.org/mailman/listinfo/plone-plone-it http://plone-regional-forums.221720.n2.nabble.com/Plone-Italy-f221721.html
