[4.3] moteur de recherche

bg62bg62 Member
si je tape :
recherche d'images
rien n'est trouvé pour :
" recherche d\'images " il y a pourtant un article qui se nomme :
"recherche d'images avec un moteur inversé"
qui aurait une solution ? encore un problème avec les ' ???
@+

Réponses

  • StéphaneStéphane Member, Former PluXml Project Manager
    Bonjour bg62

    Je n'arrive pas à reproduire ton problème
    1) j'ai créé un article avec comme titre: recherche d'images avec un moteur inversé
    2) dans le filtre de recherche je saisie: recherche d'images
    3) je clic sur le bouton filtrer

    Et j'ai bien mon article qui est listé

    J'ai loupé quelque chose ?

    Consultant PluXml

    Ancien responsable du projet (2010 à 2018)

  • bg62bg62 Member
    janvier 2010 modifié
    regarde ici :
    http://blog.unesourisetmoi.info/
    dans le moteur de recherche interne, sur la droite dans la sidebar, tape :
    recherche d'images
    tu verras le résultat ...

    Votre Recherche : recherche d\'images

    ... fin de la recherche

    La recherche a étè infructueuse , il n'y a rien qui corresponde à vos criteres .
    Verifiez l'orthographe ou changez les mots clés.
    Faire une nouvelle recherche en changeant le(s) mot(s) clé(s).

    >>
    pourtant il y a bien cet article :
    http://blog.unesourisetmoi.info/?article409/moteur-inverse-pour-la-recherche-d-images-et-de-video
    mais ce n'est pas le seul problème avec ces ' je pense ...
    @+ bg
  • StéphaneStéphane Member, Former PluXml Project Manager
    Ok j'avais pas compris que tu utilisais le moteur de recherche sur la page d'accueil
    Je viens donc de tester avec le moteur de recherche tel qu'il est donner dans le wiki ici et chez moi ça fonctionne bien.

    Peux-tu stp
    1) vérifier que tu as bien le code pour la version 4.2+ de pluxml
    2) aller dans ton administration, menu Paramètres/Informations et me donner la valeur de la derniere ligne: Etat des "magic quotes"
    3) éventuellement me donner le code que tu utilises pour faire ton moteur de recherche

    Merci

    Consultant PluXml

    Ancien responsable du projet (2010 à 2018)

  • sur le blog en ligne :
    Version : blog beta 4.1 (encodage ISO-8859-1)
    * Version de php : 4.4.9
    * Etat des "magic quotes" : 1
    sur l'essai en cours :

    Version : 4.3 (encodage ISO-8859-1)
    * Version de php : 4.4.9
    * Etat des "magic quotes" : 1
  • et le code pour le moteur:
    <?php
    /**
     * Classe plxSearch Recherche simple
     * @Pages statiques Pluxml beta 4
     * @extends plxMotor
     * @author    Griboval Cyril
     * @Stable 1.01
     **/
    class plxSearch extends plxMotor {
    
    function plxSearch($filename) {
    parent::plxMotor($filename);
    $plxGlob_arts = & new plxGlob(PLX_ROOT.$this->aConf['racine_articles']);
    $this->motif = '/^[0-9]{4}.[0-9]{3}.[0-9]{12}.[a-z0-9-]+.xml$/';
    $this->aFiles = $this->plxGlob_arts->query($this->motif,'art',$ordre,0,999);
    }
    
        /**
         * Méthode qui elague et fait un résumé des résultats de recherche
         * 
         * @author    Griboval Cyrille
         **/
      function getresume($content,$word) {
      
    // if (preg_match('#(?:\w+\W+){100}\w+#s' , $content , $limite)) {$content =$limite[0];}
    
            #création du contexte du mot recherché (extraits page) 
            #recherche de 0 à 100 caractéres avant et aprés le mot recherché BG
                $masque ='[(\w+|&-_.;:!\'\"\#éèçàù\s  )?]{0,100}';
    
                preg_match_all('#'.$masque.'('.$word.'? )'.$masque.'#', $content, $out);
                
            # on separe chaque extraits
                foreach( $out[0] as $value ) {  $resume .= ' ... '.$value.' ';}
    
                $resume=stripslashes($resume).' ... ';
    
            # ce mot peut apparaitre plusieurs fois ! 
            # (0-50 caractéres + mot recherché +0-50 caractéres ) X nb occurences = .... 
            # on limite alors le résumé a une chaine qui ne contient qu'une trentaines d'espaces SOIXANTAINE BG
            
                if (preg_match('#(?:\w+\W+){60}\w+#s' , $resume , $regule)) {$resume =' ... '.$regule[0];}    
                
            # Mise en evidence visuelle : engraissage et grossisement de l'occurence
    
                $content=preg_replace('#'.$word.'#', '<b style="font-size:110%;padding:0 1px;">'.$word.'</b>', $resume);    
            
            # renvoi du traitement 
            
                return $content;
    }  
    
    
        /**
         * Méthode qui formatte les résultats de recherche
         * 
         * @author    Griboval Cyrille
         **/
    function getsearch() {
    
    
    
            if(is_array($this->aFiles)) { # Si on a des fichiers
            $nbcfiles =count($this->aFiles);
            $nbccount = 0;
            $i = 0;
    
        /* Nettoyage des mots recherché */        
            $word = $_POST['search'];
            $word = addslashes($word);
            $word = strtolower($word); 
        
        /* on parcours tout nos fichiers , attention ça peut-etre long */        
        while ($nbccount+1 <= $nbcfiles):
            $file2open = PLX_ROOT.$this->aConf['racine_articles'].$this->aFiles[$nbccount];
            $this->parseArticle($file2open);
            $this->art =$this->parseArticle($file2open);
            $nbccount++;
        
        /* on extrait les titre chapo et content pour y rechercher notre chaine */ 
        
                $content = $this->art['title'];
                $content .=' '.strip_tags( $this->art['chapo']).' ';
                $content .= strip_tags($this->art['content']);
                $content = addslashes($content);
                $content = strtolower($content);
                $trouve = substr_count($content,$word);
                
        /* si le terme recherché existe dans cette article */
                if($trouve!==0){ 
                
        #création du résume , appel de la methode getresume() 
        
                $content=$this->getresume($content,$word);
                
        #on alimente notre tableau 
        
                $tableau[] = array(preg_replace('[^(000)|^(00)|^(0)]', '', $this->art['numero']),$this->art['title'],$this->art['url'],$content,$this->art['date'],$trouve);
                $i++;
    
                }
            
                endwhile;
            }            
            
            /* on initialise notre variable de resultat de recherche en ouvrant une liste ordonnée */
            $search_results = '<ol class="recherche">';
            
            #compte les enregistrement puis boucle dessus 
            $n=count($tableau);    
            
            for($i=$n-1;$i >= 0;$i--) {
                
                
            #creations de liens vers les articles contenant la chaine recherchée et l'extrait
            $search_results .= '
                <li>
                    <h3 class="rechercheTitle"><a href="?article'.$tableau[$i]['0'].'/'.$tableau[$i]['2'].'">'.$tableau[$i]['1'].' </a> </h3>
                    <p class="recherche"><span class="rechercheNb">  Terme trouvé '.$tableau[$i]['5'].' fois. </span>
                    <span class="rechercheShowDate"> Date : '.plxUtils::dateIsoToHum($tableau[$i]['4']).'</span>
                    </p>
                    <p class="rechercheResume">'.stripslashes($tableau[$i]['3']).'</p>
                    <p class="rechercheTargetBlank" >
                        <a href="?article'.$tableau[$i]['0'].'/'.$tableau[$i]['2'].' onclick="window.open(this.href,\' _blank\');return false;" title="Oubrir dans une nouvelle page" style="font-weight:normal;font-style:italic";">( Ouvrir dans une nouvelle page  )</a> .</p>
                </li>';
            }
            /* si notre variable de resultat de recherche n'a pas changé on la remplace par un message */
             if($search_results=='<ol class="recherche">')  {$search_results = '<p style="display:list-item;list-style-position:inside;" class="recherche"> ... fin de la recherche</p><p class="recherche"><b>La recherche a étè infructueuse </b>, il n\'y a rien qui corresponde à vos criteres .
             <br /> <b>Verifiez l\'orthographe ou changez les mots clés. </b></p>'; }
             /* si notre variable de recherche a étè alimenté , on referme notre liste ordonnée */
             else {  $search_results .= '</ol><p style="display:list-item;list-style-position:inside;" class="recherche"> ... fin de la recherche</p>';
            }
            
            return $search_results;
        }
    
    }
    
    ?>
    <div id="content">
            <div class="post">
        
        
    <?php
    if(!empty($_POST['search'])) {
            echo '<p style="color:red"> Votre Recherche : '.$_POST['search'].'</p>';
            $search = new plxSearch((PLX_CONF));
            $search->prechauffage();
            $search->demarrage();
            echo $search->getsearch();
        }
            /* on affiche le formulaire */
             ?>
    
             <form method="post" action="">
              <fieldset><legend ><?php
              if (isset($_POST['search']))  echo'  Faire une nouvelle recherche en changeant le(s) mot(s) clé(s).';
              else echo 'Faire une recherche .';
              ?></legend>
                <p><input name="search" size="15" maxlength=\"255\" value="<?php
              if (isset($_POST['search']))  echo $_POST['search']; 
              ?>" type="text" class="search" /> <b> >> </b> <input type="submit" value="rechercher !" /></p>
              </fieldset>
            </form> 
            </div>
    </div>
    
  • StéphaneStéphane Member, Former PluXml Project Manager
    Bonjour bg62

    Je n'ai pas le temps de regarder le moteur de recherche que tu utilises developpé par gcyrillus.

    En revanche peux-tu essayer cette méthode

    1. Créer un dossier plugins à la racine de ton pluxml
    2. Dans ce dossier créé un fichier plx.search.php et copie dedans le code suivant:
    <?php 
    if(!defined('PLX_ROOT')) exit;
    
    if(!class_exists(plxSearch)) :
    
    class plxSearch {
    
    	function plxSearch() {
    	
    		if(isset($_POST['search'])) {
    
    			global $plxShow;
    			
    			$plxShow->plxMotor->mode = 'search';
    			if(file_exists(PLX_ROOT.'themes/'.$plxShow->plxMotor->style.'/'.$plxShow->plxMotor->mode.'.php')) {
    				include(PLX_ROOT.'themes/'.$plxShow->plxMotor->style.'/'.$plxShow->plxMotor->mode.'.php');
    			} else {
    				echo 'Le fichier cible PluXml est introuvable ('.PLX_ROOT.'themes/'.$plxShow->plxMotor->style.'/'.$plxShow->plxMotor->mode.'.php) !';
    			}
    			exit;
    		}
    	
    	}
    	
    	function Results() {
    		global $plxShow;
    		
    		$plxGlob_arts = new plxGlob(PLX_ROOT.$plxShow->plxMotor->aConf['racine_articles']);
    		$aFiles = $plxGlob_arts->query('/[0-9]{4}.([0-9]{3}|home).[0-9]{12}.[a-z0-9-]+.xml$/','search','rsort');
    
    		if(is_array($aFiles)) { # On a des fichiers
        
    			$searchword = strtolower(addslashes($_POST['searchfield']));
    			ob_start();
    			while(list($k,$v) = each($aFiles)) { # On parcourt tous les fichiers
    	
    				$art = $plxShow->plxMotor->parseArticle(PLX_ROOT.$plxShow->plxMotor->aConf['racine_articles'].$v);
    
    				$searchstring  = strtolower(addslashes($art['title'].$art['chapo'].$art['content'])); 
    		
    				if (substr_count($searchstring,$searchword) > 0) {
    					$searchresults = true;
    					$art_num = intval($art['numero']);
    					$art_url = plxUtils::strCheck($art['url']);
    					$art_title = plxUtils::strCheck($art['title']);
    					$art_date = plxDate::dateIsoToHum($art['date'], $format_date);
    					echo '<li>'.$art_date.': <a href="'.$plxShow->plxMotor->aConf['racine'].'?article'.$art_num.'/'.$art_url.'">'.$art_title.'</a></li>'; 
    				}
    			}
    			$content = ob_get_clean(); 
    			if ($content!='')
    				echo '<p>Résultats de la recherche.<br /><ol class="search_results">'.$content.'</ol></p>';
    			else
    				echo '<p>Aucun résultat pour : <strong>'.$searchword.'</strong></p>';
    		}
    	}
    
    	function Form() {
    	
    		?>
    		<form method="post" id="searchform" action="">
    		<p class="searchform">
    		<input type="hidden" name="search" value="search"  />
    		<input type="text" class="searchfield" name="searchfield" value="Rechercher..." onblur="if(this.value=='') this.value='Rechercher...';" onfocus="if(this.value=='Rechercher...') this.value='';" /> 
    		<input type="submit" class="searchbutton" value="Go" />
    		</p>
    		</form>
    		<?php
    	}
    	
    
    }
    
    $plxSearch = new plxSearch();
    endif;
    ?>
    
    3. Dans le fichier sidebar.php de ton thème, copie le code suivant à l'endroit où tu souhaites voir le formulaire de recherche.
    <h2>Recherche</h2>
    	<?php plxSearch::Form() ?>
    
    4. Dans le fichier header.php de ton thème, après la ligne suivante
    <?php if(!defined('PLX_ROOT')) exit; ?>
    
    copie la ligne suivante:
    <?php include(PLX_ROOT.'plugins/plx.search.php') ?>
    
    5. dans le dossier de ton thème, créé un fichier search.php et copie dedans le code suivant
    <?php if(!defined('PLX_ROOT')) exit; ?>
    <?php include(dirname(__FILE__).'/header.php'); # On insere le header ?>
    <div id="page">
    	<div id="content">
    		<h2 class="title">Résultat de la recherche</h2>
    		<?php plxSearch::Results() ?>
    	</div>
    	<?php include(dirname(__FILE__).'/sidebar.php'); # On insere la sidebar ?>
    </div>
    <?php include(dirname(__FILE__).'/footer.php'); # On insere le footer ?>
    
    Pour rappel sur le wiki il y a la méthode pour ajouter un formulaire de recherche à partir d'une page statique. Ici c'est une façon de faire pour ajouter un formulaire de recherche à partir de la sidebar.

    Tiens nous au courant pour savoir si cela a résolu ton problème.

    Stéphane

    Consultant PluXml

    Ancien responsable du projet (2010 à 2018)

  • grand merci pour ta disponibilité !
    j'ai fait tout ce que tu m'as indiqué, (sur la mise à jour dont je t'ai envoyé l'url en MP) mais ....
    - donc le moteur interne en haut de page ne fonctionne plus maintenant ...
    - premier problème:
    avec la même recherche : "recherche d'images"
    j'ai ce résultat:

    Résultat de la recherche

    Aucun résultat pour : recherche d\\\'images (cette fois-ci avec trois \ )

    - lorsque je fais une recherche autre comme "google" par exemple, cela me liste les articles comme sur le plan du site et non comme sont donnés actuellement sur le blog en ligne avec les différentes occurences :
    "Google : l'histoire

    Terme trouvé 15 fois. Date : vendredi 17 août 2007

    ... google : l'histoire google, le moteur le plus utilisé actuellement, montre comment on peut encore créer un ... e 'mini-révolution' dans le monde informatique de nos jours. google est un néologisme créé à partir du mot ... ). google a choisi ce terme pour symboliser sa mission : organiser l'immense volume d'information disponible ... sur le web et

    ( Ouvrir dans une nouvelle page ) ."

    teste sur les deux liens tu verras certainement mieux par toi même, mais doit y avoir un bug là ... et vaudrait peut-être mieux le résoudre pour ensuite pouvoir communiquer une bonne solution finale à la communauté ...

    @mitiés
  • janvier 2010 modifié
    Bonjour,

    est tu sur que ton blog est sur une version 4.3 ?
    Pour la version "gcyillus" , commente la ligne :
    $content = addslashes($content);
    
    ta config semble s'en charger d'elle même .

    Cet extension/plugin , n'est pas tout a fait compatible avec la 4.3 (fonction de formatage de la date differente :
    plxUtils::dateIsoToHum($tableau[$i]['4'])
    
    a remplacer avec :
    plxDate::dateIsoToHum($tableau[$i]['4'],$format='#day #num_day #month #num_year(4)' )
    
    pour un usage dans la 4.3
    pour le formatage de la date , voir le wiki :
    Description:

    * Méthode qui affiche la date de publication de l'article selon le format choisi

    * Variable : format
    * Description : format du texte de la date (variable: #minute,#hour,#day,
    #month,#num_day,#num_month,
    #num_year(4),#num_year(2))
    Tient moi au courant .
    ligne commenté , update de 4.1 vers 4.3 , version ou affichace que tu veut ... etc .

    GC
    Cordialement

    MAJ du script que tu utilise pour une V4.3 (en page statique)
    <?php
    /**
     * Classe plxSearch Recherche simple
     * @Pages statiques Pluxml beta 4.3
     * @extends plxMotor
     * @author    Griboval Cyril
     * @Stable 1.02
     **/
    class plxSearch extends plxMotor {
    
    function plxSearch($filename) {
    parent::plxMotor($filename);
    $plxGlob_arts =  new plxGlob(PLX_ROOT.$this->aConf['racine_articles']);
    $this->motif = '/^[0-9]{4}.[0-9]{3}.[0-9]{12}.[a-z0-9-]+.xml$/';
    $this->aFiles = $this->plxGlob_arts->query($this->motif,'art',$ordre,0,999);
    }
    
        /**
         * Méthode qui elague et fait un résumé des résultats de recherche
         * 
         * @author    Griboval Cyrille
         **/
      function getresume($content,$word) {
      
    // if (preg_match('#(?:\w+\W+){100}\w+#s' , $content , $limite)) {$content =$limite[0];}
    
            #création du contexte du mot recherché (extraits page) 
            #recherche de 0 à 100 caractéres avant et aprés le mot recherché BG
                $masque ='[(\w+|&-_.;:!\'\"\#éèçàù\s  )?]{0,100}';
    
                preg_match_all('#'.$masque.'('.$word.'? )'.$masque.'#', $content, $out);
                
            # on separe chaque extraits
                foreach( $out[0] as $value ) {  $resume .= ' ... '.$value.' ';}
    
                $resume=stripslashes($resume).' ... ';
    
            # ce mot peut apparaitre plusieurs fois ! 
            # (0-50 caractéres + mot recherché +0-50 caractéres ) X nb occurences = .... 
            # on limite alors le résumé a une chaine qui ne contient qu'une trentaines d'espaces SOIXANTAINE BG
            
                if (preg_match('#(?:\w+\W+){60}\w+#s' , $resume , $regule)) {$resume =' ... '.$regule[0];}    
                
            # Mise en evidence visuelle : engraissage et grossisement de l'occurence
    
                $content=preg_replace('#'.$word.'#', '<b style="font-size:110%;padding:0 1px;">'.$word.'</b>', $resume);    
            
            # renvoi du traitement 
            
                return $content;
    }  
    
    
        /**
         * Méthode qui formatte les résultats de recherche
         * 
         * @author    Griboval Cyrille
         **/
    function getsearch() {
    
    
    
            if(is_array($this->aFiles)) { # Si on a des fichiers
            $nbcfiles =count($this->aFiles);
            $nbccount = 0;
            $i = 0;
    
        /* Nettoyage des mots recherché */        
            $word = $_POST['search'];
            $word = addslashes($word);
            $word = strtolower($word); 
        
        /* on parcours tout nos fichiers , attention ça peut-etre long */        
        while ($nbccount+1 <= $nbcfiles):
            $file2open = PLX_ROOT.$this->aConf['racine_articles'].$this->aFiles[$nbccount];
            $this->parseArticle($file2open);
            $this->art =$this->parseArticle($file2open);
            $nbccount++;
        
        /* on extrait les titre chapo et content pour y rechercher notre chaine */ 
        
                $content = $this->art['title'];
                $content .=' '.strip_tags( $this->art['chapo']).' ';
                $content .= strip_tags($this->art['content']);
                $content = addslashes($content);
                $content = strtolower($content);
                $trouve = substr_count($content,$word);
                
        /* si le terme recherché existe dans cette article */
                if($trouve!==0){ 
                
        #création du résume , appel de la methode getresume() 
        
                $content=$this->getresume($content,$word);
                
        #on alimente notre tableau 
        
                $tableau[] = array(preg_replace('[^(000)|^(00)|^(0)]', '', $this->art['numero']),$this->art['title'],$this->art['url'],$content,$this->art['date'],$trouve);
                $i++;
    
                }
            
                endwhile;
            }            
            
            /* on initialise notre variable de resultat de recherche en ouvrant une liste ordonnée */
            $search_results = '<ol class="recherche">';
            
            #compte les enregistrement puis boucle dessus 
            $n=count($tableau);    
            
            for($i=$n-1;$i >= 0;$i--) {
                
                
            #creations de liens vers les articles contenant la chaine recherchée et l'extrait
            $search_results .= '
                <li>
                    <h3 class="rechercheTitle"><a href="?article'.$tableau[$i]['0'].'/'.$tableau[$i]['2'].'">'.$tableau[$i]['1'].' </a> </h3>
                    <p class="recherche"><span class="rechercheNb">  Terme trouvé '.$tableau[$i]['5'].' fois. </span>
                    <span class="rechercheShowDate"> Date : '.plxDate::dateIsoToHum($tableau[$i]['4'],$format='#day #num_day #month #num_year(4)' ).'</span>
                    </p>
                    <p class="rechercheResume">'.stripslashes($tableau[$i]['3']).'</p>
                    <p class="rechercheTargetBlank" >
                        <a href="?article'.$tableau[$i]['0'].'/'.$tableau[$i]['2'].' " onclick="window.open(this.href,\' _blank\');return false;" title="Oubrir dans une nouvelle page" style="font-weight:normal;font-style:italic";">( Ouvrir dans une nouvelle page  )</a> .</p>
                </li>';
            }
            /* si notre variable de resultat de recherche n'a pas changé on la remplace par un message */
             if($search_results=='<ol class="recherche">')  {$search_results = '<p style="display:list-item;list-style-position:inside;" class="recherche"> ... fin de la recherche</p><p class="recherche"><b>La recherche a étè infructueuse </b>, il n\'y a rien qui corresponde à vos criteres .
             <br /> <b>Verifiez l\'orthographe ou changez les mots clés. </b></p>'; }
             /* si notre variable de recherche a étè alimenté , on referme notre liste ordonnée */
             else {  $search_results .= '</ol><p style="display:list-item;list-style-position:inside;" class="recherche"> ... fin de la recherche</p>';
            }
            
            return $search_results;
        }
    
    }
    
    ?>
    <div id="content">
            <div class="post">
        
        
    <?php
    if(!empty($_POST['search'])) {
            echo '<p style="color:red"> Votre Recherche : '.$_POST['search'].'</p>';
            $search = new plxSearch((PLX_CONF));
            $search->prechauffage();
            $search->demarrage();
            echo $search->getsearch();
        }
            /* on affiche le formulaire */
             ?>
    
             <form method="post" action="">
              <fieldset><legend ><?php
              if (isset($_POST['search']))  echo'  Faire une nouvelle recherche en changeant le(s) mot(s) clé(s).';
              else echo 'Faire une recherche .';
              ?></legend>
                <p><input name="search" size="15" maxlength=\"255\" value="<?php
              if (isset($_POST['search']))  echo $_POST['search']; 
              ?>" type="text" class="search" /> <b> >> </b> <input type="submit" value="rechercher !" /></p>
              </fieldset>
            </form> 
            </div>
    </div>
    


    Cordialement,
    gcyrillus

    Mon site PluXml: https://re7net.com | Plugins: https://ressources.pluxopolis.net/banque-plugins/index.php?all_versions | demos sur free http://gcyrillus.free.fr/new | Thèmes: tester et télécharger @ https://pluxthemes.com
    Indiquez [RESOLU] dans le titre de votre question une fois le soucis réglè, Merci

  • bg62bg62 Member
    janvier 2010 modifié
    grand merci GC
    "MAJ du script que tu utilise pour une V4.3 (en page statique)"
    donc si je comprends bien j'édite la page statique sur ma nouvelle version et je colle ton code à la place dedans ... ?
    mais qu'en est-il pour les autres modifs que stéphane m'a faites faire ???
    je viens de mettre ton code dans la page statique et j'ai toujours ce message d'erreurs :
    "Fatal error: Cannot redeclare class plxsearch in /homepages/39/d141584484/htdocs/blognew/data/statiques/002.moteur-interne.php on line 10"
    @+
  • StéphaneStéphane Member, Former PluXml Project Manager
    Bonjour bg62

    Si tu utilises la solution de GC, il vaut peut être mieux ne pas tenir de ce que je t'ai proposé. Ce sont 2 solutions différentes, 2 manières de faire le moteur de recherche dans la sidebar

    Stéphane

    Consultant PluXml

    Ancien responsable du projet (2010 à 2018)

  • Stéphane a écrit:
    Bonjour bg62
    Si tu utilises la solution de GC, il vaut peut être mieux ne pas tenir de ce que je t'ai proposé. Ce sont 2 solutions différentes, 2 manières de faire le moteur de recherche dans la sidebar
    Stéphane
    salut stéphane
    vous allez jouer au ping pong ... je suis la balle ... :-)
    bon j'ai remis son code dans la page statique, mais comme vais-je faire 'marche-arrière' pour revenir à la situation que j'avais avant de suivre tes corrections ?
    @+ bg
  • re ... j'ai remis les compteurs à zéro ... sauf pour le script de recherche : c'est donc le dernier envoyé ici plus haut pas GC, mais l'erreur sur "recherche d'images' pose toujours le même problème et donne le même résultat ...
    vous pouvez le voir sur le lien de mise à jour que je vous ai donné par MP ...
    ... j'vais pleurer dans mon coin ...
    @+
  • StéphaneStéphane Member, Former PluXml Project Manager
    @GC dans ton script, tiens-tu compte de la valeur serveur des magique quotes. Pour bg62, les magique quotes sont à vrai. c'est peut l'origine de son problème.

    Consultant PluXml

    Ancien responsable du projet (2010 à 2018)

  • re

    Non , en effet le script ne teste pas les quotes ,
    De mémoire , il faudrait probablement remplacer la ligne (evoqué plus tot)
    $content = addslashes($content);
    
    par
    if(get_magic_quotes_gpc() != 1) {$content = addslashes($content);}
    
    ainsi que
    $word = addslashes($word);
    
    par
    if(get_magic_quotes_gpc() != 1) {$word = addslashes($word);}
    
    (la v4.3 gere les quotes au parsage des article il me semble , il y'a la probablement un double emploi )

    La reponse est peut-etre hative , je n'ai pas vérifier ( -> aprés midi construction Igloo et galette des rois avec les enfants )

    L'idéal est evidemment de ne pas melanger les deux script :)

    ++


    Cordialement,
    gcyrillus

    Mon site PluXml: https://re7net.com | Plugins: https://ressources.pluxopolis.net/banque-plugins/index.php?all_versions | demos sur free http://gcyrillus.free.fr/new | Thèmes: tester et télécharger @ https://pluxthemes.com
    Indiquez [RESOLU] dans le titre de votre question une fois le soucis réglè, Merci

  • janvier 2010 modifié
    MAJ du script prenant en compte les magic_quotes (pour la v 4.3 )
    </div><!-- corrige defaut visuel du a l'imbrication des div generer  --><div><?php
    /**
     * Classe plxSearch Recherche simple (avec magic_quotes_gpc : On ou Off )
     * @Pages statiques Pluxml beta 4.3
     * @extends plxMotor
     * @author    Griboval Cyril
     * @Stable 1.03
     **/
    class plxSearch extends plxMotor {
    
    function plxSearch($filename) {
    parent::plxMotor($filename);
    $plxGlob_arts =  new plxGlob(PLX_ROOT.$this->aConf['racine_articles']);
    $this->motif = '/^[0-9]{4}.[0-9]{3}.[0-9]{12}.[a-z0-9-]+.xml$/';
    $this->aFiles = $this->plxGlob_arts->query($this->motif,'art',$ordre,0,999);
    }
    
        /**
         * Méthode qui elague et fait un résumé des résultats de recherche
         * 
         * @author    Griboval Cyrille
         **/
      function getresume($content,$word) {
      
    // if (preg_match('#(?:\w+\W+){100}\w+#s' , $content , $limite)) {$content =$limite[0];}
    
            #création du contexte du mot recherché (extraits page) 
            #recherche de 0 à 100 caractéres avant et aprés le mot recherché BG
                $masque ='[(\w+|&-_.;:!\'\"\#éèçàù\s  )?]{0,100}';
    
                preg_match_all('#'.$masque.'('.$word.'? )'.$masque.'#', $content, $out);
                
            # on separe chaque extraits
                foreach( $out[0] as $value ) {  $resume .= ' ... '.$value.' ';}
    
                $resume=stripslashes($resume).' ... ';
    
            # ce mot peut apparaitre plusieurs fois ! 
            # (0-50 caractéres + mot recherché +0-50 caractéres ) X nb occurences = .... 
            # on limite alors le résumé a une chaine qui ne contient qu'une trentaines d'espaces SOIXANTAINE BG
            
                if (preg_match('#(?:\w+\W+){60}\w+#s' , $resume , $regule)) {$resume =' ... '.$regule[0];}    
                
            # Mise en evidence visuelle : engraissage et grossisement de l'occurence
    
                $content=preg_replace('#'.$word.'#', '<b style="font-size:110%;padding:0 1px;">'.$word.'</b>', $resume);    
            
            # renvoi du traitement 
            
                return $content;
    }  
    
    
        /**
         * Méthode qui formatte les résultats de recherche
         * 
         * @author    Griboval Cyrille
         **/
    function getsearch() {
    
    
    
            if(is_array($this->aFiles)) { # Si on a des fichiers
            $nbcfiles =count($this->aFiles);
            $nbccount = 0;
            $i = 0;
    
        /* Nettoyage des mots recherché */        
            $word = $_POST['search'];
            if(get_magic_quotes_gpc() == 1 ) {$word = stripslashes($word);} else {$word = addslashes($word);}
            $word = strtolower($word); 
        
        /* on parcours tout nos fichiers , attention ça peut-etre long */        
        while ($nbccount+1 <= $nbcfiles):
            $file2open = PLX_ROOT.$this->aConf['racine_articles'].$this->aFiles[$nbccount];
            $this->parseArticle($file2open);
            $this->art =$this->parseArticle($file2open);
            $nbccount++;
        
        /* on extrait les titre chapo et content pour y rechercher notre chaine */ 
        
                $content = $this->art['title'];
                $content .=' '.strip_tags( $this->art['chapo']).' ';
                $content .= strip_tags($this->art['content']);
    if(get_magic_quotes_gpc() != 1) {$content = addslashes($content);}
                $content = strtolower($content);
                $trouve = substr_count($content,$word);
                
        /* si le terme recherché existe dans cette article */
                if($trouve!==0){ 
                
        #création du résume , appel de la methode getresume() 
        
                $content=$this->getresume($content,$word);
                
        #on alimente notre tableau 
        
                $tableau[] = array(preg_replace('[^(000)|^(00)|^(0)]', '', $this->art['numero']),$this->art['title'],$this->art['url'],$content,$this->art['date'],$trouve);
                $i++;
    
                }
            
                endwhile;
            }            
            
            /* on initialise notre variable de resultat de recherche en ouvrant une liste ordonnée */
            $search_results = '<ol class="recherche">';
            
            #compte les enregistrement puis boucle dessus 
            $n=count($tableau);    
            
            for($i=$n-1;$i >= 0;$i--) {
                
                
            #creations de liens vers les articles contenant la chaine recherchée et l'extrait
            $search_results .= '
                <li>
                    <h3 class="rechercheTitle"><a href="?article'.$tableau[$i]['0'].'/'.$tableau[$i]['2'].'">'.$tableau[$i]['1'].' </a> </h3>
                    <p class="recherche"><span class="rechercheNb">  Terme trouvé '.$tableau[$i]['5'].' fois. </span>
                    <span class="rechercheShowDate"> Date : '.plxDate::dateIsoToHum($tableau[$i]['4'],$format='#day #num_day #month #num_year(4)' ).'</span>
                    </p>
                    <p class="rechercheResume">'.stripslashes($tableau[$i]['3']).'</p>
                    <p class="rechercheTargetBlank" >
                        <a href="?article'.$tableau[$i]['0'].'/'.$tableau[$i]['2'].'" onclick="window.open(this.href,\' _blank\');return false;" title="Oubrir dans une nouvelle page" style="font-weight:normal;font-style:italic";">( Ouvrir dans une nouvelle page  )</a> .</p>
                </li>';
            }
            /* si notre variable de resultat de recherche n'a pas changé on la remplace par un message */
             if($search_results=='<ol class="recherche">')  {$search_results = '<p style="display:list-item;list-style-position:inside;" class="recherche"> ... fin de la recherche</p><p class="recherche"><b>La recherche a étè infructueuse </b>, il n\'y a rien qui corresponde à vos criteres .
             <br /> <b>Verifiez l\'orthographe ou changez les mots clés. </b></p>'; }
             /* si notre variable de recherche a étè alimenté , on referme notre liste ordonnée */
             else {  $search_results .= '</ol><p style="display:list-item;list-style-position:inside;" class="recherche"> ... fin de la recherche</p>';
            }
            
            return $search_results;
        }
    
    }
    
    ?>
    <div id="content">
            <div class="post">
        
        
    <?php
    if(!empty($_POST['search'])) {
     if(get_magic_quotes_gpc() == 1 ) {$recherche = stripslashes($_POST['search']);}else {$recherche = $_POST['search'];}
            echo '<p style="color:red"> Votre Recherche : '.$recherche.'</p>';
            $search = new plxSearch((PLX_CONF));
            $search->prechauffage();
            $search->demarrage();
            echo $search->getsearch();
        }
            /* on affiche le formulaire */
             ?>
    
             <form method="post" action="">
              <fieldset><legend ><?php
              if (isset($_POST['search']))  echo'  Faire une nouvelle recherche en changeant le(s) mot(s) clé(s).';
              else echo 'Faire une recherche .';
              ?></legend>
                <p><input name="search" size="15" maxlength=\"255\" value="<?php
              if (isset($_POST['search']))  echo stripslashes($_POST['search']); 
              ?>" type="text" class="search" /> <b> >> </b> <input type="submit" value="rechercher !" /></p>
              </fieldset>
            </form> 
            </div>
    </div>
    
    bonsoir


    Cordialement,
    gcyrillus

    Mon site PluXml: https://re7net.com | Plugins: https://ressources.pluxopolis.net/banque-plugins/index.php?all_versions | demos sur free http://gcyrillus.free.fr/new | Thèmes: tester et télécharger @ https://pluxthemes.com
    Indiquez [RESOLU] dans le titre de votre question une fois le soucis réglè, Merci

  • super !!! ça marche !!
    je vais voir pour le pousser à fond au cas où ... mais je ne pense pas !
    t'es un vrai fou ... mais les fous de ce genre il y en a qu'on a fini par appeler "génies" !
    un grand merci @ toi GC
    @+
  • re ... salut à tous deux !
    bon je me suis encore planté ... mais pas de ma faute : pendant le transfert ftp (avec dream) coupure de courant ... et il a (voulu) mettre les liens à jour ... résultat des courses : tout faux !
    heureusement j'avais une sauvegarde de l'original (pas du nouveau ... le C** !), bon mais avec ça et l'aide apportée dans le forum j'ai repris de A à Z et je viens de faire la mise à jour : nickel !!!
    même les liens sur google fonctionnent
    http://www.google.fr/search?hl=fr&q=site:blog.unesourisetmoi.info+unesourisetmoi.info&start=80&sa=N&cts=1263306708827
    alors que la fois dernière ça les avait mis en erreur et il a du repasser ...

    Si vous avez le temps d'aller y faire un tour et de pousser la bête :
    http://blog.unesourisetmoi.info/
    je suis preneur de toutes les remarques !

    @mitiés bg
  • Bonsoir,

    comme je te l'ai dit , ton blog grossi et arrive tout doucement au limites alloué par ton serveur pour que le moteur reste utilisable . (temps d'execution et memoire alloués ,ceci est aussi lié aussi au nombre de visiteurs ).

    Quand ce moteur qui stocke un résumé de l'article n'aura plus assez de ressouces du au nombre d'articles , tu devras faire usage du moteur simplifié du wiki , les limites seront un repoussées .
    Une fois ton blog trop bien garni , il faudra alors te résigner a laisser tombé le moteur de recherche interne ou migrer vers un CMS fonctionnant sur une base de données et plus adapté aux sites a contenu et traffic plus important.
    La recherche dans pluxml oblige a ouvrir tout les fichiers articles , les parcourir , stocké en memoire leur nom et url et eventuellement leur nombre , le nombre d'occurance trouvé eventuellement un résumé , ça peut devenir gros et long , trés long :) .

    ++


    Cordialement,
    gcyrillus

    Mon site PluXml: https://re7net.com | Plugins: https://ressources.pluxopolis.net/banque-plugins/index.php?all_versions | demos sur free http://gcyrillus.free.fr/new | Thèmes: tester et télécharger @ https://pluxthemes.com
    Indiquez [RESOLU] dans le titre de votre question une fois le soucis réglè, Merci

  • je t'avais déjà posé la question je crois : quel moyen pour maximiser la mémoire sur le serveur ?
    car pas question que je lâche PluXml ni que je prenne un serveur dédié (pas les moyens ...)
    ou alors, peut-être aussi l'intégration du script de recherche google personnalisé pour et dans le blog pourrait-il donner qq chose ? (les pages étant référencées très rapidement ....)
    @+
  • @bg62 : la recherche personnalisé Google, c'est ce que nous utilisons pour pluxml.org
  • bg62bg62 Member
    janvier 2010 modifié
    marama a écrit:
    @bg62 : la recherche personnalisé Google, c'est ce que nous utilisons pour pluxml.org
    tu veux dire que sur ce lien la case de recherche en haut à droite est un moteur de recherche 'google' ???
    avec ceci:
    <div id="site_search">
    
    			<form id="search" action="http://www.google.com/cse">
    				<p>
    					<input type="hidden" name="cx" value="007996681113456293512:b5dd4uiedoi" />
    					<input type="hidden" name="ie" value="UTF-8" />
    					<input class="quick_search" type="text" name="q" size="20" value="Recherche" onblur="if(this.value=='') this.value='Recherche';" onfocus="if(this.value=='Recherche') this.value=''" />
    					<input class="quick_search_bt" type="submit" name="sa" value="" accesskey="q" />
    				</p>
    			</form>
    		</div>
    
    comment le placer et l'adapter sur le mien ? (vais laisser les deux moteurs, dans la siderbar : 2 et dans la page 'moteur interne' que je renommerai 'rechercher' les 2 également ...
  • Il faut aller sur http://www.google.com/cse/ et créer un nouveau moteur de recherche.

    Mais j'ai un petit souci : pas moyen de faire avec la méthode iframe de retour de résultats...

    J'ai mis dans ma sidebar le code fourni :
    <form action="http://www.customtaro.fr/blog/?static2/rechercher" id="cse-search-box">
      <div>
        <input type="hidden" name="cx" value="011319163616547876381:claobez0nve" />
        <input type="hidden" name="cof" value="FORID:10" />
        <input type="hidden" name="ie" value="UTF-8" />
        <input type="text" name="q" size="31" />
        <input type="submit" name="sa" value="Rechercher" />
      </div>
    </form>
    <script type="text/javascript" src="http://www.google.com/cse/brand?form=cse-search-box&lang=fr"></script>
    
    et dans la page statque :
    <div id="cse-search-results"></div>
    <script type="text/javascript">
      var googleSearchIframeName = "cse-search-results";
      var googleSearchFormName = "cse-search-box";
      var googleSearchFrameWidth = 600;
      var googleSearchDomain = "www.google.com";
      var googleSearchPath = "/cse";
    </script>
    <script type="text/javascript" src="http://www.google.com/afsonline/show_afs_search.js"></script>
    
    Le navigateur cherche en vain de charger une page :
    http://www.customtaro.fr/blog/?cx=011319163616547876381%3Aclaobez0nve&cof=FORID%3A10&ie=UTF-8&q=&sa=Rechercher&siteurl=www.customtaro.fr%252Fblog%252F%253Fcx%253D011319163616547876381%253Aclaobez0nve%2526cof%253DFORID%253A9%2526ie%253DUTF-8%2526q%253Dtest%2526sa%253DRechercher
    
    Comprend pas... Quelqu'un a une idée ? ;)
  • regarde sur le mien testes, pousse la bête, dans les trois manières possibles et si ça te convient tu me dis quelle méthode tu préféres et je te mets le codage ...
    @+
  • Merci bg62 mais je préfère tourner en "externe" avec google...
    J'avais déjà tester les 2 méthodes (celle de ce post et celle du wiki) et j'avais opté pour celle du wiki "plus légère" mais là, je préfère basculer sur du google, surtout que j'ai pas trop de soucis avec le référencement de mon contenu. :p
    J'ai quelques 700 articles sur le blog et plus de 500 visiteurs par jour, j'ai pas envie que le serveur mouline à chaque recherche. La solution Google est pas mal pour ça. ;)
  • bg62bg62 Member
    janvier 2010 modifié
    "La solution Google est pas mal pour ça."
    effectivement quand il le faut, mais tu ne l'a pas installée sur ton blog ... ? ou alors je bigle ...
    @+
    ps : tes pages statiques ... la side barre se barre ... à droite sous FF
  • Non, effectivement, c'est sur mon nouveau thème qui est en test et qui devrait paraître dans pas trop longtemps :p
Connectez-vous ou Inscrivez-vous pour répondre.