AW: [Zope3-dev] Re: AW: override metadirectives before use them
notafterwards
Stephan Richter
srichter at cosmos.phy.tufts.edu
Mon Apr 26 18:57:04 EDT 2004
On Monday 26 April 2004 17:28, Roger ineichen wrote:
> > 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 ... />
Yep, that would be the right way.
> 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.
Nope, I think you understand the intend of the "containerViews" directive
incorrectly. It is *meant* to be a fast way to provide the standard container
views for IContainer objects. For a real-world application, you should always
develop your own set of views. We, as the Zope 3 developers, discourage using
the default views coming with Zope 3. They are only meant for the ZMI and not
end-user code. The target audience is very narrow.
For a 3rd party product you should always use the simple zope:view,
browser:page and browser:pages directives.
> -1, needs a lot of changes in many configure.zcml's
> You have to provide a own configure.zcml lib for this.
This is only true, if you want to provide your own convenience ZCML
directives.
> Important:
> I write a package and add a directive, Other use them, this means
> The package doesn't work without know how (yes you have to know what
> you are doing, but..) and work of everybody who is useing this
> package.!!!
It is documented by default via the API doc tool.
> -1, future added stuf are hard to support
how so?
> -1, no easy way for doing this, makes developer use creative hacks
> in the future.
Overwriting meta directives would be the first hack. But again, I would not
try to write custom ZCML directives, unless I had good reason to do so.
"containerViews" is an example where I would not do it.
BTW, please do not overuse ZCML! It is meant for bootstrapping and the
limitations of it were inserted on purpose!
> 2. I can write a own contents.pt and copy to the
> zope.app.container.browser package.
Oohhh, no!
> 3. Write a package and add script who copies the template.pt
> to the container package by a bootstrap process.
Oooh, no!
> 4. Override the meta directive and let ZConfig use the new
> overriden directive.
>
> ++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.
This will never happen. Forget it. Try to find other solutions!
> Another question is, what's the target.
> But it whould be nice if we can change exsisting implementations.
> I think that's a big difference.
> I'm shure we see this in the future.
But ZCML are not components. You change behavior by changing components. For
example you could write a custom Presentation service that fits your needs
better and allows for simpler overrides of the views.
But ZCML is not the thing to be replaceable.
> It's just a question of, can we provide
> this in a clean way. Otherwise we see some ugly hacks like monky patches
> in zope2, just why the clean way means to much work.
It is as clean as it can get. Write an object that provides a certain
interface and register instead of the default one. This is exactely what the
ZCML overrides functionality is aimed at.
> If we could override meta directives we get more flexibility, less work
> and a clean layer for to inject own implementations.
> (Just for some parts, not at all)
Nope, nope, nope. It will not buy us more flexibility. In fact, it will become
a maintenance disaster as various 3rd party products want to override ZCML
meta-directives in their way. That would lead us right back to the problems
Zope 2 has.
> Do we get bad thing's where I don't see at this time?
Yes, see above.
> A good example of this restriction is the zmi skin.
> I was developing a new (zmi) skin with different additional
> futures like.
> - a zmi tree with a principal annotation of the state for each user
> - drag and drop support form the folder contents view to the tree (move)
> - slots with boxes (the tree box is in a slot, every body can register
> own boxes in this slots)
> - boxes can be expanded or collapsed (persistence for each user) etc etc
Cool stuff. Where is that skin?
> All this futures I could implement without any problems in a new skin
> except the changes in the contents.pt template. It needs just a
> javascript:oncklick event on the img tag of a objects image.
Right, so that is a true limitation to the current skin mechanism that I am
not happy with either. I ran into similar problems when doing the original
ZWiki code. I have no good answer for this. But it might be for the better in
the long-run, if you develop your own contents.pt template, since you will
probably make more changes as development progresses that is incompatible
with the default rotterdam skin. However, overriding meta-directives is
definitely not the right approach.
Regards,
Stephan
--
Stephan Richter
CBU Physics & Chemistry (B.S.) / Tufts Physics (Ph.D. student)
Web2k - Web Software Design, Development and Training
More information about the Zope3-dev
mailing list