oppure seguire questa strada:

http://plone.org/documentation/manual/developer-manual/archetypes/appendix-practicals/b-org-creating-content-types-the-plone-2.5-way/annotations

(dovrebbe funzionare anche in plone 3, no?)


Yuri ha scritto:
Luca ha scritto:
2010/1/28 Yuri <[email protected]>:
Salve,

ho un content type con un campo con un metodo ridefinito da me per fare
alcune operazioni, connettersi da qualche parte e produrre un risultato.

Siccome è *molto* raro che il risultato cambi, come posso comportarmi?

Ho visto che molte egg salvano il risultato in un attributo (permanente ?)
all'interno della classe, per poi riutilizzarlo se delle condizioni si
verificano. Quello che mi viene in mente è:

- se il valore in cache è nullo, calcola
- se c'è un valore, mostralo
- se è cambiata la data di modifica del contenuto, ricalcola il valore.
- possibilità di annullare "tutti" i valori, in modo che su tutti i
contenuti venga ricalcolato.

Avete qualche esempio da mostrarmi? Avete suggerimenti?


Ciao,

ho usato molte volte con successo il prodotto plone.memoize; a parte
il noto decoratore @memoize che si vede un po' ovunque in giro per
Plone, ha tante altre funzionalità interessanti proprio per casi come
questi (ramcache ad esempio).


Vero, ma se riavvio il server, perdo tutto, no? :)

Stavo pensando di utilizzare il campo stesso. il campo si chiama dc ed è definito così:

   dc = atapi.ATFieldProperty('dc')

poi ho fatto una funzione

def getDc(self):

* fa dei calcoli e ritorna dell'html *

in questo modo, il mio contenuto stampa l'html che volevo

(Ovviamente mi direte: ma perché non hai usato un template apposta? Siccome i calcoli sono molti, è più pratico così).

Ora, nel campo dc, in questo modo, non salvo un bel nulla. Essendo persistente, potrei utilizzarlo per salvare il risultato.

Quindi dovrei modificare getDc in un qualcosa tipo:

campo = self.getField('dc').get()
if campo == None or campo == '':
 * fai calcolo *
self.getField('dc').set(value=risultato) (funziona? Ogni volta devo fare un sacco di prove per trovare la sintassi giusta :D )
else:
return campo

Ha un senso?

Oppure posso usare un attributo della classe che non sia un campo archetype e fare i controlli su quello?

_______________________________________________
Plone-IT mailing list
[email protected]
http://lists.plone.org/mailman/listinfo/plone-it
http://www.nabble.com/Plone---Italy-f21728.html


_______________________________________________
Plone-IT mailing list
[email protected]
http://lists.plone.org/mailman/listinfo/plone-it
http://www.nabble.com/Plone---Italy-f21728.html

Rispondere a