Ciao,
io utilizzo con moderata soddisfazione
https://github.com/hexagonit/hexagonit.portletstyle

Va di monkeypatch a manetta.
Fa quello che dico io, ma non me la sento di consigliarlo per siti web
"importanti", poichè è di difficile manuntenibilità.
Però, chissà, ne puoi trarre ispirazione ;)

Vito


Il giorno 31 maggio 2013 09:02, Luca Fabbri <[email protected]> ha scritto:

> 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
>



-- 
*Vito Falco*
Webdeveloper & designer freelance, Plone enthusiast
Bari, IT
tel +39 3346330137 | skype vito80ba | twitter vito80ba
Linkedin http://it.linkedin.com/in/vitof
_______________________________________________
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

Rispondere a