[Zope-dev] Image Archive Project (phase 2)
Michael R. Bernstein
webmaven@lvcm.com
Tue, 10 Apr 2001 11:21:33 -0700
"Michael R. Bernstein" wrote:
>
> Ok, so what's next? Somehow, ArchiveImages must be made
> aware of what Renderings they have.
>
> The ArchiveImage Specialist needs a getRenderingIds() Python
> Script, which in turn calls
> container.Renderings.getRenderingIdsFor().
>
> Now I'm stuck. How do I select all the Renderings that have
> (for example) '001' in their id, and return just the second
> portion of the id (such as 'original' or 'thumbnail')? What
> do I need to put into the getRenderingIds and
> getRenderingIdsFor Python Scripts?
After some head scratching and some advice, I decided to use
a ZCatalog in the Renderings Specialist.
First I added a SkinScript with the following body:
WHEN OBJECT ADDED CALL
Catalog.catalog_object(self,
_.string.join(self.getPhysicalPath(),'/'))
WHEN OBJECT DELETED CALL
Catalog.uncatalog_object(_.string.join(self.getPhysicalPath(),'/'))
WHEN OBJECT CHANGED CALL
Catalog.uncatalog_object(_.string.join(self.getPhysicalPath(),'/')),
Catalog.catalog_object(self,
_.string.join(self.getPhysicalPath(),'/'))
WITH SELF COMPUTE
external_id = _.string.split(id,'_')[1],
associated_image = _.string.split(id,'_')[0]
This ensures hat the objects will be catalogued when they
need to be, as well as establishing two computed attributes,
'external_id' and 'associated_image'.
I added both properties to the ZCatalog as FieldIndexes, and
removed all of the existing indexes except for id.
I also added 'external_id' as a meta-data field.
Now the Renderings.getRenderingIdsFor Python Script takes an
associated_image_id as a parameter, and reads as follows:
list = []
list =
container.Catalog({'associated_image':associated_image_id})
list2= []
for x in list:
list2.append(x.external_id)
return list2
And the main ArchiveImages Specialist has a getRenderingIds
Python Script:
archive_image_id = context.id
list =
container.Renderings.getRenderingIdsFor(archive_image_id)
return list
Finally, I added the following to the index_html for the
ArchiveImages:
<dtml-in getRenderingIds>
<a href="<dtml-var sequence-item>"><dtml-var
sequence-item></a>
</dtml-in>
So ArchiveImages now display links to their associated
Renderings.
Any comments or suggestions for improvements gladly
accepted.
Michael Bernstein.