Newbie questions about Pliant

Newbie questions about Pliant

var scope

How does scope affect the value of a variable between
blocks? between windows (popup) ?
Message posted by maybe Bryan Hartwell on 2002/05/07 16:22:16
Consider the following code in a *.page file:
---
var Int x:=0
input "num: " x
popup execute.png
   text string:x
---
Even though the text command resides within the same *.page file,
is the variable x on line 4 considered separate from the definition
on lines 1-2 because it will appear in a new window (popup)?

I ask because of when I was experimenting with the factorial webpage example,
whenever I entered a single digit number the text output showed
something over a million (the function result seemed to reflect this value)

Bryan
Message posted by maybe pom on 2002/05/07 17:51:59
Popup (and button) actually create new pages, and some values are
passed from the caller page to these hidden pages "under the cover".

The reason of the difference of behaviour stands in the fundamental 
difference of intended use of popup and button: 
while button implicitely implies a submiting of any present form
(input fields, etc.), popup is mainly used to give some informations
before any form is submitted. Thus, variables are transmited as set in the
.page, but not as modified in the form. Thus, popup is some intermediate
between button (transmit variables and post form) and links (transmit and
post nothing).

I proposed a patch to allow popup to post the form when providing a "submit"
keyword to the popup directive.
Message posted by maybe Marcus on 2002/05/10 01:35:45
Suppose a database is populated with some data. 

The program below works as expected.

each p animal
 button "Edit"
   text animal:(keyof p):name

However, this one doesn't:

each p animal
 button "Edit"
   text p:name

More specifically, the name of the animal is not presented on the button-created 
page.

I cannot understand why...
Message posted by maybe pom on 2002/05/10 05:17:33
input uses the data path.
Did you mount your database ?
Message posted by maybe Marcus on 2002/05/10 14:08:00
> input uses the data path.

What exactly do you mean by that?

> Did you mount your database ?

Here is how I load my database:

animal_database load "/example/animal.pdb"
Message posted by maybe Hubert Tonneau on 2002/05/10 14:19:38
> > input uses the data path.
> What exactly do you mean by that?

HTTP is session less, so when you press a button, the browser is submitting
a form to the HTTP server. For each field in the form, the HTTP server needs
to know what database field is concerned. This is done through mapping
all databases, and all databases content into a general database tree (same
as the Unix files tree where you mount filesystems within the general name
space so that you can later access any file through a path).

Just select 'view page source' in your browser, and you will see the path
associated with each database field.

> animal_database load "/example/animal.pdb"

Should be:

  animal_database load "/example/animal.pdb" mount "/sample/animal"

so that your database be linked into the general databases tree.
Message posted by maybe Marcus on 2002/05/10 14:40:30
Excellent! It works.

Now let me try to get this straight, once and for all :-)

> Just select 'view page source' in your browser, and you will see the path
> associated with each database field.

When visiting which page?


> Should be:
>
>   animal_database load "/example/animal.pdb" mount "/sample/animal"
>
> so that your database be linked into the general databases tree.

What is this 'general database tree'? 
Message posted by maybe Hubert Tonneau on 2002/05/10 14:42:48
> When visiting which page?

Any page with an 'input' instruction applying to a database field as opposed
to a local variable.

What is this 'general database tree'? 

A name space, just as the Unix name space for files.
Message posted by maybe pom on 2002/05/10 17:28:32
When you "mount" your database, you give some entry point into the pliant database
"file system", the same way you do a mount of a filesystem on Unix.

As a consequence, your data get some "absolute path" made of two part:
a first part is the subpath corresponding to mount point of your database,
the last part is the relative path of your data in your database.

Now, when your page post a form with an input, it actually sends the whole
path. Then, the HTTP server cuts it back to find back the concerned database
and the relative path of the data in it. This done, modifications may be
performed.

As another consequence of the mount of the database, you may also access
your data using the data browser (this is the "datas" link on the homepage)
by going to the path you gave for the mount point.