1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140
|
<?php
/**
* Class gérant les recheches sur une table
* @package myClass
* @author HiSy
* @version 1.2 du 05/03/2006
*/
class Recherche
{
/**#@+
* Attributs de la classe
* @var string
*/
/**
* Liste des champs de la table ciblés par la recherche
*/
var $champsCibles;
/**
* Liste des mots clés soumis pour recherche .
*/
var $motsCles;
/**
* Operateur de la recherche
*/
var $operateur;
/**
* Filtres à passer à la requete en plus des mots clés
*/
var $filtrePrimaire;
/**
* Tri des resultats
*/
var $orderBy;
<a href="http://www.developpez.net/forums/" target="_blank">/**#@-*/</a>
/*
* CONSTRUCTEUR
*
* Instancie l'objet avec tous les éléments passés en parametres
* Lance la coloration
*/
function Recherche($table,$champsCibles,$champsRetour="*",$motsCles,$operateur,$filtrePrimaire="1=1",$orderBy=null){
$this->table=is_array($table)?implode(",",$table):$table;
$this->champsCibles=$champsCibles;
$this->champsRetour=$champsRetour!=""?(is_array($champsRetour)?implode(',',$champsRetour):$champsRetour):"*";
$this->motsCles=$motsCles;
$this->operateur=$operateur;
$this->filtrePrimaire=$filtrePrimaire!=""?$filtrePrimaire:"1=1";
$this->orderBy=$orderBy;
}
/*
* Fonction recherche des mots clés dans les champs cibles
*
* Fait appelle à la méthode coloration et applique une coloration aux resultats
*
* @param string $color couleur à appliquer aux mots clés trouvés ( par défaut rouge )
* @return array $tabLIste tableau associatif prenant pour clés tous les champs de la table
*/
function getListeColoration($color="#FF0000") {
$nbChampsCibles=count($this->champsCibles);
$nbMotsCles=count($this->motsCles);
for($i=0;$i< $nbChampsCibles; $i++){
for($j=0;$j<$nbMotsCles;$j++){
if($this->operateur=="AND") {
$operateur=$j==0?") OR (":"AND";
}
else {
$operateur="OR";
}
$filtre.=($j==0 && $i==0)?"":$operateur;
$filtre.=" ".$this->champsCibles[$i]." LIKE '%".$this->motsCles[$j]."%' ";
}
}
print $sql="SELECT ".$this->champsRetour." FROM ".$this->table." WHERE (($filtre)) AND(".$this->filtrePrimaire.") ".$this->orderBy;
$res=mysql_query($sql) or die ('Pb dans les parametres de la class Recherche');
while($liste=mysql_fetch_assoc($res)){
foreach($liste as $key => $value) {
$tabLigne[$key]=$this->coloration($value,$this->motsCles,$color);
}
$tabListe[]=$tabLigne;
}
return $tabListe;
}
/*
* Fonction coloration des mots clés dans un champ
*
*@param string $champ champ de la table
*@param
* @param string $color couleur à appliquer aux mots clés trouvés ( par défaut rouge )
* @param array $motsCles tableau des mots à rechercher
* @return array $tabLIste tableau associatif prenant pour clés tous les champs de la table
*/
function coloration($champ,$motsCles,$color){
// On elimine les caractères superflus
while(ereg(" ",$motsCles)) $motsCles=trim(str_replace(" "," ",$motsCles));
$retourStr = ""; // chaine de retour
$pos = 0;
$tabChar = array ();
// Traitement
if ($motsCles != ""){
$tab = $motsCles; // Tableau de mots clés
$nb = count($tab); // Nombre de mot clés
// Si il ya au moins un mot clé
if ($nb > 0) {
for($i = 0; $i < $nb; $i++) { // pour chaque motclé
$pos = strpos(strtolower($champ), strtolower($tab[$i]));
while(!($pos === false)) {
for ($iChar = 0; $iChar < strlen($tab[$i]); $iChar++)
array_push($tabChar,$pos + $iChar);
$pos = $pos + strlen($tab[$i]);
$pos = strpos(strtolower($champ), strtolower($tab[$i]), $pos);
}
}
for ($iStr = 0; $iStr < strlen($champ); $iStr++) {
$trouve = false;
$nbChar = count($tabChar);
if ($nbChar > 0){
for($iChar = 0; $iChar < $nbChar; $iChar++) {
if (array_key_exists($iChar,$tabChar)) {
if ($tabChar[$iChar] == $iStr) $trouve = true;
}
}
}
// Je si je trouve je colorie
if ($trouve)
$retourStr .= "<strong><font color=".$color.">".substr($champ, $iStr, 1)."</font></strong>";
else
$retourStr .= substr($champ, $iStr, 1);
}
}
}
else $retourStr=$champ;
return $retourStr;
}
}
?> |
Partager