[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