[Zope] ZClass Bug (was: Re: [Zope] How to access id and title of document calling standard_html_header)
Dieter Maurer
dieter@handshake.de
Tue, 5 Sep 2000 22:44:40 +0200 (CEST)
Tim Hicks writes:
> OK, I think that I am perhaps misusing zclasses then. Here is what I
> have.
No you did not.
> I have a Folder that was created by using the 'Add new item' menu
> within Zope. This folder is called 'Site'.
>
> I have a Zclass called 'theatre_class' that has "Base classes ZObject,
> _ZClass_for_CatalogAware, _ZClass_for_DTMLDocument"....
>
> Within the Folder 'Site', I have standard_html_header dtml-method ...
> However, if I try to put <dtml-var id> into the standard_html_header,
> I get nothing...
I analysed your problem (in Zope 2.1.6).
It is *NOT* a problem of "standard_html_header".
Instead, it is a ZCLass problem.
The id of a ZInstance created as
you described it returns "<string>". The browser shows this
as "empty" because it is a tag it does not understand and
therefore ignores.
You see it, though, when you look at the HTML source.
The reason for this strange id lies in a mismatch between
your ZClass, more precisely its __init__ method, and
the content of REQUEST:
For some reason, your ZClass uses
"DocumentTemplate.DT_String.__init__" as constructor.
"DocumentTemplate.DT_String" defines a "id" function
and lets it return the value of the "__init__" parameter
"__name__". The default for "__name__" is, you guess it,
"'<string>'".
"ZClass.createInObjectManager" constructs the ZInstance.
If the instance has a 'id', it takes this id and
ignores the 'id' passed as parameter.
Thus, you get a ZInstance with this strange id.
I am convinced, this is a ZClass bug.
I think, that the bug results from the fact, that
the constructor for a ZCLass deriving from DTML Document
used "__name__" as "id" replacement.
The analysis provides a workaround for you.
In your ZClass constructor, add
<dtml-call "REQUEST.set('__name__',REQUEST['id'])">
before the
<dtml-with "<yourClass>.createInObjectManager(REQUEST['id'],REQUEST)">
Now, after I did some work for you, I have some tasks for you:
* check, whether the bug is in Zope 2.2.1, too
* if this turns out to be the case, file a bug report into
the collector.
Dieter