RESSOURCES 
 
Créer une liste HTML multi-pages
Fourni par SQLI 13 février 2001
 
 

 

/**************************************************
*
* 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;
 }
} 
 
Accueil | Haut de page