[Zope] Re: Zope 2 and Zope 3
Geoff Gerrietts wrote: [some paragraphs about scaling which I can't really comment on] As for source control, I figure all of your code (DTML, yuck) is in the ZODB. This went out of fashion a long time ago, most serious development happens on the filesystem (in Python packages) which can obviously be source-controlled very well. A good deal of the code is in the ZODB, because it's (yuck) DTML documents, yes. We have another sizable chunk that lives on the filesystem. The challenge in managing the build/deploy process has been trying to find a way to keep those two conjoined. I suspect that any dependency on the ZODB at all is likely to be considered an impediment, and my quick eyeballing says it's not gone or even really optional under Zope 3 (but I'm sure we could work something out.) The ZODB is still there in Zope 3, but Zope 3 is much less dependent on it. In fact, there are people who are using Zope 3 without any ZODB instance at all, but directly talk to a relational database. Currently this requires a bit of hacking, but our good man Chris Withers has expressed interest in making the next release of Zope 3 more flexible in this regard. What's already possible is to have a minimal ZODB with only one persistent object: a SQLObject or SQLAlchemy container. That's a container (e.g. like a folder) whose items aren't persisted in the ZODB but come from a relational database. You seem to already have come to the conclusion that having code live in both the filesystem and the ZODB can be painful. I think a good first step for you would be to migrate your remaining ZODB-based code to the filesystem. That not only makes deployment easier, you're also free to refactor it then (e.g. using Zope 3 idioms). In the long run, this also means saying good-bye to things like External Methods because they require code on the filesystem and configuration in the ZODB. Regarding "oh you'll hafta start over", it's pretty much true, if you want to switch to Zope 3. But nobody says you have to. You can do it incrementally by porting some of your app's functionality to Zope 3 components step by step (as mentioned already, most work in Zope 2). Big projects like Plone aren't rewriting their whole codebase either, but new development is completely Zope3-based. Their target platform still is Zope 2, though. "You'll hafta start over" is only ever true in degrees, though, and I'm still trying to figure out what the degrees are. The business logic will still be the same. Can we hack together a DTML processor that allows us to export the DTML documents to the filesystem and publish them from there? Maybe, I don't know. Did someone else already do that? Don't know that either. How dramatically will our products need to change? Probably 75% of our Python code is written in a bastardized form of ExternalMethod; we might be able to leverage that unfortunate architectural choice to significant advantage during our porting phase. These are the kinds of questions I have, and I think the answers probably aren't easy or someone would have offered them up. It is certainly possible to execute filesystem-based DTML (using Globals.DTMLFile). It's hard to say how much your products will have to change without knowing the codebase. If you have external methods, it shouldn't be too hard to refactor this code into components in "proper" Python modules. To make things easy, the external methods could stay at first, for backwards compatibility. I would take this one step at a time (that's at least what everybody else seems to do and it looks like it's working out for everybody). Someone's going to need to learn enough Zope 3 to answer the questions. I'm not sure it will be me, but maybe. :) Well, whoever it'll be, there are books (e.g. http://worldcookery.com) and trainings (e.g. http://trizpug.org/boot-camp/camp5) that should help with the learning :). -- http://worldcookery.com -- Professional Zope documentation and training Next Zope 3 training at Camp5: http://trizpug.org/boot-camp/camp5 ___ Zope maillist - Zope@zope.org http://mail.zope.org/mailman/listinfo/zope ** No cross posts or HTML encoding! ** (Related lists - http://mail.zope.org/mailman/listinfo/zope-announce http://mail.zope.org/mailman/listinfo/zope-dev )
Re: [Zope] Error trapping Duplicate entry in a database
-- Original message from [EMAIL PROTECTED]: -- Hi, Thanks for the pointers but how can I trap for the first error. I am populating a list and if the user makes a mistake and uses the wrong application. I want to display only one message and the link to the correct application. With this code the message is repeated for each entry. This class already exist in the database - Please use Update This class already exist in the database - Please use Update This class already exist in the database - Please use Update ... I just want to stop it after the first error. Thanks in advance, Larry--- Begin Message --- ___ Zope maillist - Zope@zope.org http://mail.zope.org/mailman/listinfo/zope ** No cross posts or HTML encoding! ** (Related lists - http://mail.zope.org/mailman/listinfo/zope-announce http://mail.zope.org/mailman/listinfo/zope-dev ) --- End Message --- ___ Zope maillist - Zope@zope.org http://mail.zope.org/mailman/listinfo/zope ** No cross posts or HTML encoding! ** (Related lists - http://mail.zope.org/mailman/listinfo/zope-announce http://mail.zope.org/mailman/listinfo/zope-dev )
Re: [Zope] Error trapping Duplicate entry in a database
It would be much easier (and preferable) to handle the data processing activities in python (a script or external method) and just use DTML to display the results. You could easily handle the looping, testing in python and then just return 'success' or 'failure' which your DTML method could test for and then display an appropriate message to the user. Jonathan P.S. please don't post in HTML... - Original Message - From: [EMAIL PROTECTED] To: zope@zope.org Sent: Thursday, February 15, 2007 9:34 AM Subject: Re: [Zope] Error trapping Duplicate entry in a database -- Original message from [EMAIL PROTECTED]: -- Hi, Thanks for the pointers but how can I trap for the first error. I am populating a list and if the user makes a mistake and uses the wrong application. I want to display only one message and the link to the correct application. With this code the message is repeated for each entry. student_score1_temp[loop_counter])"> This class already exist in the database - Please use Update This class already exist in the database - Please use Update This class already exist in the database - Please use Update ... I just want to stop it after the first error. Thanks in advance, Larry ___ Zope maillist - Zope@zope.org http://mail.zope.org/mailman/listinfo/zope ** No cross posts or HTML encoding! ** (Related lists - http://mail.zope.org/mailman/listinfo/zope-announce http://mail.zope.org/mailman/listinfo/zope-dev ) ___ Zope maillist - Zope@zope.org http://mail.zope.org/mailman/listinfo/zope ** No cross posts or HTML encoding! ** (Related lists - http://mail.zope.org/mailman/listinfo/zope-announce http://mail.zope.org/mailman/listinfo/zope-dev )
Re: [Zope] Error trapping Duplicate entry in a database
Hi, Thanks for the response, can you point me to some examples of python code that will handle this situation. Sorry for th html... Thanks, Larry -- Original message -- From: "Jonathan" <[EMAIL PROTECTED]> > It would be much easier (and preferable) to handle the data processing > activities in python (a script or external method) and just use DTML to > display the results. You could easily handle the looping, testing in python > and then just return 'success' or 'failure' which your DTML method could > test for and then display an appropriate message to the user. > > > Jonathan > > P.S. please don't post in HTML... > > > > - Original Message - > From: [EMAIL PROTECTED] > To: zope@zope.org > Sent: Thursday, February 15, 2007 9:34 AM > Subject: Re: [Zope] Error trapping Duplicate entry in a database > > > > > -- Original message from [EMAIL PROTECTED]: -- > > > Hi, > > Thanks for the pointers but how can I trap for the first error. I am > populating a list and if the user makes a mistake and uses the wrong > application. I want to display only one message and the link to the correct > application. > > With this code the message is repeated for each entry. > > student_score1_temp[loop_counter])"> > > > > > > This class already exist in the database - Please use Update > > > > This class already exist in the database - Please use Update > This class already exist in the database - Please use Update ... > > I just want to stop it after the first error. > > Thanks in advance, > > Larry > > > > ___ > Zope maillist - Zope@zope.org > http://mail.zope.org/mailman/listinfo/zope > ** No cross posts or HTML encoding! ** > (Related lists - > http://mail.zope.org/mailman/listinfo/zope-announce > http://mail.zope.org/mailman/listinfo/zope-dev ) > ___ Zope maillist - Zope@zope.org http://mail.zope.org/mailman/listinfo/zope ** No cross posts or HTML encoding! ** (Related lists - http://mail.zope.org/mailman/listinfo/zope-announce http://mail.zope.org/mailman/listinfo/zope-dev )
Re: [Zope] Error trapping Duplicate entry in a database
- Original Message - From: <[EMAIL PROTECTED]> To: "Jonathan" <[EMAIL PROTECTED]>; Sent: Thursday, February 15, 2007 10:24 AM Subject: Re: [Zope] Error trapping Duplicate entry in a database Hi, Thanks for the response, can you point me to some examples of python code that will handle this situation. Here is the latest (i think) zope book: http://www.plope.com/Books/2_7Edition/view The sections on scripting and the API Reference should point you in the right direction. Jonathan ___ Zope maillist - Zope@zope.org http://mail.zope.org/mailman/listinfo/zope ** No cross posts or HTML encoding! ** (Related lists - http://mail.zope.org/mailman/listinfo/zope-announce http://mail.zope.org/mailman/listinfo/zope-dev )
[Zope] add user from python problem
The following script adds a new folder with a user folder inside it and then adds a user to the user folder. It works fine but the new user is unable to log in until I go to the ZMI and go to change the user password. I do not need to do anything more than press the change button on this page for the user to be then able to log in using the password specified in the script. Given that I will be adding up to 2000 users at a time with an ammended version of this script, this could become a little inconvenient. Am I doing something wrong? Zope Version (Zope 2.9.0, python 2.4.2, win32) Python Version 2.4.2 (#67, Sep 28 2005, 12:41:11) [MSC v.1310 32 bit (Intel)] System Platform win32 roles='Manager' domains=[] password='go' confirm='go' name='BogeySmith' forms='7L' forms_obj = getattr(context, forms) forms_obj.manage_addFolder(name) path = str(forms+'/'+name) path_obj = context.restrictedTraverse(path) path_obj.manage_addUserFolder() path2 = str(forms+'/'+name) path_obj2 = context.restrictedTraverse(path2) userfolder = getattr(path_obj2, 'acl_users') userfolder.userFolderAddUser(name, password,roles,domains) regards garry ___ Zope maillist - Zope@zope.org http://mail.zope.org/mailman/listinfo/zope ** No cross posts or HTML encoding! ** (Related lists - http://mail.zope.org/mailman/listinfo/zope-announce http://mail.zope.org/mailman/listinfo/zope-dev )
Re: [Zope] add user from python problem
--On 15. Februar 2007 17:34:10 + garry saddington <[EMAIL PROTECTED]> wrote: roles='Manager' As the name 'roles' indicates you have to specify a sequence of roles and not a *single* one. -aj pgpsro62PsdI0.pgp Description: PGP signature ___ Zope maillist - Zope@zope.org http://mail.zope.org/mailman/listinfo/zope ** No cross posts or HTML encoding! ** (Related lists - http://mail.zope.org/mailman/listinfo/zope-announce http://mail.zope.org/mailman/listinfo/zope-dev )
Re: [Zope] Re: Zope 2 and Zope 3
On Thu, Feb 15, 2007 at 11:50:38AM +0100, Philipp von Weitershausen wrote: > What's already possible is to have a minimal ZODB with only one > persistent object: a SQLObject or SQLAlchemy container. That's a > container (e.g. like a folder) whose items aren't persisted in the ZODB > but come from a relational database. This works fine in a Zope 2 / Five world too. We have apps that have nothing in the ZODB but a Z*DA instance. Then we have zope 3 views and adapters that acquire that instance and use it to talk to the database, using ZSQL to build the queries. We haven't drunk the ORM cool-aid yet. :) In other words: The ZODB may be there but you can pretty much ignore it if you don't need it :) > You seem to already have come to the conclusion that having code live in > both the filesystem and the ZODB can be painful. I think a good first > step for you would be to migrate your remaining ZODB-based code to the > filesystem. That not only makes deployment easier, you're also free to > refactor it then (e.g. using Zope 3 idioms). In the long run, this also > means saying good-bye to things like External Methods because they > require code on the filesystem and configuration in the ZODB. +1 Here's my off-the-cuff attempt at "How To Safely Move A Big Legacy App Out of the ZODB". First, get and install FSDump (google for it). Add a Dumper to a folder containing DTML (it works recursively on child folders too), configure the Dumper, click the "Save and dump" button, and voila, there's your code on the filesystem. It'll store properties too, in files named like *.metadata. Then you need a way to use the stuff from the filesystem. FileSystemSite would be ideal, because it understands those .metadata files: http://www.infrae.com/download/FileSystemSite Using it is a bit non-obvious if you're not familiar with CMF, from which it was extracted. You'll need to create a minimal Product on the filesystem that consists of: - a directory in Products, let's call it Products/mystuff - an __init__.py at Products/mystuff/__init__.py that looks like this: from Products.FileSystemSite.DirectoryView import registerDirectory registerDirectory('mysubdir, globals()) - a subdirectory at Products/mystuff/mysubdir. Put the files and directories you dumped in here. That's it. Restart Zope, add an instance of Filesystem Directory View, and you'll be prompted for the directory to choose; the only choice will be the "mysubdir" you registered above. Click OK and you're done. Check this new Product into source control and rejoice. One gotcha - files ending in .dtml will be treated as DTML Methods, not DTML Documents. So if you relied on the semantic difference between those, you will have some issues to sort out. Another gotcha - you'll need another plan to deal with those External Methods, since AFAIK neither Dumper nor FileSystemSite will handle them. One expedient if slightly tedious technique would be to just move the External Method files out of Extensions/ and into $INSTANCE_HOME/lib/python/. Then use calls to allow_module() so they can be imported by through-the-web code (google will tell you more about that). Then, delete each external method from the ZMI and in its place add a Script (Python) with the same id. Such a script would have a body something like: from my_ext_method_module import myExternalMethodFunction return myExternalMethodFunction(arguments) Once that's done, those scripts can be Dumped into your filesystem code, and all the DTML that includes calls to them should work. A final gotcha - if you have ZClasses, I can't help you :) At this point, you have the same application you started with, it's just on the filesystem. Not as clean as a rewrite, but a hell of a lot more expedient - faster and less risky. Next you'll want to start adding regression tests to your product (ZopeTestCase and Zelenium might be useful tools). Then you have a safety net so you can confidently start refactoring as needed. *This* is when you can start thinking about rewriting stuff :-) I'd put this email somewhere on zopewiki.org, but it seems to be down at the moment (Bad Gateway). > It is certainly possible to execute filesystem-based DTML (using > Globals.DTMLFile). Right. But that's a bit of a pain when you have dozens or hundreds of DTML methods and your first priority is just to get stuff out of the ZODB and into source control without breaking anything. -- Paul Winkler http://www.slinkp.com ___ Zope maillist - Zope@zope.org http://mail.zope.org/mailman/listinfo/zope ** No cross posts or HTML encoding! ** (Related lists - http://mail.zope.org/mailman/listinfo/zope-announce http://mail.zope.org/mailman/listinfo/zope-dev )
[Zope] What happened to FreeZope?
Does anyone know what happened to FreeZope? It looks like my site (and all other member sites I tried) are gone. Features like registration & bug reporting are broken. thanks Daniel ___ Zope maillist - Zope@zope.org http://mail.zope.org/mailman/listinfo/zope ** No cross posts or HTML encoding! ** (Related lists - http://mail.zope.org/mailman/listinfo/zope-announce http://mail.zope.org/mailman/listinfo/zope-dev )
Re: [Zope] add user from python problem
On Thu, 2007-02-15 at 18:58 +0100, Andreas Jung wrote: > > --On 15. Februar 2007 17:34:10 + garry saddington > <[EMAIL PROTECTED]> wrote: > > > > > > > > > > roles='Manager' > > As the name 'roles' indicates you have to specify a sequence of roles > and not a *single* one. > > -aj Thanks this has fixed it but I still have questions: 1/Why can I specify only one when adding a user in the ZMI? 2/What if I only want one role for the user? 3/Why does it accept the one role from my script - it is highlighted when I go to the ZMI? Regards Garry ___ Zope maillist - Zope@zope.org http://mail.zope.org/mailman/listinfo/zope ** No cross posts or HTML encoding! ** (Related lists - http://mail.zope.org/mailman/listinfo/zope-announce http://mail.zope.org/mailman/listinfo/zope-dev )
Re: [Zope] add user from python problem
--On 15. Februar 2007 18:31:46 + garry saddington <[EMAIL PROTECTED]> wrote: On Thu, 2007-02-15 at 18:58 +0100, Andreas Jung wrote: --On 15. Februar 2007 17:34:10 + garry saddington <[EMAIL PROTECTED]> wrote: > > > > roles='Manager' As the name 'roles' indicates you have to specify a sequence of roles and not a *single* one. -aj Thanks this has fixed it but I still have questions: 1/Why can I specify only one when adding a user in the ZMI? Isn't ['Manager'] a sequence of roles? A sequence of one role? 2/What if I only want one role for the user? See above. 3/Why does it accept the one role from my script - it is highlighted when I go to the ZMI? -aj pgpSPj5pRJLOj.pgp Description: PGP signature ___ Zope maillist - Zope@zope.org http://mail.zope.org/mailman/listinfo/zope ** No cross posts or HTML encoding! ** (Related lists - http://mail.zope.org/mailman/listinfo/zope-announce http://mail.zope.org/mailman/listinfo/zope-dev )
Re: [Zope] cpu load 99 percent a lot in plone evinironment
Philip Kilner wrote: > Hi Robert (Jamie?), Most people call me Jamie, but Robert is fine, and it's what it says on all my official documents. > AHAH does not seem to be much discussed here - it's worth reading: - > > http://microformats.org/wiki/rest/ahah > & > http://www.gizax.it/ahahsection/ > > (I have based my work on the script in the second link) > > Short version: uses AJAX-like technique of rewriting the HTML using > JavaScript, but returns pure HTML as opposed to XML or JSON, so trivial > to implement, and can degrade gracefully. Very useful. I've based my system on the first link because I didn't need to use POSTs, I just add ?foo=bar to the end of the URL and get it as normal. I added the ability to load a list of urls and element ids one after the other, then only activate the submit button at the bottom of the page when the whole form was loaded. This means the top of the page loads quickly, and the rest loads section by section before people scroll down to it. I was thinking I would have to do something like this, and your links made it really easy. Robert (Jamie) Munro ___ Zope maillist - Zope@zope.org http://mail.zope.org/mailman/listinfo/zope ** No cross posts or HTML encoding! ** (Related lists - http://mail.zope.org/mailman/listinfo/zope-announce http://mail.zope.org/mailman/listinfo/zope-dev )
Re: [Zope] add user from python problem
On Thu, 2007-02-15 at 19:35 +0100, Andreas Jung wrote: > > --On 15. Februar 2007 18:31:46 + garry saddington > <[EMAIL PROTECTED]> wrote: > > > On Thu, 2007-02-15 at 18:58 +0100, Andreas Jung wrote: > >> > >> --On 15. Februar 2007 17:34:10 + garry saddington > >> <[EMAIL PROTECTED]> wrote: > >> > >> > >> > > >> > > >> > > >> > roles='Manager' > >> > >> As the name 'roles' indicates you have to specify a sequence of roles > >> and not a *single* one. > >> > >> -aj > > Thanks this has fixed it but I still have questions: > > > 1/Why can I specify only one when adding a user in the ZMI? > > Isn't ['Manager'] a sequence of roles? A sequence of one role? Of course - sorry > > > 2/What if I only want one role for the user? > > See above. > > > 3/Why does it accept the one role from my script - it is highlighted > > when I go to the ZMI? > What is confusing me is that with the problem script the user seems to be added with the correct role but only activated after the change user button is pressed. ie. The script does not report any errors and appears to complete. Anyway thanks for your help regards Garry ___ Zope maillist - Zope@zope.org http://mail.zope.org/mailman/listinfo/zope ** No cross posts or HTML encoding! ** (Related lists - http://mail.zope.org/mailman/listinfo/zope-announce http://mail.zope.org/mailman/listinfo/zope-dev )
[Zope] problem with input elements and unicode/utf-8
Zope: 2.10.2 Python: 2.4.4 I am not sure if this is a zope problem or a browser problem or a lack of my understanding of webservers and/or utf-8 & unicode but here it is: I have a page template with a form and a textarea input element. The value for the element comes from a database (MySQL) field. The database field contains utf-8 encoded text (includes the bullet and registered characters). When the page is displayed in Firefox (version 1.5.0.9) it displays fine. However when the page is displayed in IE 6 (or 7), it shows garbage characters for the bullet and registered characters. What I find as strange is that if the same field is displayed as just text (i.e. just in a td element rather than in an input element) it displays fine in IE. My page template has the following headers: Firefox reports the page encoding as UTF-8 with meta: content-type text/html; charset=utf-8 Input element: I have also tried adding accept-charset="utf-8" to the form element I have been able to fix the problem by adding this to my zope.conf: HTTP_ACCEPT_CHARSET utf-8 I don't understand why this "fixes" the problem or if it is the correct way to resolve this. Any comments would be appreciated Thanks, Daryl. -- Daryl Daly, B.Sc. Chief Programmer/Business Analyst [EMAIL PROTECTED] Norco Products Ltd. Really Cool Bikes!!! Norco__OTel: 604-552-2930 ext 205 Performance=\ \Fax: 604-552-2948 Bikes (=)/(=) www.norco.com 1465 Kebet Way, Port Coquitlam, British Columbia, V3C 6L3 ___ Zope maillist - Zope@zope.org http://mail.zope.org/mailman/listinfo/zope ** No cross posts or HTML encoding! ** (Related lists - http://mail.zope.org/mailman/listinfo/zope-announce http://mail.zope.org/mailman/listinfo/zope-dev )
Re: [Zope] Re: Extract Files from ZODB
Carlosfocker wrote at 2007-2-14 22:46 +: >> "If Plone is no longe working" means that the "Plone" UI no longer >> works but the Zope Management Interface still operates, then you >> have hope that you can recover your files. >> >This would be my current situation as far as "Plone is no longer working". I >cant get to any pages inside of the plone instance but the ZMI is accessiable. You would access the ZODB directly (under *nix with "bin/zopectl debug"; for Windows, there are equivalent solutions (search the mailing list archives)). You would activate there a function that recursively traverses your Plone instance (maybe using "OFS.FindSupport.ZopeFind"), detects objects valuable for you (probably "CMFFile" objects) and store their content ("str(obj.data)") into the file system. -- Dieter ___ Zope maillist - Zope@zope.org http://mail.zope.org/mailman/listinfo/zope ** No cross posts or HTML encoding! ** (Related lists - http://mail.zope.org/mailman/listinfo/zope-announce http://mail.zope.org/mailman/listinfo/zope-dev )
Re: [Zope] problem with input elements and unicode/utf-8
--On 15. Februar 2007 11:40:49 -0800 Daryl Daly <[EMAIL PROTECTED]> wrote: What I find as strange is that if the same field is displayed as just text (i.e. just in a td element rather than in an input element) it displays fine in IE. My page template has the following headers: This should be sufficient to display utf8 content. Firefox reports the page encoding as UTF-8 with meta: content-type text/html; charset=utf-8 Input element: I have also tried adding accept-charset="utf-8" to the form element This has applies only when you submit the form. I have been able to fix the problem by adding this to my zope.conf: HTTP_ACCEPT_CHARSET utf-8 Should not play a role here. I don't understand why this "fixes" the problem or if it is the correct way to resolve this. Unlikely. Does it work with older Zope versions? -ak pgpfw7kHISCwM.pgp Description: PGP signature ___ Zope maillist - Zope@zope.org http://mail.zope.org/mailman/listinfo/zope ** No cross posts or HTML encoding! ** (Related lists - http://mail.zope.org/mailman/listinfo/zope-announce http://mail.zope.org/mailman/listinfo/zope-dev )
Re: [Zope] problem with input elements and unicode/utf-8
>> >> I have been able to fix the problem by adding this to my zope.conf: >> >> HTTP_ACCEPT_CHARSET utf-8 >> > > Should not play a role here. However, if I remove it & restart zope, the problem comes back :) > > >> >> I don't understand why this "fixes" the problem or if it is the correct >> way to resolve this. > > Unlikely. Does it work with older Zope versions? > Previously the application was running in Zope 2.8 without this problem. I have been making various changes to the application to make it work with 2.10 (fixing unicode errors, etc) but the database data has not changed (has always been utf-8) and I don't think the way the input element is generated has changed. If it makes a difference, the page header (tal:define="dummy python:request.RESPONSE.setHeader('Content-Type', 'text/html;; charset=utf-8');") is something I have added recently (in conjunction with the upgrade). Previously only the meta http-equiv ... was on the page. > -ak > Daryl ___ Zope maillist - Zope@zope.org http://mail.zope.org/mailman/listinfo/zope ** No cross posts or HTML encoding! ** (Related lists - http://mail.zope.org/mailman/listinfo/zope-announce http://mail.zope.org/mailman/listinfo/zope-dev )
Re: [Zope] cpu load 99 percent a lot in plone evinironment
Hi Jamie, Robert (Jamie) Munro wrote: > Very useful. I've based my system on the first link because I didn't > need to use POSTs, I just add ?foo=bar to the end of the URL and get it > as normal. I added the ability to load a list of urls and element ids > one after the other, then only activate the submit button at the bottom > of the page when the whole form was loaded. This means the top of the > page loads quickly, and the rest loads section by section before people > scroll down to it. > > I was thinking I would have to do something like this, and your links > made it really easy. > I'm really pleased to hear it. I came across AHAH as I was investigating AJAX. I'd been dreading using AJAX, partly because it would mean a good deal of reworking of existing applications, partly because of the learning curve. For my applications, AHAH has turned out to be a better solution, and it's a bonus that it is so easy to implement. -- Regards, PhilK 'let's hear it for the vague blur' ___ Zope maillist - Zope@zope.org http://mail.zope.org/mailman/listinfo/zope ** No cross posts or HTML encoding! ** (Related lists - http://mail.zope.org/mailman/listinfo/zope-announce http://mail.zope.org/mailman/listinfo/zope-dev )