[Zope] Re: ZClass Bug (was: Re: [Zope] How to access id and title of document calling standard_html_header)
Tim Hicks
Tim Hicks" <tim@sitefusion.co.uk
Wed, 6 Sep 2000 00:09:18 +0100
----- Original Message -----
From: "Dieter Maurer" <dieter@handshake.de>
To: "Tim Hicks" <tim@sitefusion.co.uk>
Cc: <zope@zope.org>
Sent: Tuesday, September 05, 2000 9:44 PM
Subject: ZClass Bug (was: Re: [Zope] How to access id and title of
document calling standard_html_header)
> Tim Hicks writes:
> > OK, I think that I am perhaps misusing zclasses then. Here is
what I
> > have.
> No you did not.
>
That's a relief.
> > 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.
>
OK.
> 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.
>
Yup, I'm with you on that.
> 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>'".
>
You are losing me a bit with the "__init__",
"DocumentTemplate.DT_String" and "__name__" (I'm afraid my Python is
limited, to say the least!). I do see the results of <string> being
the default value though ;-).
> "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 think I'm with you there.
>
> 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)">
>
Great. I presume that this will only work for all *new* instances of
this class however! I don't suppose you know of a way of remaking all
44 instances of this Zclass I have using this adjusted constructor? I
have tried (see below), but I think I come up against the same
'<string>' problem that I'm actually trying to counteract!
<dtml-in Catalog>
<dtml-call "REQUEST.set('sequence-item',REQUEST['id'])">
<dtml-with "theatre_class.createInObjectManager(REQUEST['id'],
REQUEST)">
<dtml-call
"propertysheets.theatre_class_property.manage_editProperties(REQUEST)"
>
<dtml-call "manage_edit(REQUEST)">
</dtml-with>
</dtml-in>
Anyway, I guess this is a different problem again really isn't it? I
think for now, it will be easier to use my less elegant workaround of
giving the zclass another property called 'counter_id' * that is the
same as the actual id. I know that this works, and it won't take as
long as remaking all the instances again... I don't have the strength
for that I don't think.
I'll definitely file away your fix for future reference though.
Thanks very much.
>
>
> 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
Yes, it does. I have now found this to occur in 2.1.6, 2.2.0 and
2.2.1.
> * if this turns out to be the case, file a bug report into
> the collector.
>
Right, I have done that, hopefully satisfactorily! Hope you don't
mind, I used 'extensive' quotes from your reply... no point in using
my words to confuse the issue!
Thanks very much Dieter, you've been a MASSIVE help.
tim
>
> Dieter
>