[V4-page statique] recherche simple

décembre 2008 modifié dans Modifications
bonjour,
<edit >sur certains blogs avec de nombreux articles le script semble manqué de mémoire , faites plutôt usage de ce script sur ce topic:
http://forum.pluxml.org/viewtopic.php?pid=8784 .</edit>


Voici un moteur de recherche basic , trés similaire a celui proposé pour la V3 .
La recherche est effectué sur , le titre , chapo et content de chaque article .
<edit> et une version plus complete proposant un résumé de l'article ou est trouvé le mot recherché : http://forum.pluxml.org/viewtopic.php?pid=8703#p8703 .

Procedure et conseil d'installation sont expliqué avec la version moins basique , plus bas dans ce topic .

n'existe ou ne fais pas :
- generation du formulaire de recherche autaomatique dans la sidebar ou le header .
- option de recherche de type : & , | , !
- option de recherche sur titre ou contenu ou auteur .
- pagination
</>

Pour l'installer :
creer une nouvelle page statique , editer la et copier/coller le code suivant dedans :
<?php
/**
 * Classe plxSearch Recherche simple
 * @Pages statiques Pluxml beta 4
 * @extends plxMotor
 * @author	Griboval Cyril
 * @Beta 
 **/
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);
}
	
function getsearch() {

//$this->getArticles(); # Recuperation des articles  // <- ici consommation de ressources inutile

		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 .= $this->art['chapo'];
            $content .= $this->art['content'];
            $content = addslashes($content);
            $content = strtolower($content);
            $trouve = substr_count($content,$word);
			if($trouve!=0){ #on alimente notre tableau 
            $tableau[] = array(preg_replace('[^(000)|^(00)|^(0)]', '', $this->art['numero']),$this->art['title'],$this->art['url']);
            $i++;
			}
			
			endwhile;
        }
		/* on initialise notre variable de resultat de recherche en ouvrant une liste olrdonné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
        $search_results .= '<li><a href="?article'.$tableau[$i]['0'].'/'.$tableau[$i]['2'].'">'.$tableau[$i]['1'].'</a></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>';
		}
		
		/* on affiche le formulaire */
         $search_results .= '
         <form method="post" action="">
          <fieldset><legend >Faire une nouvelle recherche en changeant les mots clés.</legend>
            <p><input name="search" size="15" maxlength=\"255\" value="'.$word.'" type="text" class="search" /> <b> >> </b> <input type="submit" value="rechercher !" /></p>
          </fieldset>
        </form> ';

        return $search_results;
    }

}

?>

<div id="content">
		<div class="post">
	<h2 class="titre_recherche">Recherche</h2>
	
<?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();
	}
else 
	{
?>
<form method="post" action="">
          <fieldset><legend >Faire une recherche .</legend>
            <p><input name="search" size="15" maxlength=\"255\" value="" type="text" class="search" /> <b> >> </b> <input type="submit" value="rechercher !" /></p>
          </fieldset>
        </form>
		<?php 
			} #fin
		?>
		</div>
</div>
enregistrer , verifier que votre page est "active" .
Ne reste plus qu'a repasser coté public et tester votre page de recherche .

GC

corrections de 2 erreurs (zappage d'un article et un if inutile)


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

Réponses

  • Merci pour cette contribution, comme quoi les pages statiques nous ouvrent pas mal de choses ;)
  • Oui , j'adore :)


    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

  • Magnifique ^^

    Merci à toi !

    TCho, Hamtaro.
  • Fantastique :p merci a toi gcyrillus-nomade.
  • décembre 2008 modifié
    Merci de votre enthousiasme :)
    , il y a 2 légere modif sur le script en debut de topic .


    Puis voici une version qui tente de faire un petit résumé de la page ou l'occurence est trouvée :
    <?php
    /**
     * Classe plxSearch Recherche dans les articles
     * @extends plxMotor
     * @author	Griboval Cyril
     **/
    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$/';
    #recherche sur le nombre maximale de fichiers geré par pluxml
    $this->aFiles = $this->plxGlob_arts->query($this->motif,'art',$ordre,0,999);
    }
    	
    function getsearch() {
    
    //$this->getArticles(); # Recuperation des articles
    
    		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);
    
    	/* on extrait les titre chapo et content pour y rechercher notre chaine */		
                $content = $this->art['title'];
                $content .= $this->art['chapo'];
                $content .= $this->art['content'];
                $content = addslashes($content);
                $content = strtolower($content);
                $trouve = substr_count($content,$word);
    			if($trouve!==0){ #on alimente notre tableau 
                $tableau[] = array(preg_replace('[^(000)|^(00)|^(0)]', '', $this->art['numero']),$this->art['title'],$this->art['url'],$content);
                $i++;
    			}
        $nbccount++;			
    			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--) {
    		#création du contexte du mot recherché (extraits page)
    		$resume='';
    		 preg_match_all('#(\w+)( \w+)( '.$word.' ?)(\w+)( \w+)( \w+)#', $tableau[$i]['3'], $out);
    		 preg_match_all('#\w+( '.$word.'?)#', $tableau[$i]['3'], $out2);
    		 preg_match_all('#('.$word.' ?)(\w+)#', $tableau[$i]['3'], $out3);
    		 preg_match_all('#('.$word.'?)#', $tableau[$i]['3'], $out4);		 
    		if ($out[0]) foreach( $out[0] as $value ) {  $resume .= '... '.$value . ' ';}
    		elseif ($out2[0]) foreach( $out2[0] as $value ) {  $resume .= '... '.$value . ' ';} 
    		elseif ($out3[0]) foreach( $out3[0] as $value ) {  $resume .= '... '.$value . ' ';} 
    		elseif ($out4[0]) foreach( $out4[0] as $value ) {  $resume .= '... '.$value . ' ';} 
    		$resume=stripslashes($resume);
    		#engraissage et grossisement de l'occurence
    		$resume=preg_replace('#'.$word.'#', '<b style="font-size:110%;padding:0 1px;">'.$word.'</b>', $resume);		
    		#creations de liens vers les articles contenant la chaine recherchée et l'extrait
            $search_results .= '<li><h3><a href="?article'.$tableau[$i]['0'].'/'.$tableau[$i]['2'].'">'.$tableau[$i]['1'].'</a></h3><p>'.$resume.'</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>';
    		}
    		
    		/* on affiche le formulaire */
             $search_results .= '
             <form method="post" action="">
              <fieldset><legend >Faire une nouvelle recherche en changeant les mots clés.</legend>
                <p><input name="search" size="15" maxlength=\"255\" value="'.$word.'" type="text" class="search" /> <b> >> </b> <input type="submit" value="rechercher !" /></p>
              </fieldset>
            </form> ';
    
            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();
    	}
    else 
    	{ #affichage du formulaire
    ?>
    <form method="post" action="">
              <fieldset><legend >Faire une recherche</legend>
                <p><input name="search" size="15" maxlength=\"255\" value="" type="text" class="search" /> <b> >> </b> <input type="submit" value="rechercher !" /></p>
              </fieldset>
            </form>
    		<?php 
    			} #fin
    		?>
    		</div>
    </div>
    
    la base est la même .

    GC


    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

  • HamtaroHamtaro Member
    décembre 2008 modifié
    Pas mal du tout :)

    Un plus grand aperçu autour du mot serait pas mal je pense. :)

    TCho, Hamtaro.
  • Oui, si un pro des regex passe par ici , je serai preneur de leçon , ma façon de faire est un peu "fastidieuse" , mais bon , tu verrai combien de mots autour du terme recherchée ?
    Ici , tout au plus , c'est 2 devant , 2 derriere ...

    GC


    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

  • formidable ce moteur de recherche.... en plus on peut le mettre dans la sidebar

    bien vu
  • décembre 2008 modifié
    bonsoir/bonjour

    Une derniere mise a jour sur ce topic :

    : modification des regex en une seule
    : résumé plus long et regulé a (en principe) 30 espaces , ce qui fait 31 mots ou ponctuations maxi .

    Le résumé est effectué en deux etapes .
    1)
    ajout des 50 caractéres maximum se trouvant a gauche et a droite de chaque occurence dans chaque article
    Pour modifier cela :
    dans la variable $masque
    Ligne : 61 la valeur est fixer a 50 maximum , vous pouvez la modifier . Garder la valeur minimale a zéro.

    2)
    regulation a 30 espaces (31 mots ou ponctuation).
    Pour la modifier
    La ligne 70 , Le chiffre 30 entre les accolades, détermine le nombre maximale d'espace autoriser dans le résumé .
    Changer la valeur de ce chiffre si vous voulez diminuer ou augmenter ce nombre de mots maximale possible a afficher .

    La 3eme version :
    <?php
    /**
     * Classe plxSearch Recherche dans les articles
     * @extends plxMotor
     * @author	Griboval Cyril
     **/
    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$/';
    #recherche sur le nombre maximale de fichiers geré par pluxml
    $this->aFiles = $this->plxGlob_arts->query($this->motif,'art',$ordre,0,999);
    }
    	
    function getsearch() {
    
    //$this->getArticles(); # Recuperation des articles
    
    		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);
    
    	/* 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);
    			if($trouve!==0){ #on alimente notre tableau 
                $tableau[] = array(preg_replace('[^(000)|^(00)|^(0)]', '', $this->art['numero']),$this->art['title'],$this->art['url'],$content);
                $i++;
    			}
        $nbccount++;			
    			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--) {
    		#création du contexte du mot recherché (extraits page) 
    		#recherche de 0 à 50 caractéres avant et aprés le mot recherché
    		$masque ='[(\w+|&-_.;:!\'\"\#éèçàù\s  )?]{0,50}';
    		$resume=' ... '.$tableau[$i]['3'];
    		preg_match_all('#'.$masque.'('.$word.'? )'.$masque.'#', $tableau[$i]['3'], $out);
    		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
    		if (preg_match('#(?:\w+\W+){30}\w+#s' , $resume , $regule)) {$resume =' ... '.$regule[0];}	
    		
        	#engraissage et grossisement de l'occurence
    		$resume=preg_replace('#'.$word.'#', '<b style="font-size:110%;padding:0 1px;">'.$word.'</b>', $resume);
    		
    		#creations de liens vers les articles contenant la chaine recherchée et l'extrait
            $search_results .= '<li><h3><a href="?article'.$tableau[$i]['0'].'/'.$tableau[$i]['2'].'">'.$tableau[$i]['1'].'</a></h3><p>'.$resume.'</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>
    
    Comme Indiqué par Sapin Tremblant , vous pouvez inserer le formulaire dans votre template .
    Pour cela il vous faut au préalable créer cette page statique et recuperer son lien .
    Le formulaire de base est :
    <div id="recherche">
    <h2>Recherche</h2>
    <form method="post" action=" ICI LE LIEN VERS VOTRE PAGE STATIQUE DE RECHERCHE" class="formSearch">
    <p>
    <input type="text"  name="search" />
    <input type="submit" value="OK" />
    </p>
    </form>
    
    Vous pouvez ciblé ce formulaire coté CSS avec #recherche pour la boite , ou .formSearch juste pour le formulaire .

    Pour créer cette page statique , il est préferable de copier coller le code dans l'administration , cela vous assure un encodage compatible avec votre version et configuration de pluxml .
    (pensez y si vous éditer en local , migrer ou changer de config d'encodage)
    .

    Les résultat de recherche sont stockés dans un tableau (array) , Il est donc possible , si vous en avez l'envie de vous bricoler une pagination ... attention le formulaire fonctionne en method POST uniquement , il n'est pas possible de passer votre requete par l'url . l'url sert déja a appelé lvotre page statique de recherche .

    GC


    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

  • Très bien cette nouvelle version au niveau des mots.

    Justement , je me demandais comment faire pour intégrer dans la sidebar. Merci à tous les deux d'en avoir parlé !
  • bonjour

    @Hamtaro , je te viens de mettre a jour la derniere version de ce moteur de recherche (http://forum.pluxml.org/viewtopic.php?pid=8703#p8703) , je te conseil (a toi et aux autres) d'en faire autant aux endroits ou tu en fait usage .

    1) une erreur : un strip_tag() placée trop tardivement dans le code remontée a sa place logique .

    2) une variable 'vidée' au lieu d'etre remise a jour .

    Me semble que cette version est finalisée .

    GC


    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

  • Heu...

    Tu pourrais citer les lignes ?
    Parce que j'ai tout réarrangé à ma sauce... :)
  • heu ...
    ajout strip_tag()pour 'chapo' et 'content' , lignes 39 et 40 ;
    ligne 60 , mise ajour de la variable : $resume ;
    ligne 63 , elimination du strip_tags() ;

    GC ;


    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

  • Merci beaucoup, modif effectuées ;)
  • Mon serveur à pas l'air d'apprécier quand je fais une recherche. :(

    Internal Server Error

    The server encountered an internal error or misconfiguration and was unable to complete your request.

    Please contact the server administrator, postmaster@www.customtaro.fr and inform them of the time the error occurred, and anything you might have done that may have caused the error.

    More information about this error may be available in the server error log.


    Voici ma page statique :
    <?php
    /**
     * Classe plxSearch Recherche avec resumé dans les articles
     * @Pages statiques Pluxml beta 4
     * @extends plxMotor
     * @author    Griboval Cyril
     * @Beta 
     **/
    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$/';
    #recherche sur le nombre maximale de fichiers geré par pluxml
    $this->aFiles = $this->plxGlob_arts->query($this->motif,'art',$ordre,0,999);
    }
        
    function getsearch() {
    
    $this->getArticles(); # Recuperation des articles
    
            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);
    
        /* 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);
                if($trouve!==0){ #on alimente notre tableau 
                $tableau[] = array(preg_replace('[^(000)|^(00)|^(0)]', '', $this->art['numero']),$this->art['title'],$this->art['url'],$content);
                $i++;
                }
        $nbccount++;            
                endwhile;
            }
            /* on initialise notre variable de resultat de recherche en ouvrant une liste ordonnée */
            $search_results = '<div class="post">';
            
            #compte les enregistrement puis boucle dessus 
            $n=count($tableau);
            for($i=$n-1;$i >= 0;$i--) {
            #création du contexte du mot recherché (extraits page) 
            #recherche de 0 à 50 caractéres avant et aprés le mot recherché
            $masque ='[\w+|&-_.;:!\'\"\#éèçàù\s  ?]{0,50}';
            $resume=' ... '.$tableau[$i]['3'];
            preg_match_all('#'.$masque.'('.$word.'? )'.$masque.'#', $tableau[$i]['3'], $out);
            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
            if (preg_match('#(?:\w+\W+){30}\w+#s' , $resume , $regule)) {$resume =  $regule[0];}    
            
            #engraissage et grossisement de l'occurence
            $resume=preg_replace('#'.$word.'#', '<b style="font-size:110%;padding:0 1px;">'.$word.'</b>', $resume);
            
            #creations de liens vers les articles contenant la chaine recherchée et l'extrait
            $search_results .= '<h2 style="margin-bottom:0;"><a href="?article'.$tableau[$i]['0'].'/'.$tableau[$i]['2'].'">'.$tableau[$i]['1'].'</a></h2><div class="clearer"></div><p>'.$resume.'</p>';
            }
            /* si notre variable de resultat de recherche n'a pas changé on la remplace par un message */
             if($search_results=='<div class="post">')  {$search_results = '<p style="margin:0 20px 1.8em;"> ... fin de la recherche</p><p style="margin:0 20px 1.8em;"><b>La recherche a été infructueuse</b>, il n\'y a rien qui corresponde à vos critères.
             <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 .= '</div><p style="margin:0 20px 1.8em;"> ... fin de la recherche.</p>';
            }
            
            return $search_results;
        }
    
    }
    
    ?>
        
        
    <?php
    if(!empty($_POST['search'])) {
            echo '<p style="margin:0 20px 1.8em;">Votre recherche pour le(s) mot(s) clé(s) "<span class="hilite">'.$_POST['search'].'</span>" a donné :</p>';
            $search = new plxSearch((PLX_CONF));
            $search->prechauffage();
            $search->demarrage();
            echo $search->getsearch();
        }
            /* on affiche le formulaire */
             ?>
             
             <form method="post" action="">
              <legend ><?php
              if (isset($_POST['search']))  echo'  <p style="margin:0 20px 1.8em;">Faire une nouvelle recherche en changeant le(s) mot(s) clé(s).'.'</p>';
              else echo '<p style="margin:0 20px 1.8em;">Faire une recherche'.'</p>';
              ?></legend>
                <p style="margin:0 20px 1.8em;"><input name="search" size="15" maxlength=\"255\" value="<?php
              if (isset($_POST['search']))  echo $_POST['search']; 
              ?>" type="text" class="search" /> </p> <p style="margin:0 20px 1.8em;"><input name="search" type="image" src="./themes/wicketpixie/images/search-button.png" alt="Chercher" id="search-submit" /></p>
            </form>
    
    Trop d'articles à regarder ? Une erreur quelque part ?
  • décembre 2008 modifié
    oups , j'allais partir :)

    Ton code ne semble pas avoir d'erreur , les corrections sont bonnes.
    en copiant collant celui-ci au travers de l'admin et en local , pas d'erreur non plus.

    As tu mis a jour ton code au travers de l'admin ?
    Si tu l'as copié coller a partir de ton éditeur , est-il complet ? ...

    Eventuellement efface tout , recharge ta page de recherche coté visiteur , normalement tu devrais avoir une page blanche ...

    Remet le code dans ta page statique et relance ta recherche voir si ça bug toujours .

    Combien d'articles ton blog contient t-il ?
    Tes articles sont-il 'gros' ?

    Eventuellement , ligne 16 , a la valeur '999' (nombre d'article maximum théorique de pluxml ) , applique une valeur de la moitié de ton nombre d'article.
    Test a nouveau ,
    Si il y a encore une erreur serveur , , met cette valeur a 1 .

    Si il y a encore une erreur serveur je doute alors que cela vienne du script .... du moins je n'ai aucune idée de la raison

    Que dit ton log ?

    GC

    <edit> je reste un petit moment , puis je repasse demain soir après ma journée de boulot
    ++</>


    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

  • le blog contient 586 articles...

    Pour ce qui est du log du serveur, j'ai cherché et je ne sais pas ou le récupérer. Je suis chez ovh.

    J'ai descendu à 200 articles et effectivement, ça remarche...
    Un souci au niveau du nombre d'articles ?

    200 => OK
    300 => OK
    400 => PB
    350 => OK
    370 => OK
    380 => PB

    Une idée ?
  • Oui ,

    probablement limité la taille de tableaux en amonts pour evité que ceux-ci ne deviennent trop importants .

    questions :
    Cette erreur serveur apparait-elle systématiquement ?
    Si non :
    sur quelle requete et quelle site ?
    Peut - tu mettre temporairement ajouter 2 pages statiques , celle qui bug et celle de base , histoire de voir , combien de résultats et quel pages sont retournées selon la requete ?

    <hors sujet>
    Ceci constaté , on perçoit les limites de la gestions de fichiers XML dans le contexte 'pluxml' .

    Sur de gros base de données xml , xmlreader s'impose et me semble seul capable de rivalisé avec une bdd et d'assurer une pérenité . (juste mon avis d'amateur).
    </hs>

    GC


    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

  • Erreur systématique aussi avec l'ancien code.

    Par contre :

    Serveur Free : OK
    Serveur OVH : erreur

    Apparemment c'est un pb lié à OVH ?

    Pour ce qui est du hs, si tu le dis ! (j'ai rien compris;..)
  • bonsoir,

    Pour tes problémes lié a ovh :

    ce script : http://forum.pluxml.org/viewtopic.php?pid=8784#p8784 peut te convenir (il passe sur un serveur OVH)

    Pour gardé celui que tu as installé :

    recherche cette ligne : $this->getArticles(); # Recuperation des articles
    et efface la , elle n'est pas necessaire et a l'inconvénient de stocker en mémoire l'ensemble des contenus des articles . Le script n'en a pas besoin pour effectuer sa recherche.

    GC


    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

  • J'ai testé avec succès la 3ème version sur mon pluxml 4 beta. Je voulais juste dire merci :)
Connectez-vous ou Inscrivez-vous pour répondre.