Re: [Zope] form question

2001-01-23 Thread jpenny

On Mon, Jan 22, 2001 at 07:55:28PM +0100, Dieter Maurer wrote:
 Oliver Vecernik writes:
   I'm designing an application gathering data with forms. Navigation
   should be done with Prev and Next buttons. As long as I'm not leaving
   the form data should be entered, processed and the *same* or another
   form should be displayed, depending on input of the user.
   
   So far I'm able to gather data, store them in a database, but can
   anybody give me a clue or point me to some docs how to control which
   form should be displayed next? It should depend on users input of let's
   say a text field.
 Look for the "RESPONSE.redirect" method.
 
 
 Dieter

Dieter, as usual, gave a good succinct answer.  But in this case, I
think that the problem is in the way the question is framed, and not
the answer.

I am going to give a completely different answer, based on what I think
the original questioner really needed, it will be a bit long.

I am assuming that the application lays in a folder called MyApplication.

I am going to use a particular coding style that I call "going nowhere",
it is actually a state machine.  I am going to use hidden variables to
hold state, you can also use cookies, database connections or other
mechanisms.

index_html is just a chain of if statements that encode what to
display next.

For example:

dtml-if "not REQUEST.has_key('current_state')"
  dtml-var entry_form
dtml-elif "current_state=='process_entry' and action=='Next'"
  dtml-var next_form
dtml-elif "current_state=='next_entry' and action=='Prev'"
  dtml-var entry_form
 .
.
 .
/dtml-if

entry_form looks like

form action=. method=post
  input type=hidden name=current_state value="process_entry"
  input type=text size=15 name=my_variable
  input type=submit name=action value="Next"
/form

(This is where the "going nowhere" comes from.  All forms use
. as the action, so the browser never goes to another folder.)

Now, it should be easy to see how to modify index_html to handle
displaying a different form depending on the previous input.
Just put in in one of the tests.

-

To elaborate this just a bit, I also typically do an error_entry__form 
that looks like:

form action=. method=post
  font color = reddtml-var error_message/font
  input type=hidden name=current_state value="process_entry"
  input type=text size=15 name=my_variable value="dtml-var my_variable"
  input type=submit name=action value="Next"
/form

and change my index_html to look like:

dtml-if "not REQUEST.has_key('current_state')"
  dtml-var entry_form
dtml-elif "current_state=='process_entry' and action=='Next'"
  dtml-var handle_process_entry_next
dtml-elif "current_state=='next_entry' and action=='Prev'"
  dtml-var handle_process_entry_prev
 .
.
 .
/dtml-if

Then 

handle_process_entry_next looks like:

dtml-call "REQUEST.set('error_message', '')"
dtml-call canonify_process_entry_next_data
dtml-call check_process_next_errors
dtml-if "error_message != ''"
  dtml-var error_entry_form
dtml-else
  dtml-var next_form
/dtml-if

(canonify_... does approriate things like stripping, converting to a particular
case, etc.; check_... enforces data consistency conditions.)

  
This is not an original idea.  I saw it when I was pretty green, myself, and
really did not understand its attraction and power.  Here are what I now see
as the benefits.  All of the application is kept in a single folder.  The
index_html is boilerplate, essentially a single long if-statement.  The
canonify_ and check_ methods are likely to be very small also, and can be
implemented in any language.  The forms are essentially pure HTML, and can
be kept very simple (OK, the error_form has a smattering of very simple
DTML to reset the last value of the user's input).  Error handling is natural
and easy to do.  You do not have to redirect.
Redirection destroys your REQUEST, forcing you to do other things to hold
information.

The cost, only that an application's folder gets to be somewhat large.

Jim Penny

 
 ___
 Zope maillist  -  [EMAIL PROTECTED]
 http://lists.zope.org/mailman/listinfo/zope
 **   No cross posts or HTML encoding!  **
 (Related lists - 
  http://lists.zope.org/mailman/listinfo/zope-announce
  http://lists.zope.org/mailman/listinfo/zope-dev )
 

___
Zope maillist  -  [EMAIL PROTECTED]
http://lists.zope.org/mailman/listinfo/zope
**   No cross posts or HTML encoding!  **
(Related lists - 
 http://lists.zope.org/mailman/listinfo/zope-announce
 http://lists.zope.org/mailman/listinfo/zope-dev )




[Zope] form question

2001-01-22 Thread Oliver Vecernik

Hi all,

I'm a newbie to Zope and Python. Nevertheless I'd like to start with it.
I'm designing an application gathering data with forms. Navigation
should be done with Prev and Next buttons. As long as I'm not leaving
the form data should be entered, processed and the *same* or another
form should be displayed, depending on input of the user.

So far I'm able to gather data, store them in a database, but can
anybody give me a clue or point me to some docs how to control which
form should be displayed next? It should depend on users input of let's
say a text field.

Oliver

___
Zope maillist  -  [EMAIL PROTECTED]
http://lists.zope.org/mailman/listinfo/zope
**   No cross posts or HTML encoding!  **
(Related lists - 
 http://lists.zope.org/mailman/listinfo/zope-announce
 http://lists.zope.org/mailman/listinfo/zope-dev )




Re: [Zope] form question

2001-01-22 Thread Oliver Vecernik

"Farrell, Troy" wrote:
 
 Hmmm.  Sounds like you need to start with a Forms tutorial:
 http://hotwired.lycos.com/webmonkey/99/30/index4a.html
 Then, the Smarter Forms tutorial:
 http://www.zope.org/Members/jules/smarterforms_html

That's exactly what I was looking for. Thank's for the hint!

Oliver

___
Zope maillist  -  [EMAIL PROTECTED]
http://lists.zope.org/mailman/listinfo/zope
**   No cross posts or HTML encoding!  **
(Related lists - 
 http://lists.zope.org/mailman/listinfo/zope-announce
 http://lists.zope.org/mailman/listinfo/zope-dev )




Re: [Zope] form question

2001-01-22 Thread Dieter Maurer

Oliver Vecernik writes:
  I'm designing an application gathering data with forms. Navigation
  should be done with Prev and Next buttons. As long as I'm not leaving
  the form data should be entered, processed and the *same* or another
  form should be displayed, depending on input of the user.
  
  So far I'm able to gather data, store them in a database, but can
  anybody give me a clue or point me to some docs how to control which
  form should be displayed next? It should depend on users input of let's
  say a text field.
Look for the "RESPONSE.redirect" method.


Dieter

___
Zope maillist  -  [EMAIL PROTECTED]
http://lists.zope.org/mailman/listinfo/zope
**   No cross posts or HTML encoding!  **
(Related lists - 
 http://lists.zope.org/mailman/listinfo/zope-announce
 http://lists.zope.org/mailman/listinfo/zope-dev )