Voici le code du formulaire :
$requete = "SELECT opt_id, opt_nom FROM options_util";
$reponse = mysql_query($requete);
//=================================
// Création du formulaire.
//=================================
// Entête.
$form = new htmlForm('Utilisateur', '?add=1', 'post', 'return verif_form(this)');
$form->setReadOnly($lecture);
// Champs de saisi.
$form->addHidden('id', $id);
$form->addText('nom', 'Nom :', 75, '', $nom);
$form->addText('prenom', 'Prenom :', 75, '', $prenom);
$form->addText('login', 'Login :', 20, '', $login);
$form->addText('password', 'password :', 6, '', $password);
// -- Options utilisateur.
$opt_util = new htmlOptionGroup();
while($resultat=mysql_fetch_array($reponse))
$opt_util->appendChild( new htmlOption('checkbox', 'options_util[]', $resultat['opt_id'], $resultat['opt_nom'], array_key_exists($resultat['opt_id'], $temp_options_util)));
$form->addOptionsGroup('options_util[]', 'Modifications :', $opt_util);
// Button "Save/Cancel/Delete".
$form->addButtonSave();
$form->addButtonCancel();
if($id) $form->addButtonDelete();
// Affichage du formulaire.
$form->display();
Et voici les classes (c'est pas moi qui l'est fait), je serais pas trop l'expliqué, je comprend pas grand chose à tout ce basare :
<?php
class htmlOptionGroup extends tree {
/// Retourne le code html généré pour l'affichage du groupe d'options.
function getHtml($readonly=false){
$html = '';
foreach( $this->childNodes as $child ){
$html .= $child->getHtml($readonly);
}
return $html;
}
/// Retourne le script JavaScript permettant le cochage/décochage assisté
/// Nécessite les classes JavaScript présentes dans le fichier cascOptions.js.
function getCascOptions(){
$script = "\n<script type=\"text/javascript\"><!--\n";
foreach( $this->childNodes as $child ){
$script .= "var ".$child->getJavaScriptId()." = new cascOption('".$child->getId()."');\n";
foreach( $child->childNodes as $subchild )
$script .= $subchild->getJavascript( $child->getJavaScriptId() );
}
$script .= "//--></script>\n";
return $script;
}
}
/** Option html, quelle soit de type checkbox ou radio.
*
* Cette classe est utilisée pour créer des options/sous options en cascade.
* L'ajout de sous options s'effectue via la méthode \c appendChild héritée de treeNode.
*
*/
class htmlOption extends treeNode {
var $type;
var $name;
var $id;
var $javascript_id;
var $value;
var $label;
var $checked;
var $title;
/// Constructeur
/// \param type Type d'option, radio ou checkbox
/// \param name Nom du champ
/// \param value Valeur du champ
/// \param label Libellé du champ
/// \param checked Booléen indiquant si l'option est pré-sélectionnée ou non
/// \param title Contenu de l'info bulle qui s'affichera lors du passage de la souris sur le champ
function htmlOption($type,$name,$value,$label,$checked=NULL,$title=NULL){
$this->type = $this->validType($type) ? $type : 'checkbox';
$this->name = $name;
$this->id = str_replace( '[', '', str_replace( ']', '', $name ) ).'-'.$value;
$this->javascript_id = str_replace( '-', '', $this->id );
$this->value = $value;
$this->label = $label;
$this->checked = $checked;
$this->title = $title ? $title : $label;
}
/// Retourne le code html généré pour l'affichage de l'option.
function getHtml($readonly=false){
$title = htmlspecialchars($this->title,ENT_QUOTES);
$checked = $this->checked ? ' checked="checked" ' : '';
$disabled = $readonly ? ' disabled' : '';
if( $this->type=='select' ){
if( sizeof($this->childNodes) ){
$html = "\t\t".'<optgroup label="'.$this->label.'">'."\n";
foreach( $this->childNodes as $child ){
$selected="";
if($child->checked)
$selected = "selected";
$html .= "\t\t\t".'<option '.$selected.' value="'.$child->value.'">'.$child->label.'</option>'."\n";
}
$html .= "\t\t</optgroup>\n";
}else{
$html = "\t\t".'<option '.$checked.' value="'.$this->value.'">'.$this->label.'</option>'."\n";
}
}else{
$html = "<input type=\"".$this->type."\" $disabled class=\"".$this->type."\" name=\"".$this->name."\" value=\"".$this->value."\" id=\"".$this->id."\" title=\"".$title."\" $checked /> <label id=\"lbl_".$this->id."\" for=\"".$this->id."\" title=\"".$title."\">".htmlspecialchars($this->label)."</label><br />";
if( $this->hasChildNodes() ){
$html .= '<div class="childOptions">';
foreach( $this->childNodes as $child ){
$html .= $child->getHtml($readonly);
}
$html .= '</div>';
}
}
return $html;
}
Message édité par PIGs_DarkSith le 20-03-2007 à 12:30:17