Moteur de recherche dans une page statique

StéphaneStéphane Member, Former PluXml Project Manager
Je viens de rajouter sur le wiki, le code nécessaire pour ajouter un moteur de recherche à partir d'une page statique

http://wiki.pluxml.org/?page=Ajouter%20un%20moteur%20de%20recherche%20dans%20une%20page%20statique

Stéphane

Consultant PluXml

Ancien responsable et développeur de PluXml (2010 à 2018)

Réponses

  • GzygGzyg Member
    Je suppose que c'est censé affiché un formulaire mais j'ai une page vide... ?


    à plus,

    Gzyg
  • StéphaneStéphane Member, Former PluXml Project Manager
    Arf c'est le wiki qui pose problème. quand on fait un copier coller du code et qu'on enregistre, il y a des caractères qui dégagent.
    J'essaye de corriger ça

    Consultant PluXml

    Ancien responsable et développeur de PluXml (2010 à 2018)

  • StéphaneStéphane Member, Former PluXml Project Manager
    Voilà ça devrait etre bon

    Consultant PluXml

    Ancien responsable et développeur de PluXml (2010 à 2018)

  • GzygGzyg Member
    C'est bon. :)


    à plus,

    Gzyg
  • flipflipflipflip Member
    août 2009 modifié
    C'est nikel et rapide en plus.
    J'ai fais le test sur mon blog avec 77 articles et le mot clé photo j'ai eu le résultat en même pas 1 seconde et mon serveur a à peine réagis.

    Manque plus qu'a intégrer le formulaire directement dans la sidebar :)

    Editer le fichier sidebar.php et ajouté le code
    <div>
                    <h2>Rechercher</h2>
                    <form method="post" id="searchform" action="<?php echo PLX_ROOT ?>?static5/rechercher">
                            <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" />
                    </form>
            </div>
    
    Il faut personnaliser l'adresse du formulaire :
    <form method="post" id="searchform" action="<?php echo PLX_ROOT ?>?static5/rechercher">
    
    Remplacer : static5/rechercher par l'adresse de votre page static qui contient le formulaire de recherche.

    J'ai un string de l'array

  • ah merci,

    Qu'elle serait l'approche pour paginer les resultats de recherche sur de gros blog ?

    Sinon , les problémes qui avait etait rencontrés etait sur un blog de plusieurs centaines d'articles (+580)bien fourni , et sur un hebergement ovh . http://forum.pluxml.org/viewtopic.php?pid=8740#p8740

    Sur des blog pluxml d'une centaine d'article il y a peu de risque de voir le serveur renvoyé une page d'erreur , enfin sur free et aux heures de pointes , tout peut (ne pas) arriver :)

    ++


    Cordialement,
    gcyrillus , simple membre du forum et utilisateur de pluxml

    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

  • StéphaneStéphane Member, Former PluXml Project Manager
    Effectivement on pourrait alléger les traitement avec une pagination histoire de ne pas traiter et afficher plus de 500 articles. Une 50taine de résultats par page serait surement un bon compris.
    Dès que je peux je fais cette amélioration.

    Merci gcyrillus pour l'idée et la suggestion

    Stéphane

    Consultant PluXml

    Ancien responsable et développeur de PluXml (2010 à 2018)

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

    Voilà une nouvelle solution qui apporte en plus un affichage avec une pagination de 25 articles par page
    <?php
    if(!defined('PLX_ROOT')) exit;
    
    global $plxShow;
    
    if (!empty($_POST['searchfield']) OR !empty($_GET['search'])) {
    
    	$bypage = 25;
    	$start = empty($_GET['start']) ? 1 : (intval($_GET['start']));
    	
    	$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', $start-1, $bypage+1);
    
    	if(is_array($aFiles)) { # On a des fichiers
        
    		ob_start();
    		
    		$counter = 0;
    		$searchword = strtolower(!empty($_GET['search']) ? urldecode($_GET['search']) : $_POST['searchfield']);
    
    		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) {
    				$art_num = intval($art['numero']);
    				$art_url = htmlspecialchars($art['url'],ENT_QUOTES,PLX_CHARSET);
    				$art_title = htmlspecialchars($art['title'],ENT_QUOTES,PLX_CHARSET);
    				$art_date = substr($art['date'], 8, 2).'/'.substr($art['date'], 5, 2).'/'.substr($art['date'], 0, 4);
    				
    				if ($counter < $bypage)
    					echo '<li>'.$art_date.': <a href="'.$plxShow->plxMotor->aConf['racine'].'?article'.$art_num.'/'.$art_url.'">'.$art_title.'</a></li>'; 
    				$counter++;
    			}
    		}
    		
    		$content = ob_get_clean(); 
    
    		if ($counter > 0) {
    			echo '<p>Résultat(s) de la recherche.<br /><ul class="search_results">'.$content.'</ul></p>';
    			if ($counter > ($bypage))
    				echo '<p><a href="'.PLX_ROOT.'?'.plxUtils::getGets().'&start='.($start+$bypage).'&search='.urlencode($searchword).'">Page suivante</a></p>';
    			if ($start >= $bypage)
    				echo '<p><a href="'.PLX_ROOT.'?'.plxUtils::getGets().'&start='.($start-$bypage).'&search='.urlencode($searchword).'">Page précedente</a></p>';				
    		}	
    		else
    			echo '<p>Aucun résultat pour <strong>'.$searchword.'</strong></p>';
    		echo '<p>Faire une nouvelle recherche</p>';			
    	}
    }
    ?>
    <form method="post" id="searchform" action="<?php echo PLX_ROOT.'?'.plxUtils::getGets() ?>">
    <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" />
    	</fieldset>
    </p>
    </form>
    
    Il suffit de faire un copier/coller du code dans une page statique pour tester le script.

    J'en appelle aux personnes qui ont des blogs volumineux pour savoir si les temps de traitements sont raisonnables et si tout fonctionne bien

    Merci d'avance

    Stéphane

    Consultant PluXml

    Ancien responsable et développeur de PluXml (2010 à 2018)

  • Bonjour,

    Je viens de tester le dernier script pour voir s'il résolvait le prb des accents mais toujours le même problème

    J'ai une version toute fraîche en 4.1.1 chez OVH et la recherche avec des accents ne donne rien

    Une idée ?

    Cordialement
    Fabrice
  • Stéphane a écrit:
    Bonjour

    Voilà une nouvelle solution qui apporte en plus un affichage avec une pagination de 25 articles par page
    <?php
    if(!defined('PLX_ROOT')) exit;
    
    global $plxShow;
    
    if (!empty($_POST['searchfield']) OR !empty($_GET['search'])) {
    
    	$bypage = 25;
    	$start = empty($_GET['start']) ? 1 : (intval($_GET['start']));
    	
    	$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', $start-1, $bypage+1);
    
    	if(is_array($aFiles)) { # On a des fichiers
        
    		ob_start();
    		
    		$counter = 0;
    		$searchword = strtolower(!empty($_GET['search']) ? urldecode($_GET['search']) : $_POST['searchfield']);
    
    		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) {
    				$art_num = intval($art['numero']);
    				$art_url = htmlspecialchars($art['url'],ENT_QUOTES,PLX_CHARSET);
    				$art_title = htmlspecialchars($art['title'],ENT_QUOTES,PLX_CHARSET);
    				$art_date = substr($art['date'], 8, 2).'/'.substr($art['date'], 5, 2).'/'.substr($art['date'], 0, 4);
    				
    				if ($counter < $bypage)
    					echo '<li>'.$art_date.': <a href="'.$plxShow->plxMotor->aConf['racine'].'?article'.$art_num.'/'.$art_url.'">'.$art_title.'</a></li>'; 
    				$counter++;
    			}
    		}
    		
    		$content = ob_get_clean(); 
    
    		if ($counter > 0) {
    			echo '<p>Résultat(s) de la recherche.<br /><ul class="search_results">'.$content.'</ul></p>';
    			if ($counter > ($bypage))
    				echo '<p><a href="'.PLX_ROOT.'?'.plxUtils::getGets().'&start='.($start+$bypage).'&search='.urlencode($searchword).'">Page suivante</a></p>';
    			if ($start >= $bypage)
    				echo '<p><a href="'.PLX_ROOT.'?'.plxUtils::getGets().'&start='.($start-$bypage).'&search='.urlencode($searchword).'">Page précedente</a></p>';				
    		}	
    		else
    			echo '<p>Aucun résultat pour <strong>'.$searchword.'</strong></p>';
    		echo '<p>Faire une nouvelle recherche</p>';			
    	}
    }
    ?>
    <form method="post" id="searchform" action="<?php echo PLX_ROOT.'?'.plxUtils::getGets() ?>">
    <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" />
    	</fieldset>
    </p>
    </form>
    
    Il suffit de faire un copier/coller du code dans une page statique pour tester le script.

    J'en appelle aux personnes qui ont des blogs volumineux pour savoir si les temps de traitements sont raisonnables et si tout fonctionne bien

    Merci d'avance

    Stéphane
    J'ai bien reçu ton appel. ;)

    J'ai installé ton nouveau code sur cette page : http://www.customtaro.fr/blog/?static2/rechercher

    Et comment dire... Ca déconne...
    Temps de chargement hyper court mais la critère de recherche, je vois pas du tout comment elle marche... :/
    Vieux articles, pas du tout le mot clé dans le titre, bref c'est bizarre...
  • StéphaneStéphane Member, Former PluXml Project Manager
    Hamtaro a écrit:
    J'ai bien reçu ton appel. ;)

    J'ai installé ton nouveau code sur cette page : http://www.customtaro.fr/blog/?static2/rechercher

    Et comment dire... Ca déconne...
    Temps de chargement hyper court mais la critère de recherche, je vois pas du tout comment elle marche... :/
    Vieux articles, pas du tout le mot clé dans le titre, bref c'est bizarre...
    Je viens de faire quelques tests sur ton site. ça n'a pas l'air de trop déconner.
    La recherche se fait dans le titre, le chapo et le contenu.

    Pour quelques critères de recherche, j'ai eu les bons résultats.

    Peux-tu me donner des exemples qui ne marcheraient pas stp

    Consultant PluXml

    Ancien responsable et développeur de PluXml (2010 à 2018)

  • StéphaneStéphane Member, Former PluXml Project Manager
    vidub2001 a écrit:
    Bonjour,

    Je viens de tester le dernier script pour voir s'il résolvait le prb des accents mais toujours le même problème

    J'ai une version toute fraîche en 4.1.1 chez OVH et la recherche avec des accents ne donne rien

    Une idée ?

    Cordialement
    Fabrice
    Bonjour Fabrice

    Alors les problèmes des accents...
    Je vais regarder ça car les accents sont peut etre convertis dans leur équivalent html quelque part.
    é donne é donc du coup il n'y pas de résultat dans la recherche

    Consultant PluXml

    Ancien responsable et développeur de PluXml (2010 à 2018)

  • Stéphane a écrit:
    Hamtaro a écrit:
    J'ai bien reçu ton appel. ;)

    J'ai installé ton nouveau code sur cette page : http://www.customtaro.fr/blog/?static2/rechercher

    Et comment dire... Ca déconne...
    Temps de chargement hyper court mais la critère de recherche, je vois pas du tout comment elle marche... :/
    Vieux articles, pas du tout le mot clé dans le titre, bref c'est bizarre...
    Je viens de faire quelques tests sur ton site. ça n'a pas l'air de trop déconner.
    La recherche se fait dans le titre, le chapo et le contenu.

    Pour quelques critères de recherche, j'ai eu les bons résultats.

    Peux-tu me donner des exemples qui ne marcheraient pas stp
    En tapant Hamtaro, je n'ai pas mon dernier article dedans. ;)
    En tapant Jamendo, je n'ai rien alors que j'ai plusieurs articles intitulé Découverte Jamendo.
  • StéphaneStéphane Member, Former PluXml Project Manager
    Ok Hamtaro

    J'ai compris ce qui ne va pas dans la façon de faire avec la pagination

    Bon ben y a plus qu'à trouver une solution
    Je vais m'y atteler

    Consultant PluXml

    Ancien responsable et développeur de PluXml (2010 à 2018)

  • septembre 2009 modifié
    Stéphane a écrit:
    vidub2001 a écrit:
    Bonjour,

    Je viens de tester le dernier script pour voir s'il résolvait le prb des accents mais toujours le même problème

    J'ai une version toute fraîche en 4.1.1 chez OVH et la recherche avec des accents ne donne rien

    Une idée ?

    Cordialement
    Fabrice
    Bonjour Fabrice

    Alors les problèmes des accents...
    Je vais regarder ça car les accents sont peut etre convertis dans leur équivalent html quelque part.
    é donne é donc du coup il n'y pas de résultat dans la recherche
    Bonjour,

    Pour les accents , ce n'est pas trés clair . ...

    http://fr2.php.net/manual/fr/function.htmlentities.php
    (voir aussi http://fr2.php.net/manual/fr/function.htmlspecialchars.php )

    sur : gcyrillus.com/zaicha , pour faire passer les accents :
    je fais :
    $chaine_a_rechercher =htmlentities($chaine_a_rechercher,ENT_NOQUOTES,PLX_CHARSET);
    
    sans me préoccupper de l'encodage des champs des fichiers xml des articles .

    Les articles sont edité par fckeditor . et cela fonctionne autant en ligne qu'en local , sur une admin sans editeur , cela ne semble pas toujours fonctionné ...

    GC

    <edit> ... en principe appliqué a $_P0ST , htmentities() convient au passage d'accents dans la recherche .
    $searchword = strtolower(!empty($_GET['search']) ? urldecode($_GET['search']) : htmlentities($_POST['searchfield'],ENT_NOQUOTES,PLX_CHARSET));
    
    </>


    Cordialement,
    gcyrillus , simple membre du forum et utilisateur de pluxml

    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

  • Hamtaro a écrit:
    En tapant Hamtaro, je n'ai pas mon dernier article dedans. ;)
    rebonjour,

    a modifier :
    {
            if ($counter > 0) {
                echo '<p>Résultat(s) de la recherche.<br /><ul class="search_results">'.$content.'</ul></p>';
                if ($counter > ($bypage))
                    echo '<p><a href="'.PLX_ROOT.'?'.plxUtils::getGets().'&start='.($start+$bypage).'&search='.urlencode($searchword).'">Page suivante</a></p>';
                if ($start >= $bypage)
                    echo '<p><a href="'.PLX_ROOT.'?'.plxUtils::getGets().'&start='.($start-$bypage).'&search='.urlencode($searchword).'">Page précedente</a></p>';                
            }
    
    par
    {
                echo '<p>Résultat(s) de la recherche.<br /><ul class="search_results">'.$content.'</ul></p>';
                if ($counter > ($bypage-1))
                    echo '<p><a href="'.PLX_ROOT.'?'.plxUtils::getGets().'&start='.($start+$bypage).'&search='.urlencode($searchword).'">Page suivante</a></p>';
                if ($start >= $bypage+1)
                    echo '<p><a href="'.PLX_ROOT.'?'.plxUtils::getGets().'&start='.($start-$bypage).'&search='.urlencode($searchword).'">Page précedente</a></p>';                
            }
    
    GC


    Cordialement,
    gcyrillus , simple membre du forum et utilisateur de pluxml

    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

  • vidub2001vidub2001 Member
    septembre 2009 modifié
    Bonjour gcyrillus,

    Merci pour l'info, maintenant, c'est OK ! :-)

    Cordialement
    Fabrice
  • Bonjour à tous,

    J'utilise, en local, Pluxml en version 4.3.1.
    En reprenant les informations données par Stéphane au niveau du Wiki, mais aussi au niveau de ce fil, j'ai un problème d'accents lors de la restitution.
    En cherchant des informations par ce mot clé "Coopérative", le moteur de recherche interne me donne le résultat suivant :
    "Aucun résultat pour cooprative"...

    Un autre test avec "Chèques" me donne ceci :

    Résultats de la recherche pour chques :

    1. 27/01/2010: Chèques vacances


    Merci par avance pour votre aide....

    Frank.
  • StéphaneStéphane Member, Former PluXml Project Manager
    Bonjour Franck

    Remplace la partie du code correspondante de la page statique par ceci
    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>'.plxUtils::strCheck($searchword)0'</strong></p>';
    

    Consultant PluXml

    Ancien responsable et développeur de PluXml (2010 à 2018)

  • Bonjour Stéphane,

    En appliquant la modification dans ma page statique, le moteur de recherche ne fonctionne plus du tout....

    A+
  • StéphaneStéphane Member, Former PluXml Project Manager
    Heu oui j'ai fait un coquille en mettant le code
    Peux-tu essaye celui ci stp
    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>'.plxUtils::strCheck($searchword).
    '</strong></p>';
    

    Consultant PluXml

    Ancien responsable et développeur de PluXml (2010 à 2018)

  • Merci Stéphane pour ce retour...

    Le moteur de recherche fonctionne mais dans le cas où le mot clé est inexistant dans le site internet, l'information s'affiche ainsi :

    "Aucun résultat pour " et le mot clé n'est pas affiché !

    En parallèle à l'envoi de votre script, j'ai testé l'utilisation de Pluxml dans un environnement Mac (càd MacOSX 10.4 + MAMP+Firefox 3.5) et là je n'ai aucun problème d'accent.

    C'est pourquoi en retournant dans mon environnement professionnel, j'ai testé la manip suivante, càd la modification du fichier config.php comme cela :

    define('PLX_CHARSET', 'ISO-8859-1');
    au lieu de
    define('PLX_CHARSET', 'UTF-8');

    et le souci d'affichage des accents est réglé !!

    Pour autant, je n'arrive pas à comprendre pourquoi le moteur de recherche renvoie dans un cas une liste des articles sans problème d'accentuation et dans le cas contraire rencontre des difficultés pour afficher la phrase "Aucun résultat pour +mot clé recherché".

    Merci par avance pour votre éclaircissement ....

    Frank.
  • Ludo_17Ludo_17 Member
    février 2010 modifié
    Bonjour,

    se méfier de strtolower (qui ne se base pas sur le charset de la page), en utf-8 il vaut mieux utiliser mb_strtolower.
    mb_strtolower($chaine,'UTF-8')
    
    J'ai eu le soucis également avec le mot 'été', par exemple, qui s'affichait correctement avant traitement par strtolower et se retrouvait avec des '' à la sortie.

    Cordialement,
    Ludo
  • StéphaneStéphane Member, Former PluXml Project Manager
    Toutes les fonctions mb_xxxx nécessitent l'extension mb_string d'installée sur le serveur.
    C'est pour cela que nous n'avons pas retenu cette solution

    Consultant PluXml

    Ancien responsable et développeur de PluXml (2010 à 2018)

  • Stéphane a écrit:
    Toutes les fonctions mb_xxxx nécessitent l'extension mb_string d'installée sur le serveur.
    C'est pour cela que nous n'avons pas retenu cette solution
    D'accord ;). Dommage que cette extension ne soit pas installée par défaut car c'est efficace (pour une fois, j'ai de la chance avec Free)
    Cordialement,
    Ludo
Connectez-vous ou Inscrivez-vous pour répondre.