/**************************************************
*
* GenerateList
* Olivier Haies, 13/02/2001 13:07
*
* Génération d'une liste multi-page en HTML
*
* @param (none)
* @return (none)
*
* @see
*
*************************************************/
Class GenerateList
{
//
// Classe HTML d'affichage d'une liste sur plusieurs page
//
// Paramètres :
//
// $RequeteSql :
// TabEnteteArray : Tableau des intitulé des colonnes
// TargetPage : Page php du lien
// CurrentPage : Page d'exécution de la fonction
// IndexColonneCachee : Colonne à ne pas afficher (exemple: identifiant)
// IndexColonneDuLienArray : N°s de colonne du tableau qui doit avoir
// le lien (à partir de 0)
// IndexesQuerystringArray : N°s de colonne de la requête qui doivent
// apparaître dans la querystring
// NomQuerystringArray : Intitulés pour la querystring (ex:IdPays)
// LargeurTabArray : Valeurs des largeurs du tableau
// QueryNumeroPage : Page en cours
// AlignementArray : Alignement pour chaque colonne
// LargeurGlobalTab : Largeur du tableau
// TabBorder : Border
// cellspacing et cellpadding : ...
// NombreResultatParPage
// ClassPourTitre
// ClassPourLien
// ClassPourAutre
// TypeList : radio, checkbox ou normale
// IndexColonneValueRadio : Colonne correspondant à la valeur du radio-bouton
// MyQueryString : Querystring nécessaire pour la page ex: "Id=50&Type=25"
// ne pas mettre le ?
// IndexesImages : Colonne contenant l'image
// PathSrcImages : Tableau des chemins aux images
// PropertiesImages : Tableau à 2 dimensions des propriétés de l'image
// Exemple: $objListe->PropertiesImages = array( "0" => array( "width" => 50 ,
// "height" => 35 , "hspace" => 5 , "vspace" => 0 , "border" => 0 ) );
//
//
// Valeurs par défaut si non renseignées dans l'appel de la classe
//
var $LargeurGlobalTab = "100%";
var $cellspacing = "5";
var $cellpadding = "5";
var $TabBorder = 1;
var $NombreResultatParPage = 4;
var $ClassPourTitre = "bloc-intitule-rouge";
var $ClassPourLien = "liens";
var $ClassPourAutre = "bloc-txt-gras";
var $BackGroundTitres = "6666CC";
var $BackGroundDonnees2 = "CCCCFF";
var $BackGroundDonnees1 = "FFFFFF";
var $TypeListe="normale";
var $IndexColonneValueRadio=0;
var $MyQueryString = "";
var $ClassPourTableau = "tableau";
// On ajoute une ligne même s'il n'y a qu'une seule page
var $AjouteLigneSiUneSeulePage = true;
var $IndexesImages = array();
var $PathSrcImages = array();
var $PropertiesImages = array(array());
// nombre de lignes
var $NombreDeLignes = 0;
function VerificationTousParam()
{
if ( VerificationVariableIsSet($this->RequeteSql)
&& VerificationVariableIsSet($this->TabEnteteArray)
&& VerificationVariableIsSet($this->TabEnteteArray)
&& VerificationVariableIsSet($this->TargetPage)
&& VerificationVariableIsSet($this->CurrentPage)
&& VerificationVariableIsSet($this->IndexColonneCachee)
&& VerificationVariableIsSet($this->IndexColonneDuLienArray)
&& VerificationVariableIsSet($this->IndexesQuerystringArray)
&& VerificationVariableIsSet($this->NomQuerystringArray)
&& VerificationVariableIsSet($this->LargeurTabArray)
&& VerificationVariableIsSet($this->AlignementArray) )
{
return true;
}
else
{
return false;
}
}
// Obtention du backgound pour une ligne de données
function GetBackGroundDonnees($NumLigne, $Ligne)
{
$Reste = $NumLigne % 2;
if ( $Reste == 0 ) {
return $this->BackGroundDonnees1;
}
else {
return $this->BackGroundDonnees2;
}
}
// Obtention de la classe pour une ligne de données
function GetClassPourAutre($Ligne)
{
return $this->ClassPourAutre;
}
// Obtention de la query string pour une ligne donnée
function GetQueryString($Ligne)
{
$QueryString = "";
$l=0;
for ($j=0; $j<count($Ligne); $j++) {
if (in_array($j,$this->IndexesQuerystringArray)) {
$QueryString .= $this->NomQuerystringArray[$l]."=".$Ligne[$j]."&";
$l++;
}
}
// suppression du dernier "&" si $MyQueryString=""
if ( $this->MyQueryString == "" ){
$QueryString = substr($QueryString,0,strlen($QueryString)-1);
}else{
$QueryString .= $this->MyQueryString;
}
return $QueryString;
}
// Obtention de la target page
function GetTargetPage($ColNum)
{
if (is_array($this->TargetPage)){
return $this->TargetPage[$ColNum];
}
else{
return $this->TargetPage;
}
}
// Ajout d'une cellule de données
function AddDataCell($LineNum, $ColNum, $Ligne, $QueryString)
{
if (!in_array($ColNum,$this->IndexColonneCachee)) {
$Data = $Ligne[$ColNum];
//Pour éviter un affichage immonde sous Netscape
if ($Data == "")
$Data = " ";
echo "<td width='".$this->LargeurTabArray[$ColNum]."' align='".
$this->AlignementArray[$ColNum]."'>";
if (in_array($ColNum,$this->IndexColonneDuLienArray))
echo "<a class='".$this->ClassPourLien."' href=".$this->
GetTargetPage($ColNum)."?".$QueryString.">".$Data."</a>";
elseif (in_array($ColNum,$this->IndexesImages))
echo "<img src='".$this->PathSrcImages[$ColNum].$Data."'
border='".$this->PropertiesImages[$ColNum]["border"]."'
width='".$this->PropertiesImages[$ColNum]["width"]."'
height='".$this->PropertiesImages[$ColNum]["height"]."'
hspace='".$this->PropertiesImages[$ColNum]["hspace"]."'
vspace='".$this->PropertiesImages[$ColNum]["vspace"]."' >";
else
echo "<span class='".$this->GetClassPourAutre($Ligne)."'>".
$Data."</span>";
echo "</td>\n";
}
}
// Génération et affichage du tableau
function HtmlListePlusieursPage()
{
if (!$this->VerificationTousParam()) return false;
// Connexion et exécution de la requête...
$InstanceClass = new Pgsql();
$InstanceClass->connect();
$RecordSet = $InstanceClass->query($this->RequeteSql);
// Si le numero de page n'est pas renseigné, on place sur la première page
if (intval($this->QueryNumeroPage) == 0)
{
$this->QueryNumeroPage = 1;
}
$NombreLigneRequete = $InstanceClass->num_rows();
$this->NombreDeLignes = $NombreLigneRequete;
// On n'affiche rien si la requête ne ramène rien...
if ($NombreLigneRequete == 0){
$InstanceClass->close();
return 0;
}
echo "<table border='".$this->TabBorder."' ";
echo "width='".$this->LargeurGlobalTab."' cellspacing='";
echo $this->cellspacing."' cellpadding='".$this->cellpadding."' ";
echo "class='".$this->ClassPourTableau."'>";
// Affichage de l'entete du tableau si des noms de colonnes sont spécifiés
if ( count($this->TabEnteteArray) > 0 ) {
echo "<tr bgcolor='".$this->BackGroundTitres."'>";
// Partie du tableau pour les radio-bouton si nécessaire:
if ($this->TypeListe=="radio" || $this->TypeListe=="checkbox"){
echo "<td width='5'> </td>\n";
}
// Boucle pour afficher chaque entete de colonne
for ($j=0; $j<count($this->TabEnteteArray); $j++) {
if (!in_array($j,$this->IndexColonneCachee))
{
echo "<td width='".$this->LargeurTabArray[$j]."' ";
echo "align='".$this->AlignementArray[$j]."' ";
echo "class='".$this->ClassPourTitre."'>".
$this->TabEnteteArray[$j]."</td>\n";
}
}
echo "</tr>";
}
$Ligne=0;
$k=0;
// boucle pour afficher tous les résultats par ligne
for ($i=0; $i<$NombreLigneRequete; $i++) {
// Affichage des lignes correspondant à la page
$Ligne++;
// Lecture des enregistrements
$ResultatLigne = $InstanceClass->next_record();
if (intval(($Ligne+$this->NombreResultatParPage-1)
/ $this->NombreResultatParPage)
== $this->QueryNumeroPage)
{
$k++;
echo "<tr bgcolor='".$this->GetBackGroundDonnees($Ligne, $ResultatLigne)."'>";
// querystring
$QueryString = $this->GetQueryString($ResultatLigne);
// partie pour les radio-boutons, checkbox:
if ($this->TypeListe=="radio"){
if($k==1){
$checked="checked";
}
else {
$checked="";
}
}
if ($this->TypeListe=="radio"){
echo "<td width='5'><input type='".$this->TypeListe.
"' name='RadioListeSelected' value='".
$ResultatLigne[$this->IndexColonneValueRadio].
"' ".$checked."></td>\n";
}
elseif ($this->TypeListe=="checkbox"){
echo "<td width='5'><input type='".$this->TypeListe.
"' name='RadioListeSelected".$k."' value='".
$ResultatLigne[$this->IndexColonneValueRadio]."' ".$checked."></td>\n";
}
// Boucle pour afficher chaque colonne du résultat
for ($j=0; $j < count($ResultatLigne); $j++) {
$this->AddDataCell($k, $j, $ResultatLigne, $QueryString);
}
echo "</tr>";
}
}
echo "</table>";
// Affichage des liens vers les autres pages: si le nombre de
// lignes est supérieur au nombre de lignes à afficher par page
if ( $NombreLigneRequete > $this->NombreResultatParPage ) {
$LienDePage = 0;
echo "<span class='".$this->ClassPourAutre."'>Page : </span>";
for ($j=1;$j<=$Ligne;$j++) {
if (($j+$this->NombreResultatParPage-1)
% $this->NombreResultatParPage == 0) {
$LienDePage++;
if ($LienDePage == $this->QueryNumeroPage)
echo "<span class='".$this->ClassPourAutre."'>".$LienDePage." </span>";
else
echo '<a class="'.$this->ClassPourLien.'" HREF="'.
$this->CurrentPage.'?QueryNumeroPage='.$LienDePage."&".
$this->MyQueryString.'" class="'.$this->ClassPourLien.'">'.$LienDePage.'</a> ';
}
}
} elseif ($this->AjouteLigneSiUneSeulePage) {
echo "<span class='".$this->ClassPourAutre."'> </span>";
}
$InstanceClass->close();
}
// Obtention du nombre de lignes ramenés par l'exécution de la requête
// ie. nombre de lignes total du tableau
function GetNombreDeLignes()
{
return $this->$NombreDeLignes;
}
}
|