+---------------------------------------+
| class.liste.php v 1.12 - 06 avr 2006 |
| liste: french word, stands for list |
| Class used to build combo-lists |
| Pierre FAUQUE, pierre@fauque.net |
| http://www.fr-webdev.net/ |
+---------------------------------------+
+-----+
+------------+ 0,n / BUY \ 0,n +-----------+
| CLIENTS +-------+---------+-------+ PRODUCTS |
+------------+ \ qty / +-----------+
| idclient | +-----+ | idproduct |
| first_name | | product |
| last_name | | price |
+------------+ +-----------+
In that example, we need two definition list files (one for each Merise object) :
- clients.def.php
- products.def.php
clients.def.php :
-----------------
<? // clients.def.php
$table = "CLIENTS";
$champs = "idclient,last_name,first_name";
$ordre = "last_name,first_name";
$texte = "-- Choose the client --";
?>
products.def.php :
------------------
<? // products.def.php
$table = "PRODUCTS";
$champs = "idproduct,product";
$ordre = "product";
$texte = "-- Choose the product --";
?>
NB: The first element of the variable $champs (fields) must be the identifier.
That element (identifier) will be wrote in the value attribute:
=> <option value="14">DOE John (14 is the idclient)
To instanciate the clients list and the products list :
-------------------------------------------------------
$CLclients = new liste("clients"); // the file which will be read : clients.def.php
$CLproducts = new liste("products"); // the file which will be read : products.def.php
(NB: Just for me: the variables whose name begins by $CLxxx mean Combo-List)
To write the lists :
--------------------
$CLclients->write();
$CLproducts->write();
// =================================================================
EXAMPLE: Form script
<?
require("connexion.php"); // Connexion scripts (provided)
require("class.liste.php"); // The class liste itself
$CLclients = new liste("clients"); // instanciate the clients list
$CLproducts = new liste("products"); // Instanciate the products list
?>
<form method="post" action="save.php">
Client : <? $CLclients->write(); ?><br>
Product : <? $CLproducts->write(); ?><br>
Quantity : <input type="text" size="5" name="qty"><br>
<input type="submit" value="Validate">
</form>
// ------------------------------------------------------------------
EXAMPLE: Save script
<?
require("connexion.php");
$request = "insert into BUY (idclient,idproduct,qty) values ('$idclient','$idproduct','$qty');
$result = ExecRequete($request,$connexion); // ExecRequete = function in the connexion script.
echo "Purchase stored.";
?>
// =================================================================
The names of the lists are the names of the identifiers
(=> <select name="idclients">... or <select name="idproduct">...)
To give an other name than the identifier, you have to provide a second parameter :
$CLclients = new liste("clients","idc"); // => <select name="idc">...
$CLproducts = new liste("products","idp"); // => <select name="idp">...
or change the attribute 'ctrlname' before writing :
$CLclients = new liste("clients"); $CLclients->ctrlname = "idc";
or use the 'changectrlname()' method before writing :
$CLclients = new liste("clients"); $CLclients->changectrlname("idc");
---
To use a style in the list, you can provide a third parameter during instanciation.
Syntax: $variable = new liste("filedef","ctrlname","style").
The style parameter must be in the third position even the ctrlname is empty
ex: $CLclients = new liste("clients","","stcli");
You can also modifiy the 'style' attribute or use the 'usestyle()' method
before using the 'write()' method :
$CLproducts = new liste("products");
$CLproducts->style = "style12"; or $CLproducts->usestyle("style12");
then:
$CLproducts->write();
---
If the list is too large because the text in it is too long, you can cut
the text to have : "begin text .../... end text" with a provided width.
To do this, you can either modify the 'tronque' attribute or use the
'tronque()' method :
$CLproducts = new liste("products");
$CLproducts->tronque = 40; or $CLproducts->tronque(40);
then:
$CLproducts->write();
---
To display a list with a preselected element, you can indicate the identifier
of that element using the 'write()' method :
$CLclients->write(37); or $CLclients->write($numclient);
---
To display just the text of an element but not that preselected element in a list,
use a second parameter (1) in the 'write()' method :
$CLclients->write(37,1); or $CLclients->write($numclient,1);
---
In the two previous examples the elements are preselected with their identifers.
It's possible to preselect an element by a text.
ex: towns.def.php contains : $champs = "idcity,town";
$CLtowns->write("London"); or $CLtowns->write("London",1);
---
To know the number of elements hold in the list, use the 'nbelements()' method :
if($CLclients->nbelements() > 500) { instructions; ... }
---
To display the MySQL request (when debugging) use the 'display()' method :
$CLclients->display();
---
Others methods of the class :
-----------------------------
$CLclients->version(); // version 1.9 du 05 oct 2005. etc...
$CLclients->numversion(); // => 1.9
$CLclients->checkversion(); // no new | new version, new features, download link
$CLclients->debug(); // show all attributes of the class
$CLclients->showdoc(); // french documentation
Possible variables in the definition list file :
------------------------------------------------
$table = "table1[,table2]"; // must be there
$champs = "idfield,field1[,field2[,field n]]"; // must be there
$where = "condition1 [and|or condition2] [and|or condition n]"; // optional
$group = "field1[,field2[,field n]]"; // "group by". optional
$ordre = "field1[,field2[,field n]]"; // "order by". optional
$texte = "Initial text in the list"; // optional
$onchange = "javascript function()"; // js function to be executed. optional
$lignes = 6; // for a combo with several rows
NB: - All information in square brackets [] are optional.
- The first field in the '$champs' variable must be the identifier of the Merise object
- The provided connexion scripts must be used. The class use the $connexion variable which
is defined in these scripts (MySQL link).
If you have your own connexion scripts, may be you have to modify the $cnx variable in the
constructor and in the 'write()' method of the class.
- This class can be stored either in the same directory than the script using it or in the
directory designed by 'include_path' in php.ini (this place is better than the other one).
You can do any observations at the URL:
http://www.fr-webdev.net/index.php?p=cliste.bug.php // to announce a bug
http://www.fr-webdev.net/index.php?p=cliste.wl.php // to emit a wish
---
Thank you for your attention and your feedback on the website.
Pierre FAUQUE, pierre@fauque.net
Paris, 2006-04-06
|