AW: AW: [Zope3-dev] Re: AW: override metadirectives before use themnotafterwards

Roger ineichen dev at projekt01.ch
Tue Apr 27 04:16:39 EDT 2004


Philipp von Weitershausen wrote:
> Roger,
> 
> >>Indeed, we won't have to. I recommend, if you need to override a
> >>directive, create a new one in a different namspace, e.g.
> >>
> >>   <roger:containerView ... />
> > 
> > 
> > Yes, I know. That's the long way with a lot of work form 
> everybody who 
> > is using this package.
> > 
> > Lets make a better example:
> > Let's say I whould change the template contents.pt which is 
> imported 
> > by the class Contents.py in the zope.app.container.browser 
> package. I 
> > have different ways to do so:
> > 
> > 1. Write a own directive <roger:containerView ... /> and use them
> >    everywhere.
> > 
> >    -1, it's to much work for just use another template.
> > 
> >    -1, needs a lot of changes in many configure.zcml's
> >        You have to provide a own configure.zcml lib for this.
> > 
> 
> I've looked at the code now and I don't like what I'm seeing. 
> containerViews makes it quite hard indeed to customize just one 
> template. The zope.app.container.browser.contents.Contents has a 
> hard-wired reference to the contents.pt template, too. It 
> should really 
> use the browser:page directive with the template="" attribute.
> 
> The containerViews directive when executed registers as bunch of 
> predefined templates for the container. The benefit is that you only 
> have to specify the permissions:
> 
> <browser:containerViews
>       for=".interfaces.IBuddyFolder"
>       contents="zope.ManageContent"
>       index="zope.View"
>       add="zope.ManageContent"
>       />
> 
> > 4. Override the meta directive and let ZConfig use the new
> >    overriden directive.
> 
> Again, ZConfig has nothing to do with ZCML. ZConfig bootstraps the 
> server (http, ftp, etc.) and the ZODB. That's it.
> 
> >    ++1, whould be a clean way for to change basic implementations.
> > 
> >    +1, I can write a own Contents class and a own 
> contents.pt template
> >        and register a new meta directive. I can exactly implement 
> >        what's have to replace.
> 
> I still believe that overriding a meta directive is not 
> necessary. The 
> existing machinery simply needs to be good enough so that 
> it's possible 
> to customize every single bit.
> 
> So, in order to able to customize IReadContainer's templates, 
> I see two 
> possibilities:
> 
> 1. Get rid of containerViews and have explicit browser:page 
> directives 
> (e.g. in zope.app.folder). Container view customizations 
> could choose to 
> override any number of those browser:page directives.
> 
> 2. Use the (not yet implemented) disable directive to disable 
> any call 
> to containerViews for the interface/class in question (e.g. 
> IReadContainer); then register custom templates for the container 
> manually, maybe falling back to Zope3's default templates where 
> customization is not necessary.
> 
> I prefer #1. I'd be willing to take a shot at it. Nonetheless, we do 
> need #2 at some point, but probably not for X3.0.

Yeh, that whould be great.


> > Another question is, what's the target.
> 
> You probably mean "goal". We're not shooting anyone here :)
> 
> > Can anybody help with a easier way. The important part of 
> this problem 
> > is, it has to work by installing the package without to change 
> > directives on other packages!
> 
> That is the whole idea.

Yes

> 
> Philipp
> 
> _______________________________________________
> Zope3-dev mailing list
> Zope3-dev at zope.org
> Unsub: 
> http://mail.zope.org/mailman/options/zope3-> dev/dev%40projekt01.ch
> 
> 




More information about the Zope3-dev mailing list