par
sadeq » 14 juin 2007, 17:27
Voici une contribution concernant une solution objet (Listes liées)
Le principe est simple:
Une liste (listbox) a des options (items) où chaque option (item) est liée à une autre liste (listbox) et ainsi de suite.
Si on sélectionne une option dans une liste affichée, en principe, l'option choisie doit afficher sa liste sous-jascente.
Bonne lecture, je l'ai testé et ça marche
<?php
/*
Définition de l'objet "Item" élément d'une liste':
*/
class Item {
//Propriétés publiques
public $parent=null, $value="", $text="", $selected=false, $child=null;
//Méthodes publiques
//constructeur d'un Item appartenant à un parent ListBox et lié à un fils (child) ListBox
public function Item($parent, $value, $text=null, $selected=false, $child=null){
$this->parent=$parent;
$this->value=$value;
$this->text=$text?$text:$value;
$this->selected=$selected;
$this->child=$child;
}
//Item est-t-il sélectionné?
public function isSelected(){
$selectedValue = $this->parent &&$_POST?$_POST["{$this->parent->name}"]
:$this->parent &&$_GET?$_GET["{$this->parent->name}"]:$this->selected;
if ( $this->value == $selectedValue) $this->selected = true; else $this->selected = false;
return $this->selected;
}
//Affichage de l'Item
public function Show(){
//Trouver si l'Item est sélectionné
$selected = $this->isSelected()?" SELECTED ":"";
//Afficher la définition HTML de l'Item <OPTION>
echo
<<<HTML
<OPTION VALUE="$this->value" $selected >$this->text</OPTION>
HTML;
}
//Suppression de l'objet fils lié à cet Item
public function RemoveChild(){ $this->child=null; }
}
/*
Définition de l'objet "ListBox":
*/
class ListBox {
//Propriétés publiques:
public $title="", $id="", $name="", $value="", $size=1, $jsEvent="", $Items=array(), $visible=true;
//Méthodes publiques:
//Constructeur de la ListBox, items est la collection des options (objets Item)
public function ListBox($name=null, $title=null, $items=null){
$this->title = $title;
$this->name = $name;
$this->Fill($items); //remplit la liste par les items donnés
}
//Remplir la ListBox par les items donnés
public function Fill($items=array()){
if ($items && count($items)>0) foreach($items as $item){
//Ajouter les items un par un dans la ListBox
$this->AddItem($item->value, $item->text, $item->selected, $item->child);
}
}
//Ajouter un Item donné
public function AddItem($value, $text=null, $selected=false, $child=null){
//Un item est affecté comme un objet fils de la ListBox (this) (les items sont indexés par value)
$this->items[$value] = new Item($this, $value, $text, $selected, $child);
}
//Déterminer quel Item est sélectionné
public function SelectedItem(){
if ($this->items && count($this->items)>0) foreach($this->items as $item) {
//si l'Item est sélectionné, le retourner
if ($item->isSelected()) return $item;
}
return null;
}
//Afficher la ListBox, sa définition HTML et celle de ses items
public function Show($showItemChild=true){
//Bien sûr si son état est visible
if ($this->visible){
//définition HTML du SELECT
echo
<<<HTML
<SPAN><b>$this->title</b> <SELECT ID="$this->id" NAME="$this->name" VALUE="$this->value" SIZE="$this->size" $this->jsEvent >
HTML;
//Parcourir les items en affichant leur définition HTML <OPTION>
if ($this->items && count($this->items)>0) foreach($this->items as $item) {
//Afficher l'Item
$item->Show();
}
echo
<<<HTML
</SELECT></SPAN>
HTML;
//Afficher l'objet (child) liés à l'Item sélectionné
if ($showItemChild && ($SelectedItem = $this->SelectedItem()) && $SelectedItem->child){
//Le child est trouvé, l'afficher
$SelectedItem->child->Show();
}
}//End if visible
}//End Show
//Supprimer tous les items
public function RemoveItems(){$this->items = array();}
//Supprimer un item donné (les items sont indexés par value)
public function RemoveItem($value){unset($this->items[$value]);}
}
//test de l'objet ListBox
$pays = new ListBox("pays", "Pays");
//
$villes_france = new ListBox("ville", "Ville");
$villes_france->AddItem("paris", "Paris", true);
$villes_france->AddItem("le mans", "Le Mans");
$pays->AddItem("fr", "France", true, $villes_france);
//
$villes_maroc = new ListBox("ville", "Ville");
$villes_maroc->AddItem("marrakech", "Marrakech", true);
$villes_maroc->AddItem("oujda", "Oujda");
$pays->AddItem("ma", "Maroc", false, $villes_maroc);
//
$pays->jsEvent="onChange=\"this.form.submit();\"";
//
echo "<form>";
$pays->Show();
echo "</form>";
?>
Voici une contribution concernant une solution objet (Listes liées)
Le principe est simple:
Une liste (listbox) a des options (items) où chaque option (item) est liée à une autre liste (listbox) et ainsi de suite.
Si on sélectionne une option dans une liste affichée, en principe, l'option choisie doit afficher sa liste sous-jascente.
Bonne lecture, je l'ai testé et ça marche :wink:
[php] <?php
/*
Définition de l'objet "Item" élément d'une liste':
*/
class Item {
//Propriétés publiques
public $parent=null, $value="", $text="", $selected=false, $child=null;
//Méthodes publiques
//constructeur d'un Item appartenant à un parent ListBox et lié à un fils (child) ListBox
public function Item($parent, $value, $text=null, $selected=false, $child=null){
$this->parent=$parent;
$this->value=$value;
$this->text=$text?$text:$value;
$this->selected=$selected;
$this->child=$child;
}
//Item est-t-il sélectionné?
public function isSelected(){
$selectedValue = $this->parent &&$_POST?$_POST["{$this->parent->name}"]
:$this->parent &&$_GET?$_GET["{$this->parent->name}"]:$this->selected;
if ( $this->value == $selectedValue) $this->selected = true; else $this->selected = false;
return $this->selected;
}
//Affichage de l'Item
public function Show(){
//Trouver si l'Item est sélectionné
$selected = $this->isSelected()?" SELECTED ":"";
//Afficher la définition HTML de l'Item <OPTION>
echo
<<<HTML
<OPTION VALUE="$this->value" $selected >$this->text</OPTION>
HTML;
}
//Suppression de l'objet fils lié à cet Item
public function RemoveChild(){ $this->child=null; }
}
/*
Définition de l'objet "ListBox":
*/
class ListBox {
//Propriétés publiques:
public $title="", $id="", $name="", $value="", $size=1, $jsEvent="", $Items=array(), $visible=true;
//Méthodes publiques:
//Constructeur de la ListBox, items est la collection des options (objets Item)
public function ListBox($name=null, $title=null, $items=null){
$this->title = $title;
$this->name = $name;
$this->Fill($items); //remplit la liste par les items donnés
}
//Remplir la ListBox par les items donnés
public function Fill($items=array()){
if ($items && count($items)>0) foreach($items as $item){
//Ajouter les items un par un dans la ListBox
$this->AddItem($item->value, $item->text, $item->selected, $item->child);
}
}
//Ajouter un Item donné
public function AddItem($value, $text=null, $selected=false, $child=null){
//Un item est affecté comme un objet fils de la ListBox (this) (les items sont indexés par value)
$this->items[$value] = new Item($this, $value, $text, $selected, $child);
}
//Déterminer quel Item est sélectionné
public function SelectedItem(){
if ($this->items && count($this->items)>0) foreach($this->items as $item) {
//si l'Item est sélectionné, le retourner
if ($item->isSelected()) return $item;
}
return null;
}
//Afficher la ListBox, sa définition HTML et celle de ses items
public function Show($showItemChild=true){
//Bien sûr si son état est visible
if ($this->visible){
//définition HTML du SELECT
echo
<<<HTML
<SPAN><b>$this->title</b> <SELECT ID="$this->id" NAME="$this->name" VALUE="$this->value" SIZE="$this->size" $this->jsEvent >
HTML;
//Parcourir les items en affichant leur définition HTML <OPTION>
if ($this->items && count($this->items)>0) foreach($this->items as $item) {
//Afficher l'Item
$item->Show();
}
echo
<<<HTML
</SELECT></SPAN>
HTML;
//Afficher l'objet (child) liés à l'Item sélectionné
if ($showItemChild && ($SelectedItem = $this->SelectedItem()) && $SelectedItem->child){
//Le child est trouvé, l'afficher
$SelectedItem->child->Show();
}
}//End if visible
}//End Show
//Supprimer tous les items
public function RemoveItems(){$this->items = array();}
//Supprimer un item donné (les items sont indexés par value)
public function RemoveItem($value){unset($this->items[$value]);}
}
//test de l'objet ListBox
$pays = new ListBox("pays", "Pays");
//
$villes_france = new ListBox("ville", "Ville");
$villes_france->AddItem("paris", "Paris", true);
$villes_france->AddItem("le mans", "Le Mans");
$pays->AddItem("fr", "France", true, $villes_france);
//
$villes_maroc = new ListBox("ville", "Ville");
$villes_maroc->AddItem("marrakech", "Marrakech", true);
$villes_maroc->AddItem("oujda", "Oujda");
$pays->AddItem("ma", "Maroc", false, $villes_maroc);
//
$pays->jsEvent="onChange=\"this.form.submit();\"";
//
echo "<form>";
$pays->Show();
echo "</form>";
?> [/php]