Blame | Last modification | View Log | RSS feed
<?php/*vim: set expandtab tabstop=4 shiftwidth=4: */// +------------------------------------------------------------------------------------------------------+// | PHP version 4.1 |// +------------------------------------------------------------------------------------------------------+// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org) |// +------------------------------------------------------------------------------------------------------+// | This library is free software; you can redistribute it and/or |// | modify it under the terms of the GNU Lesser General Public |// | License as published by the Free Software Foundation; either |// | version 2.1 of the License, or (at your option) any later version. |// | |// | This library is distributed in the hope that it will be useful, |// | but WITHOUT ANY WARRANTY; without even the implied warranty of |// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |// | Lesser General Public License for more details. |// | |// | You should have received a copy of the GNU Lesser General Public |// | License along with this library; if not, write to the Free Software |// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |// +------------------------------------------------------------------------------------------------------+// CVS : $Id: FRAG_fragmenteur.fonct.php,v 1.6 2005/02/23 17:28:35 jpm Exp $/*** API : fragmenteur.** Cette librairie contient les fonctions :* - UnstoreTransTab()* - AffTxtNbRes()* - rechercheAlphabet()**@package API*@subpackage Framenteur//Auteur original :*@author Jean-Charles GRANGER <tela@vecteur.org>//Autres auteurs :*@author Alexandre GRANIER <alexandre@tela-botanica.org>*@author Jean-Pascal MILCENT <jpm@clapas.org>*@copyright Tela-Botanica 2000-2004*@version $Revision: 1.6 $ $Date: 2005/02/23 17:28:35 $// +------------------------------------------------------------------------------------------------------+*/// +------------------------------------------------------------------------------------------------------+// | ENTETE du PROGRAMME |// +------------------------------------------------------------------------------------------------------+/*Mettre ici les inclusions de fichiers*/include_once 'FRAG_Fragmenteur.class.php';// Compatibilité avec les anciennes versions :function UnstoreTransTab($chaine){return FRAG_decoupageChaine($chaine);}function AffTxtNbRes($modele, $tableau, $nb_query_ltd, $nbre_total){return FRAG_afficherTxtNbreResultat($modele, $tableau, $nb_query_ltd, $nbre_total);}function rechercheAlphabet( $requete, $baseURL, $paramURL = '', $affichageResultAvt = '', $affichageResultAps = '',$tablo_formatLigne = array(), $tablo_formatResultat = array(), $messageErreur = '', $fragmenteur = array()){return FRAG_rechercherAvecAlphabet( $requete, $baseURL, $paramURL, $affichageResultAvt, $affichageResultAps,$tablo_formatLigne, $tablo_formatResultat, $messageErreur, $fragmenteur);}// +------------------------------------------------------------------------------------------------------+// | LISTE des FONCTIONS |// +------------------------------------------------------------------------------------------------------+/*Mettre ici la liste de fonctions.*//**Fonction FRAG_afficherTxtNbreResultat() - Affiche un texte formaté.** Permet de créer un petit texte uniforme du type "il y a x resultats sur y"...* Possibilité de paramétrer un "modèle" pour afficher selon différentes mises* en forme.** @param string nom du modèle utilisé (vide = modèle par défaut).* @param array tableau de résultats* - $tableau['pstart'] : valeur du premier item (ex. : pages de 20 items, la 2è page commence au 21è, $tableau['pstart'] = 20)* - $tableau['pend'] : valeur du dernier item (nombre total d'items retournés par la requête, sans clause LIMIT* - $tableau['step'] : pas de regroupement (x items par page)* @param integer nombre d'items trouvés par la requête, avec clause LIMIT* @param integer nombre total d'items dans la Base** @return string la chaine formatée.*/function FRAG_afficherTxtNbreResultat($modele, $tableau, $nb_query_ltd, $nb_total){// Initialisation de $var_affiche$var_affiche = '';if ($nb_query_ltd > 1) {$pluriel_loc = 's';} else {$pluriel_loc = '';}if ($nb_total > 1) {$pluriel_tot = 's';} else {$pluriel_tot = '';}if ($tableau['pend'] > 0) {$add_from = $tableau['pstart'] + 1;$tmp_num = $tableau['pstart'] + $tableau['step'];if ($tmp_num < $tableau['pend']) {$add_to = $tmp_num;} else {$add_to = $tableau['pend'];}}switch ($modele) {case 'synth':$var_affiche .= '<strong>'.$nb_total.'</strong>'.' synthèse'.$pluriel_tot.' trouvée'.$pluriel_tot.'.';if ($tableau['pend'] > 0) {$var_affiche .= ' Affichage des synthèses '.$add_from.' à '.$add_to.'.';}break;case 'bbpopup':$feminin = '';if ($tableau['feminin'] == 1) {$feminin = 'e';}$var_affiche .= '<strong>'.$nb_total.'</strong>'.' '.$tableau['libelle'].$pluriel_tot.' trouvé'.$feminin.$pluriel_tot.'.';if ($tableau['pend'] > 0) {$var_affiche .= ' Affichage des éléments '.$add_from.' à '.$add_to.'.';}break;// Mise en forme par défaut :default:if ($tableau['pend'] > 0) {$var_affiche .= ' Affichage des données <strong>'.$add_from.'</strong> à <strong>'.$add_to.'</strong>'."\n";}$var_affiche .= ' parmi '.'<strong>'.$tableau['pend'].'</strong>'.' résultat'.$pluriel_loc.'.'."\n";break;}return $var_affiche;}/**Fonction FRAG_decoupageChaine() - Découpe une chaine.** Cette fonction permet de découper la variable de tranfert $chaine et de réaffecter dans un tableau* les valeurs et les index.** @param string chaine à désérialiser.** @return array le tableau contenant les index et les valeurs de la chaine.*/function FRAG_decoupageChaine($chaine){$chaine = eregi_replace('{', ' ', $chaine);$tableau_transfert = explode('!', $chaine);foreach ($tableau_transfert as $objet) {$objet_decoupe = explode(',', $objet);$objet_decoupe_1 = $objet_decoupe[0];if ((!empty($objet_decoupe_1)) && (!empty($objet_decoupe[1]))) {$tableau_retour[$objet_decoupe_1] = $objet_decoupe[1];}}return $tableau_retour;}/**//==================================== FUNCTION ==================================* La fonction rechercheAlphabet() renvoie une liste alphabétique.**Cette fonction retourne une liste alphabétique et un tableau html contenant les résultats*d'une requête sql pour une lettre de l'alphabet donnée.*Quand on clique sur une lettre de la liste alphabétique la page est rechargée et la*fonction renvoie la liste et le tableau de résultat correspondant à la requête sql*avec la lettre de l'alphabet sélectionnée.* Elle nécéssite l'inclusion du fichier lib.form.php**Le tableau associatif de formatage des lignes:*-clé "Class_pair": contient le nom d'une classe css à utiliser pour le* formatage des lignes de résultats paires.*-clé "Class_impair": contient le nom d'une classe css à utiliser pour le* formatage des lignes de résultats impaires.*-clé "Style_pair": contient les syles à utiliser pour le* formatage des lignes de résultats paires.*-clé "Style_impair": contient les syles à utiliser pour le* formatage des lignes de résultats impaires.*-clé "Couleur_pair": la valeur héxadécimale de la couleur des lignes* paires du tableau de résultats.*-clé "Couleur_impair": la valeur héxadécimale de la couleur des lignes* impaires du tableau de résultats.* Il est conseillé d'utilser les styles ou les* classes pour gérer la couleur.**Le tableau associatif de formatage des résultats:*Nous stockons des tableaux associatifs dans le tableau de formatage.*Chaque ligne du tableau de formatage correspond à une colone, on doit*les entrer dans l'orde d'affichage.*-clé "Col_nom": chaine le nom du champ de la requête sql à afficher.*-clé "Col_width": entier largeur de la colone*-clé "Col_class": chaine nom de la classe css de la colone.*-clé "Col_lien_href": chaine l'url de base pour créer un lien sur la colone.*-clé "Col_lien_href_param": chaine nom du champ dans la requete SQL servant à compléter l'url.*-clé "Col_lien_target": chaine la valeur de l'attribut 'target'du lien.*-clé "Col_lien_class": chaine la valeur de l'attribut 'class'du lien.*-clé "Col_lien_title": chaine la valeur de l'attribut 'title'du lien.**Exemple:*$tablo_formatResultat[0]=array(*"Col_nom"=>ENT_NOM_COMPLET,*"Col_width"=> 375,*"Col_class"=>'texte_tb2',*"Col_lien_href"=>'http://test.tela-botanica.org/',*"Col_lien_href_param"=>ENT_NUM_NOMEN,*"Col_lien_target"=>'_top',*"Col_lien_class"=>'eflore_lien',*"Col_lien_title"=>'Voir la fiche correspondante dans l\'index des plantes');*$tablo_formatResultat[1]=array(*"Col_nom"=>ECS_INTITULE,*"Col_width"=> 75,*"Col_class"=>'texte_tb2 texte_c');** @param string une chaine fournissant la base de l'url de la page où la fonction est utilisée.* @param string la chaine correspondant aux paramètres à faire passer dans l'url.* @param string la requete sql qui fournira le tableau pour une lettre donnée.* @param string le code html d'ouverture du tableau entre la liste alphabétique et les lignes de résultat.* @param string le code html de fermeture du tableau aprés les lignes de résultat.* @param array un tableau associatif contenant le formatage des lignes* @param string le code html du message d'erreur s'il n'y a pas de lignes de résultat.* @return string le code html de la liste alphabétique et du tableaux de lignes de résultat.//==============================================================================*/function FRAG_rechercherAvecAlphabet( $requete, $baseURL, $paramURL = '', $affichageResultAvt = '', $affichageResultAps = '',$tablo_formatLigne = array(), $tablo_formatResultat = array(), $messageErreur = '',$fragmenteur = array()){global $lettre;// Variable passée dans l'url contenant la lettre sélectionnée//Nous concaténons les valeurs de l'url :$url = $baseURL.$paramURL;//Nous initialisons les variables par défautif($messageErreur == '') {$messageErreur = '<p>Pas de résultats affichable!</p>';}if($affichageResultAvt == '') {$affichageResultAvt = '<!-- AVANT RÉSULTATS -->';}if($affichageResultAps == '') {$affichageResultAps = '<!-- APRÈS RÉSULTATS -->';}if (empty($tablo_formatLigne)) {$tablo_formatLigne['Couleur_pair'] = '#E8FFE5';}if ( ! empty($fragmenteur) ) {if (!isset($GLOBALS['T_REPONSE'])) {$GLOBALS['T_REPONSE'] = '';}//Nous définissons les valeurs par défaut du fragmenteur :isset($fragmenteur['nbre_ligne_page_defaut']) ? '' : $fragmenteur['nbre_ligne_page_defaut'] = 20;isset($fragmenteur['afficher_titre']) ? '' : $fragmenteur['afficher_titre'] = 1;isset($fragmenteur['titre']) ? '' : $fragmenteur['titre'] = 'Sélectionner le nombre de résultats à afficher par page';isset($fragmenteur['tableau_choix_ligne_page']) ? '' : $fragmenteur['tableau_choix_ligne_page'] = array(10,'par 10',20,'par 20',50,'par 50');isset($fragmenteur['modele_info']) ? '' : $fragmenteur['modele_info'] = '';isset($fragmenteur['classe_css_titre']) ? '' : $fragmenteur['classe_css_titre'] = 'insTitle1';isset($fragmenteur['classe_css_fragmenteur']) ? '' : $fragmenteur['classe_css_fragmenteur'] = 'real_fragmenteur';isset($fragmenteur['classe_css_info']) ? '' : $fragmenteur['classe_css_info'] = 'insTitle1';// Nous créons le fragmentateur :$mon_fragmenteur = new fragmenteur_session();}//Nous ajoutons à l'url le nom de la variable lettre.$url .= '&lettre=';// Nous construisons le tableau d'affichage de la liste alphabétique$sortieTexte = '' ;$sortieTexte .= '<p id="real_info">'."\n".'<span>'.'Cliquer sur une lettre pour faire apparaitre la liste des taxons correspondante :'.'</span>'."\n".'</p>'."\n";$sortieTexte .= '<p id="real_alphabet"><strong>'."\n";// Nous écrivons toutes les lettres avec un lien.// Nous utilisons les caractères asci de l'alphabet situé entre les numéros 61 et 95.for ($num_asci = 65 ; $num_asci < 91 ; $num_asci++) {$caractere = chr($num_asci) ;$sortieTexte .= "\t".'<a class="lien_recherche_alpha" href="'.$url.$caractere.'">'.chr($num_asci).'</a> '."\n";}$sortieTexte .= "\t".'<a href="'.$url.'tous">'.'Tous'.'</a>'."\n";$sortieTexte .= '</strong></p>'."\n";// Si une lettre est selectionnée :if (!empty($lettre)) {//la variable est récupérée directement de l'url//Nous redéfinissons l'url en ajoutant la valeur de la variable lettre :$url .= $lettre;$resultat = mysql_query($requete) or die('<b>Erreur</b>:<br/><b>Requete : </b>'.$requete.'<br/><b>Erreur mysql: </b>' .mysql_error());$nbre_ligne_resultat_total = mysql_num_rows($resultat) ;if ($nbre_ligne_resultat_total != 0) {if ( ! empty($fragmenteur) ) {$mon_fragmenteur->setURL($url) ;$T_REPONSE = $mon_fragmenteur->getVariable('T_REPONSE');if( $T_REPONSE == '') {$mon_fragmenteur->fixerLePas ($fragmenteur['nbre_ligne_page_defaut']);}$requete .= ' LIMIT '.$mon_fragmenteur->lireLeDebut().','.$mon_fragmenteur->lireLePas();$resultat = mysql_query($requete) or die('<b>Erreur</b>:<br/><b>Requete : </b>'.$requete.'<br/><b>Erreur mysql: </b>' .mysql_error());$nbre_ligne_resultat_affiche = mysql_num_rows($resultat) ;if ($fragmenteur['afficher_titre'] == 1) {$sortieTexte .= '<tr class="'.$fragmenteur['classe_css_titre'].'"><td colspan="2">' ;$sortieTexte .= $fragmenteur['titre'];$sortieTexte .= '</td></tr>'."\n" ;}$sortieTexte .= '<form id="real_page_quantite" action="'.$url.'" method="post">'."\n";$sortieTexte .= '<p>'."\n";$formulaire = new form($GLOBALS['_GEN_commun']['pear_db']);$javascript_select['nom_evenement'] = 'onchange';$javascript_select['valeur_evenement'] = 'javascript:this.form.submit();';$sortieTexte .= $formulaire->selectFromTableau('T_REPONSE', $fragmenteur['tableau_choix_ligne_page'],empty($T_REPONSE) ? $fragmenteur['nbre_ligne_page_defaut'] : $T_REPONSE, $javascript_select) ;$sortieTexte .= '</p>'."\n";$sortieTexte .= '</form>'."\n";$sortieTexte .= '<p id="real_nbre_resultat">'."\n".$mon_fragmenteur->affNbRes($nbre_ligne_resultat_total).'</p>'."\n";$sortieTexte .= '<p class="'.$fragmenteur['classe_css_fragmenteur'].'">'."\n".$mon_fragmenteur->fragmente($nbre_ligne_resultat_total).'</p>'."\n";}// Nous affichons les résutats de la requête avec une lettre donnée.$sortieTexte .= $affichageResultAvt;// Dans le cas de l'affichage par défaut, nous affichons les noms des colones :if (empty($tablo_formatResultat)) {//Dans le cas ou l'on utilise la fonction par défaut$sortieTexte .='<tr>';for ($i=0; $i<mysql_num_fields($resultat); $i++) {$sortieTexte .= '<td>'.mysql_field_name($resultat, $i).'</td>'."\n";}$sortieTexte .='</tr>';}$pair = false ;$ligne = '';while ($ligne = mysql_fetch_array($resultat)) {// Nous ouvrons la balise de début de ligne$sortieTexte .= '<tr ';// Nous colorions la ligneif ($pair) {isset($tablo_formatLigne['Class_pair'])?$sortieTexte .= 'class="'.$tablo_formatLigne['Class_pair'].'" ':'';//isset($tablo_formatLigne['Syle_pair'])?$sortieTexte .= 'style="'.$tablo_formatLigne['Syle_pair'].'" ':'';//isset($tablo_formatLigne['Couleur_pair'])?$sortieTexte .= 'bgcolor="'.$tablo_formatLigne['Couleur_pair'].'"':'';//La couleur dans Tela est #E8FFE5$pair = false ;}else {isset($tablo_formatLigne['Class_impair'])?$sortieTexte .= 'class="'.$tablo_formatLigne['Class_impair'].'" ':'';//isset($tablo_formatLigne['Syle_impair'])?$sortieTexte .= 'style="'.$tablo_formatLigne['Syle_impair'].'" ':'';//isset($tablo_formatLigne['Couleur_impair'])?$sortieTexte .= 'bgcolor="'.$tablo_formatLigne['Couleur_impair'].'"':'';//La couleur dans Tela est #E8FFE5$pair = true ;}$sortieTexte .= '>';// Nous fermons la balise de début de ligne// Nous affichons les résultats dans des colonesif (empty($tablo_formatResultat)) {//Dans le cas ou l'on utilise la fonction par défautfor ($i=0; $i<(count($ligne)/2); $i++) {$sortieTexte .='<td>'.$ligne[$i].'</td>'."\n";}} else {//Dans le cas ou l'on utilise un tableau de formatagefor ($i = 0; $i < count($tablo_formatResultat); $i++) {if (isset($tablo_formatResultat[$i]['Col_lien_href'])){isset($tablo_formatResultat[$i]['Col_lien_href_param'])?'':$tablo_formatResultat[$i]['Col_lien_href_param']='';$sortieTexte .= '<td class="'.$tablo_formatResultat[$i]['Col_class'].'" width="'.$tablo_formatResultat[$i]['Col_width'].'">'.'<a href="'.$tablo_formatResultat[$i]['Col_lien_href'].$ligne[$tablo_formatResultat[$i]['Col_lien_href_param']].'" target="'.$tablo_formatResultat[$i]['Col_lien_target'].'" title="'.$tablo_formatResultat[$i]['Col_lien_title'].'" class="'.$tablo_formatResultat[$i]['Col_lien_class'].'">';//Nous regardons si la colonne du tableau HTML est composée de plusieurs//colonnes de la table de la base de données.if (! is_array($tablo_formatResultat[$i]['Col_nom']) ) {//Une seule colonne.$sortieTexte .= $ligne[$tablo_formatResultat[$i]['Col_nom']];} else {//Plusieurs colonnes et/ou texte.$tab_contenu_colonne = $tablo_formatResultat[$i]['Col_nom'];for ($j = 0; $j < count($tab_contenu_colonne); $j++) {if ($tab_contenu_colonne[$j]['type'] == 'texte') {//Nous devons afficher du texte.$sortieTexte .= $tab_contenu_colonne[$j]['valeur'];}elseif ($tab_contenu_colonne[$j]['type'] == 'colonne') {//Nous devons afficher une valeur d'une colonne résultat de la requête SQL.$sortieTexte .= $ligne[$tab_contenu_colonne[$j]['valeur']];}}}$sortieTexte .= '</a></td>'."\n";} else {$sortieTexte .='<td class="'.$tablo_formatResultat[$i]['Col_class'].'" width="'.$tablo_formatResultat[$i]['Col_width'].'">'.$ligne[$tablo_formatResultat[$i]['Col_nom']]."</td>\n";}}}$sortieTexte .= '</tr>';}$sortieTexte .= $affichageResultAps;}else {// Nous affichons le message d'erreur signalant l'abscence de résultats.$sortieTexte .= $messageErreur;}}return $sortieTexte ;}/* +--Fin du code ---------------------------------------------------------------------------------------+* $Log: FRAG_fragmenteur.fonct.php,v $* Revision 1.6 2005/02/23 17:28:35 jpm* Suppression d'image dans le fragmenteur et remplacement par des styles css.* Amélioration du code html.** Revision 1.5 2005/02/22 16:21:28 jpm* Mise à jour : utilisation des session, mise en forme et suppression d'appel de fichiers inutiles.** Revision 1.4 2004/09/11 19:12:43 jpm* Début mise en forme.** Revision 1.3 2004/09/11 15:37:02 jpm* Modification de l'inclusion de fichier.** Revision 1.2 2004/09/10 15:03:41 jpm* Ajout de commentaires.*** +--Fin du code ----------------------------------------------------------------------------------------+*/?>