Hi, Wasn't it generally agreed that storing a counter in a ZODB was a bad idea 'cos of the high number of refreshes, and hence the number of transactions stored in DB? Basically, because of the undo/rollback capability of ZODB, the data.fs grows rapidly if you use it to do counter-type things. Or an I wrong? Chris Jonothan Farr wrote:
I would implement this whole thing as a Python product and avoid mucking around directly with the persistence machinery altogether. This would allow you to add a Counter object anywhere in the Zope tree.
import OFS, Persistence
class Counter(OFS.SimpleItem.Item, Persistence.Persistent):
def __init__(self, id, title): self.id = id self.title = title self.counters = {}
def Count(self, name): if not self.counters.has_key(name): self.counters[name] = 0 v = self.counters[name] + 1 self.counters[name] = v return v
manage_addCounterForm=HTMLFile('methodAdd', globals())
def manage_addCounter(self, id, title, REQUEST=None): ob = Counter(id, title) self._setObject(id, ob) return self.manage_main(self, REQUEST)
Add a Counter call 'counter' to a folder, then call:
<dtml-var "counter.Count('chickens')">
-jfarr
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Hi! I'm a signature virus. Copy me into your .sig to join the fun! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
_______________________________________________ Zope maillist - Zope@zope.org http://lists.zope.org/mailman/listinfo/zope ** No cross posts or HTML encoding! ** (Related lists - http://lists.zope.org/mailman/listinfo/zope-announce http://lists.zope.org/mailman/listinfo/zope-dev )