/opac_css/classes/tags.class.php
https://github.com/fatjonakroni/pmb-albania · PHP · 140 lines · 108 code · 15 blank · 17 comment · 22 complexity · 8ad0ae889e3b8ca86905713d13b1c154 MD5 · raw file
- <?php
- // +-------------------------------------------------+
- // © 2002-2004 PMB Services / www.sigb.net pmb@sigb.net et contributeurs (voir www.sigb.net)
- // © 2006 mental works / www.mental-works.com contact@mental-works.com
- // repris et corrigé par PMB Services
- // +-------------------------------------------------+
- // $Id: tags.class.php,v 1.10 2009-06-17 12:50:08 kantin Exp $
-
- // définition de la classe d'affichage des 'tags'
-
- class tags {
-
- // ---------------------------------------------------------------
- // propriétés de la classe
- // ---------------------------------------------------------------
-
-
- // ---------------------------------------------------------------
- // constructeur
- // ---------------------------------------------------------------
- function tags() {
- }
-
- function listeAlphabetique(){
- //renvoie la liste des tags existants
- global $dbh;
- global $pmb_keyword_sep;
-
- $requete = "select index_l from notices where index_l is not null and index_l!=''";
- $arr=array();
- $r = mysql_query($requete, $dbh);
- if (mysql_numrows($r)){
- while ($loc = mysql_fetch_object($r)) {
- $liste = split($pmb_keyword_sep,$loc->index_l);
- for ($i=0;$i<count($liste);$i++){
- $index=trim($liste[$i]);
- if ($index) $arr[strtolower($index)]++;
- }
- }
- }
- global $opac_allow_tags_search_min_occ ;
- if ($opac_allow_tags_search_min_occ>1) {
- $arr_purge=array();
- foreach ($arr as $key => $value) {
- if ($value>=$opac_allow_tags_search_min_occ) $arr_purge[$key]=$value ;
- }
- $arr=$arr_purge;
- }
- ksort($arr);
- $count=0;
- $max=0;
- //les seuils permettent de séparer les valeurs en 4 groupes pour afficher les tags dans 4 tailles différentes en fct de leur fréquence
- foreach ($arr as $key => $value){
- $count++;
- $somme+=$value;
- if ($max<$value) $max=$value;
- }
- $seuil2 = array_sum($arr)/count($arr);//moyenne des valeurs
- $seuil1 = $seuil2/2;
- $seuil3 = $seuil2+($max-$seuil2)/2;//mi chemin en la valeur max et la moyenne
-
- $lettre="a";
- $reponse="";
- foreach ($arr as $key => $value) {
- if ($key{0}!=$lettre) {
- $lettre=$key{0};
- $reponse.="<br /><br />";
- } else $reponse.=", ";
- if ($value<$seuil1) $reponse.="<a href='./index.php?lvl=more_results&mode=keyword&user_query=".urlencode($key)."&tags=ok' class='TagF1'>$key</a> ";
- elseif ($value<$seuil2) $reponse.="<a href='./index.php?lvl=more_results&mode=keyword&user_query=".urlencode($key)."&tags=ok' class='TagF2'>$key</a> ";
- elseif ($value<$seuil3) $reponse.="<a href='./index.php?lvl=more_results&mode=keyword&user_query=".urlencode($key)."&tags=ok' class='TagF3'>$key</a> ";
- else $reponse.="<a href='./index.php?lvl=more_results&mode=keyword&user_query=".urlencode($key)."&tags=ok' class='TagF4'>$key</a> ";
- }
- return $reponse;
- }
-
-
- function bold($str,$needle) {
- //cherche si un des mots de $needle existe dans $str et le met en gras
- $str_propre=strtolower(convert_diacrit($str));
- $mot=strtolower(convert_diacrit($needle));
- if (!(($pos=strpos($str_propre,$mot))===false)) {
- $size= strlen("<span class='tagQuery'>") + strlen($needle)+$pos ;
- $str=substr_replace($str, "<span class='tagQuery'>", $pos, 0);
- $str=substr_replace($str, "</span>", $size,0);
- }
- return $str;
- }
-
- function chercheTag($user_query){
- global $dbh;
- global $msg;
- global $pmb_keyword_sep ;
- $user_query=trim($user_query);
- $requete = "select index_l from notices where index_l like '%$user_query%'";
- $user_query=stripslashes($user_query);
- $arr=array();
- $r = mysql_query($requete,$dbh);
-
- while ($loc = mysql_fetch_object($r)) {
- $liste = split($pmb_keyword_sep,$loc->index_l);
- for ($i=0;$i<count($liste);$i++){
- $index=trim($liste[$i]);
- if ($index) $arr[$index]++;
- }
- }
- ksort($arr);
- //les seuils permettent de séparer les valeurs en 4 groupes pour afficher les tags dans 4 tailles différentes en fct de leur fréquence
- $count=0;
- $max=0;
- foreach ($arr as $key => $value){
- $texte=$this->bold($key,$user_query);
- if (!(strpos($texte,"</span>")===false)) {
- $count++;
- $somme+=$value;
- if ($max<$value) $max=$value;
- }
- }
- $seuil2 = $somme/$count;//moyenne des valeurs
- $seuil1 = $seuil2/2;
- $seuil3 = $seuil2+($max-$seuil2)/2;//mi chemin en la valeur max et la moyenne
-
- $reponse="";
- foreach ($arr as $key => $value){
- $texte=$this->bold($key,$user_query);
-
- if ($reponse) $reponse.=", ";
- if (!(strpos($texte,"</span>")===false)) {
- if ($value<$seuil1) $reponse.="<a href='index.php?lvl=more_results&mode=keyword&user_query=".urlencode($key)."&tags=ok' class='TagF1'>$texte</a> ";
- elseif ($value<$seuil2) $reponse.="<a href='index.php?lvl=more_results&mode=keyword&user_query=".urlencode($key)."&tags=ok' class='TagF2'>$texte</a> ";
- elseif ($value<$seuil3) $reponse.="<a href='index.php?lvl=more_results&mode=keyword&user_query=".urlencode($key)."&tags=ok' class='TagF3'>$texte</a> ";
- else $reponse.="<a href='index.php?lvl=more_results&mode=keyword&user_query=".urlencode($key)."&tags=ok' class='TagF4'>$texte</a> ";
- }
- }
- if (count($arr)==0) $reponse=$msg["no_result"];
- return $reponse;
- }
-
- }
- ?>