Israel Saeta Pérez(e)k dio:
2008/12/8 Manuel Gualda Caballero wrote:
Santiago Videla escribió:
Hola, ma parece que tenes que cambiar el storage del Field para que use
AttributeStorage
Gracias mil, Santiago: era eso.
\ ;-)
Aunque yo le había puesto AnnotationStorage por el siguiente aviso "To
avoid heavy memory consumption on sites with many images it is
recommended to use AnnotationStorage for the ImageField."
Investigaré esto, pues nuestra intención es llegar a tener bastante más
de mil fichas en el directorio y una gran parte de ellas tendrán la
correspondiente imagen...
Según yo lo veo, context.image.tag(...) no te funcionaba con
AnnotationStorage porque esta forma de almacenamiento no almacena los
datos como atributos en el objeto (en este caso, en el atributo
"image"), sino en forma de anotaciones en la ZODB, que permiten evitar
colisiones de nombres, entre otras cosas. Es una de las razones por
las que lo usa Aspeli (lo que me costó entender esa página del
libro...).
Puedes seguir usando AnnotationStorage si, en vez de
context.image.tag(...) usas context.getField('image').tag(context,
...), tal y como se describe en el manual de Archetypes.
No tengo claro por qué AttributeStorage puede dar problemas en sitios
con muchas imágenes, pero me imagino que será por poder despertar
(wake up) objetos pesados.
(Disclaimer: después del puente le he dado a "marcar como leídos" a
todos vuestros mensajes así que igual repito algo que ya habéis
comentado, pero esto del ImageField y el AnnotationStorage me interesa)
Desde que me leí el libro de Martin y he estado haciendo productos para
Plone 3.x, he puesto en todos ellos las cosas que dice Martin que es "el
camino a seguir", a saber:
- Declaración de interfaces
- storage = atapi.AnnotationStorage()
- usar ATFieldProperty(), para poder utilizar el nombre del campo como
si fuera una propiedad y trabajar "a lo python".
Sin embargo, el tema del ATFieldProperty() con los atributos de tipo
imagen no me ha funcionado nunca. Me suele dar un error extrañísimo (que
en este momento no lo tengo, pero si queréis creo un archetype en un
momento y lo comprobamos) que me indica que quite la línea "image =
ATFieldProperty('image')" de mi definición del Archetype.
Supongo que la cosa será que tendrá su aquél el tema de asignar un
archivo a una propiedad o lo que sea, pero bueno, la cosa es que no
funciona.
Sin embargo, sí que tengo archetypes con campos de tipo Imagen con el
storage definido como AnnotationStorage. No sé cuál es exactamente la
diferencia en guardar la imagen (o cualquier otra propiedad) en un
atributo o en un annotation (porque la implementación por defecto de un
Annotation es AttributeAnnotation, es decir que guarda las cosas en un
diccionario llamado __annotations__ de los objetos, pero bueno, Plone :)
Saludos,
Mikel
--
Mikel Larreategi
[EMAIL PROTECTED]
CodeSyntax
Azitaingo Industrialdea 3 K
E-20600 Eibar
Tel: (+34) 943 82 17 80
_______________________________________________
Plone-ConoSur mailing list
[email protected]
http://lists.plone.org/mailman/listinfo/plone-conosur