[Framework-Team] AT Schema and Zope 3 [was: Re: Login redirect in 3.0?]
Florian Schulze
florian.schulze at gmx.net
Thu Dec 28 12:09:39 UTC 2006
On Thu, 28 Dec 2006 12:14:13 +0100, Martin Aspeli
<optilude at gmx.net> wrote:
> Florian Schulze wrote:
>> Dang! I knew this was coming. I thought about this for some time now
>> and didn't find a good solution to add a tab here which is not Schema
>> based. There was a thread on archetypes-devel about making interfaces
>> and adapters for Schema and Field stuff, so you could add stuff here,
>> but I don't know the state of it. The problem is, that this is one big
>> form and currently only archetypes handles everything on save, ideally
>> it would delegate the validation and mutation etc, so one could add
>> custom fields here. We also would need to see how this works together
>> with KSS inline validation, but if AT delegates, then it shouldn't be a
>> problem.
>
> You can do this now if you use ContentFlavors (the 3.0 branch), which is
> in AT svn. The necessary wiring is in AT, but CF probably needs a bit of
> updating as I'm intending to bend Kapil's use cases a bit. The necessary
> wiring is in AT.
>
> On the other hand, if we don't mind ATCT depending on
> plone.app.redirector, we can do this the usual way, with a write-only
> field and a custom mutator.
I just looked at the source, so I might be wrong. AFAICS there are two
problems:
1. If we want to change something in the Schema globaly, then we have to
overwrite the adapter from BaseObject to ISchema. Overwrites shouldn't be
used in a framework though.
2. AT expects the mutators to be available in the context. I'm not really
sure about this.
Let's see how we could to the alias stuff:
- We either overwrite the adapter from BaseObject to ISchema or use a
more explicit one from the ATCT base object (which would make it work for
ATCT types only).
- In the new adapter we return the original Schema plus the new fields
for the alias stuff
- When the form is saved BaseObject._processForm iterates over all the
fields of the Schema, gets the widget, calls widget.processForm, then gets
field.getMutator and calls it
- To make this work we return our own field with our own widget and
mutator
I think what's missing here is a way to provide an adapter from BaseObject
to ISchema which is extendable by products. Maybe we could make
archetypes_tool a local utility and provide a way to register additional
Schema parts. I currently have no real idea how this could work properly.
Maybe we should also use interfaces for Fields and Widgets in _processForm
to make this more flexible.
Any ideas and insights welcome.
Regards,
Florian Schulze
More information about the Framework-Team
mailing list