I've been playing with Zope for a couple of days. Coming from a Smalltalk background, many of the concepts employed by Zope are very familiar. However, I seem to have a fundamental misunderstanding about how acquisition works. As an experiment, I created a Folder object called "Testing". I defined an index_html document with the following DTML code: <dtml-var standard_html_header> <dtml-var folderName> <dtml-var standard_html_footer> I also defined a DTML method in Testing called "folderName" which contained the following: Testing I viewed the page in a browser via http://localhost:8080/Testing and sure enough I saw a page with the phrase "Testing" correctly displayed. I then created a Folder within Testing called "SubTest". In SubTest, I defined one DTML method called "folderName" Inside of this method I put the contents: SubTest I then displayed the page via http://localhost:8080/Testing/SubTest and was confused when the screen still displayed the phrase "Testing" instead of "SubTest". It's probably my Smalltalk bias, but I was expecting that the system would look up the tree from SubTest until it found an index_html that it could display. Having found that, it would see that it needed to execute the method "folderName". Since the object being displayed was SubTest, I assumed that it would try to find the "folderName" method starting in SubTest. Having found it, it would use the result from that method for display. However, this is not what happened. Where did I go wrong? I was under the impression that I could factor common behavior up the tree and only implement distinct behavior at lower levels. Did I just do something wrong? Is there a way to accomplish what I want to accomplish? Thanks. James W. Howe mailto:jwh@allencreek.com Allen Creek Software, Inc. pgpkey: http://ic.net/~jwh/pgpkey.html Ann Arbor, MI 48103
Hi James, You probably have misspelling somewhere. It should work as you anticipated, or I haven't understood your problem correctly. //johan
I've been playing with Zope for a couple of days. Coming from a Smalltalk background, many of the concepts employed by Zope are very familiar. However, I seem to have a fundamental misunderstanding about how acquisition works. As an experiment, I created a Folder object called "Testing". I defined an index_html document with the following DTML code:
<dtml-var standard_html_header> <dtml-var folderName> <dtml-var standard_html_footer>
I also defined a DTML method in Testing called "folderName" which contained the following:
Testing
I viewed the page in a browser via http://localhost:8080/Testing and sure enough I saw a page with the phrase "Testing" correctly displayed. I then created a Folder within Testing called "SubTest". In SubTest, I defined one DTML method called "folderName" Inside of this method I put the contents:
SubTest
I then displayed the page via http://localhost:8080/Testing/SubTest and was confused when the screen still displayed the phrase "Testing" instead of "SubTest". It's probably my Smalltalk bias, but I was expecting that the system would look up the tree from SubTest until it found an index_html that it could display. Having found that, it would see that it needed to execute the method "folderName". Since the object being displayed was SubTest, I assumed that it would try to find the "folderName" method starting in SubTest. Having found it, it would use the result from that method for display. However, this is not what happened. Where did I go wrong? I was under the impression that I could factor common behavior up the tree and only implement distinct behavior at lower levels. Did I just do something wrong? Is there a way to accomplish what I want to accomplish?
At 22:35 18/10/99 , James W. Howe wrote:
I've been playing with Zope for a couple of days. Coming from a Smalltalk background, many of the concepts employed by Zope are very familiar. However, I seem to have a fundamental misunderstanding about how acquisition works. As an experiment, I created a Folder object called "Testing". I defined an index_html document with the following DTML code:
<dtml-var standard_html_header> <dtml-var folderName> <dtml-var standard_html_footer>
I also defined a DTML method in Testing called "folderName" which contained the following:
Testing
I viewed the page in a browser via http://localhost:8080/Testing and sure enough I saw a page with the phrase "Testing" correctly displayed. I then created a Folder within Testing called "SubTest". In SubTest, I defined one DTML method called "folderName" Inside of this method I put the contents:
SubTest
I then displayed the page via http://localhost:8080/Testing/SubTest and was confused when the screen still displayed the phrase "Testing" instead of "SubTest". It's probably my Smalltalk bias, but I was expecting that the system would look up the tree from SubTest until it found an index_html that it could display. Having found that, it would see that it needed to execute the method "folderName". Since the object being displayed was SubTest, I assumed that it would try to find the "folderName" method starting in SubTest. Having found it, it would use the result from that method for display. However, this is not what happened. Where did I go wrong? I was under the impression that I could factor common behavior up the tree and only implement distinct behavior at lower levels. Did I just do something wrong? Is there a way to accomplish what I want to accomplish?
Acquisition does not always work as you'd first expect it to do. First of all, an acquired object, that accesses other attributes and objects itself, will do a lookup of those attributes and objects in its own context first. Your DTML Document index_html will therefore first look up folderName in its own context, which it will find there. This is something that tripped me up as well, even 6 months after first starting to look at Zope. Read the following document carefully, especially the bit about 'Acquiring Acquiring objects': http://www.digicool.com/releases/ExtensionClass/Acquisition.html There is a solution to this: DTML _Methods_ (and SQL Methods) are seen as methods of their parent. This basically means that the acquisition search order doesn't start at themselves (like with DTML Documents), but at their parent object, _after acquisition_. So if you changed your index_html to a DTML Method, and called: http://localhost:8080/Testing/SubTest Your index_html object would be acquired into SubTest, and called. It then starts to look up variables as if it where SubTest itself. It then will find folderName in Subtes, include it in the generated output, and, as expected, you'll get 'SubTest' returned to your browser. -- Martijn Pieters, Web Developer | Antraciet http://www.antraciet.nl | Tel: +31-35-7502100 Fax: +31-35-7502111 | mailto:mj@antraciet.nl http://www.antraciet.nl/~mj | PGP: http://wwwkeys.nl.pgp.net:11371/pks/lookup?op=get&search=0xA8A32149 ------------------------------------------
participants (3)
-
James W. Howe -
Johan Carlsson -
Martijn Pieters