[Zope] Re: Zope digest, Vol 1 #704 - 52 msgs
Tres Seaver
tseaver@palladion.com
Mon, 27 Mar 2000 13:49:49 -0600
John Morton <jwm@plain.co.nz>
> Date: Mon, 27 Mar 2000 16:29:30 +1200 (NZST)
> To: zope@zope.org
> Subject: [Zope] Problems with adding ZClass instances
>
> I'm have problems with a ZClass I'm working on that uses Folder as
> it's base class and is supposed to install a set of default methods
> when it's created. The trouble is that it won't when the webDirectory
> is created, but it will when I invoke the same method from a tab afterwards.
>
> Here's the body of webDirectory_add:
>
> <dtml-with "webDirectory.createInObjectManager(REQUEST['id'], REQUEST)">
> <dtml-if createDefaultMethods>
> <dtml-in "default_methods.objectIds()">
> <dtml-try>
> <dtml-call "manage_delObjects(ids=[_['sequence-item']])">
> <dtml-except>
> </dtml-try>
> <dtml-call "manage_clone(
> _.getattr(default_methods, _['sequence-item']),
> _['sequence-item'], REQUEST)">
> </dtml-in>
> </dtml-if>
> </dtml-with>
>
> I'm assuming that the code within the <dtml-with ...> is effectively
> opperating in the context of the newly created object, but when the
> first manage_clone() is executed, it bombs out in _getCopy,
> tripping over on this line:
>
> ob=container._p_jar.importFile(f)
>
> ...because whatever container is, it's not a folderish object.
>
> So what do I need to do to switch to the new webDirectory object at
> creation time, so adding methods is automatic?
I do something very similar in the ZGotW product's root factory::
<dtml-in "defaults.objectIds( 'DTML Method' )">
<dtml-let si=sequence-item>
<dtml-with newRoot>
<dtml-call "manage_addDTMLMethod( si, '', defaults[ si ] )">
</dtml-with>
</dtml-let>
</dtml-in>
The key here may be the inner '<dtml-with newRoot>', which is forcing the
newly-created root folder to the top of the namespace stack, so that
'manage_addDTMLMethod()' is being invoked on it, rather than on the
sequence-item.
Hope this helps!
Tres.
--
=========================================================
Tres Seaver tseaver@digicool.com tseaver@palladion.com