Recherche dans les articles

Salut, alors je suis nouveau ici. J'ai découvert pluxml il y a quelques jours et j'ai trouvé ça bien sympa. Le fait qu'il soit léger, qu'il ne demande pas de base de donnée, et surtout le fait que son installation et la personnalistion se fait très rapidement, bref tout bonnement génial :) .
J'ai installé la version blog de pluxml, mais il s'avère qu'il n'y a pas de fonction recherche, embettant donc. Alors j'ai mis un peu la main à la pâte histoire de rajouter cette fonction. Pour l'instant mon truc marche plutôt bien, évidemment je n'ai pas testé sur des centaines d'articles, c'est là que peut être la chose pourra être lente :/ . Enfin on vera avec le temps, pour l'instant ça répond à mes attentes.
Bien sûr je partage tout ça, si ça peu aider des gens. Voici une petit zip avec les fichiers qui ont été modifiés : juste là.
Les fichiers modifiés et ajoutés sont les suivants :
./index.php
./core/lib/class.search.php
./core/lib/prepend.php
./core/lib/class.pluxml.php
./core/lib/functions.php
./core/templates/defaut/style.css
./core/templates/defaut/template.php

Et je crois que c'est à peu prés tout. Pour voir comment ça marche vous pouvez regarder sur mon blog.
Voilà j'espère que ça pourra rendre service à d'autres que moi :)

Réponses

  • C'est une très bonne nouvelle d'avoir un greffon de recherche sous Pluxml, c'est vraiment LE truc qui peut être utile ;-) Ça a l'air de bien fonctionner, sauf que quand on tape "Nintendo" comme terme de recherche sur ton blog il ne trouve rien (orthographe vérifiée bien sûr), alors que d'autres termes passent tout à fait correctement... C'est vraiment bizarre, j'ai dû tomber sur le seul mot qui ne marchair pas (aucune idée du pourquoi celui-là ne marche pas cependant) :(
  • Ah oui je vois le bug, c'est un problème avec les mots recherchés, il manque un addslashes et un strtolower, voilà j'ai fait le correctif et ça fonctionne plutôt bien maintenant :)
    C'est au niveau du fichier class.pluxml.php, et c'est par là pour télécharger le fichier corrigé.
    Et puis merci d'avoir rapporté le bug :)
  • pmdpmd Member
    C'est valable pour quelle version de pluxml ?
  • C'est la dernière version de pluxml-blog il me semble.
  • MilkaJinkaMilkaJinka Member
    avril 2007 modifié
    Testé sur mon site (qui tourne sous flop15) en remplaçant uniquement les fichiers dont tu parles, et ça marche ! => http://konstelacioj.info/?001/Blog

    Voilà quelque chose que j'attendais depuis longtemps, comment as-tu fait ? :-)

    Juste une remarque : dans ton fichier template tu as mis le champ de recherche (<form>) dans un paragraphe (<p>), pourquoi cela ? D'autant plus que ce n'est pas valide du point de vue de l'HTML.
  • A vrai dire je ne suis pas un as du xhtml, j'ai jamais fait trop attention à ces normes, enfin je devrais sans doute. Donc voilà j'ai virré cette coquille, et c'est toujours téléchargeable au même endroit.
  • Euh ton archive est pas complète, il y a que le contenu du dossier core :D
  • Ah oui :D Hmm... Bref, l'archive est complète maintenant :)
  • fightsoulfightsoul Member
    avril 2007 modifié
    Je vient de noté un bug, on ne peut plus écrire de commentaire :/
    voici le message d'erreur :
    Warning: Cannot modify header information - headers already sent by (output started at /mnt/139/sdb/a/9/heroesfan/pluxml-user-lien-search-plugins/core/lib/class.search.php:22) in /mnt/139/sdb/a/9/heroesfan/pluxml-user-lien-search-plugins/index.php on line 59

    EDIT : benh en faite il y a le message d'erreur mais le commentaire e quand même écrit, bizarre !
  • gcyrillusgcyrillus Member
    avril 2007 modifié
    bonjour/bonsoir.

    j'ai tester aujourd'hui le moteur de recherche , et il me plait bien :)

    j'ai relevé une erreur de type notice . undefined offset 2 ...

    que je rend muette avec le @ :

    if(@$tableau[$i]->;value > 0) $search_results ...

    j'ai ajouté un imput de type submit dans le formulaire ex avec 2 boite de recherche:
    <div id="recherche">
                <h2>Section <b>recherche</b></h2>
                    <form method="post" action="index.php">
                        <fieldset><legend>Recherche sur le portail</legend>
                        <input name="search" type="text" size="15" maxlength="255" value="" /> <input type="submit" value=" ok" class="submit" />
                        </fieldset>
                    </form>
                    <form  method="get" action="<?php PUN_ROOT ?>/search.php">
                        <fieldset><legend>Recherche sur le forum</legend>
                        <input name="action" value="search" type="hidden"><input name="keywords" size="40" maxlength="100" type="text" value="" /> <input type="submit" value=" ok" class="submit" />
                        </fieldset>
                    </form>
    
            </div>
    
    j'ai aussi ajouté un message si pas de resultats et reaffichage d'un formulaire de recherche.
    La recherche s'effectue aussi sur le chapo et plus seulement sur le 'titre' et le 'content' des articles .
    function surchargées dans class.pluxml.php :
    function getSearch()    {
            foreach($this->aFiles as $i => $a) {
                $array[$i] = $this->parseArticle(PLX_DOC.$this->config['racine_xml'].$a);
                $this->result = new recordset($array);
            }
            
            $i = 0;
            $n = 0;
            
            $word = $_POST['search'];
            $word = addslashes($word);
            $word = strtolower($word);
    
            while($this->result->loop())
            {
                $titre = $this->result->f('title');
                $content = $this->result->f('chapo');
                $content .= $this->result->f('content');
                $content = addslashes($content);
                $content = strtolower($content);
                
                
                $truc = substr_count($content,$word);
    
        
                $tableau[] = new search($this->result->f('file_num'),$truc,$this->result->f('title'),$this->result->f('art_name'));
                $n++;
            }
            $search_results = "<ol>";
            sort($tableau);
        
    
            for($i=$n;$i >= 0;$i--) {
    
    
                if(@$tableau[$i]->value > 0) $search_results = sprintf("%s\n%s",$search_results,'<li><a href="?'.$tableau[$i]->id.'-'.$tableau[$i]->art_name.'">'.$tableau[$i]->title.'</a></li>');
    
            }
    
             if(@$search_results=='<ol>')  {$search_results = "<ul><li> ... fin de la recherche</li></ul><p><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>"; }
             else {  $search_results .= "</ol><p style="display:list-item;"> ... fin de la recherche</p>";
             }
             $search_results .= "
             <form method=\"post\" action=\"index.php\">
              <fieldset><legend>Faire une nouvelle recherche en changeant les mots clés.</legend>
                <input name=\"search\" size=\"15\" maxlength=\"255\" value=\"".$word."\" type=\"text\" class=\"search\" /> <b> >> </b> <input type=\"submit\" value=\"rechercher !\" />
              </fieldset>
            </form>";
    
            return $search_results;
        }
    
    Je n'ai pas remarqué le bug dont parle fightsoul , cela depend peut-etre des configs serveurs ?


    GC

    <ERRATUM oui j'ai rencontré ce bug ! pas en local mais en ligne ! </>

    pour m'en defaire :
    j'inclus le fichier class.search.php que si je suis en mode search par exemple a partir du template :
    <?php # En mode 'search' # ?>
    <?php if($pluxml->mode == 'search'): ?>
    <?php     include(PLX_DOC.'lib/class.search.php'); ?>
    
    ou dans le fichier index.php a
    if(!empty($_POST['search'])) {
    include(PLX_DOC.'lib/class.search.php');
        $pluxml->mode = 'search';
    }
    
    et non plus a partir de prepend.php ou dans "l'inclusion des librairies necessaires" a partir du fichier index.php .

    GC
  • obimoobimo Member
    Salut,
    Au lieu de mettre un "" devant "$tableau[$i]->value > 0" utilises plutôt "if (isset($tableau[$i]) AND $tableau[$i]->value > 0)". Il vaut mieux prévoir les problèmes que de les cacher :)
  • birslipbirslip Member
    avril 2007 modifié
    Merci gcyrillus, je n'ai jamais réussi à obtenir d'erreur, donc pour débuguer c'était un peu compliqué. En tout cas merci beaucoup! Obimo, oui tu as raison, il vaut mieu prévenir que cacher... :D Voilà c'est bien mieu comme ça donc.
  • J'ai la même erreur que fightsoul, y compris en ayant modifié les fichiers comme gcyrillus l'indique... je crois que je vais devoir désactiver la recherche :(
  • obimoobimo Member
    avril 2007 modifié
    Dites les jeunes pendant que je savoure mon Toblerone je pense à un solution à votre problème (ah làlà vous me faîtes réfléchir pendant mes vacances c'est un sacrilège :lol:)

    Pour regler le problème de "Cannot modify header information - headers already sent by" pourquoi ne pas utiliser la tamporisation de sortie ?
    Il suffit juste de :
    * rajouter "ob_start();" après "<?php" dans "index.php".
    * rajouter "ob_end_flush();" avant "?>" dans "index.php".
  • elodyelody Member
    birslip ca serait sympa de faire un nouveau zip AVEC les modifs de gcyrillus pour supprimer le bug du commentaire :)
    Je suis en train de remplir la rubrique PLUGINS de Pluxthemes et j'aimerais bien l'inclure mais si possible il faudrait accorder nos violons sinon il y aura 2 versions de ce Pluxml avec moteur de recherche et ca peut preter a confusion ... Tiens moi au courant a+
  • elodyelody Member
    En voulant rajouter cette modif dans la version COMPLETE de pluxml (pluxml-editeur-lien-user-search-plugins), j'ai encore perdu 1h à chercher à comprendre prkoi j'avais une page blanche à la palce du site ....

    J'ai trouvé l'erreur de syntaxe et j'en profite pour donner le BON code à savoir les / qui manquaient devant les " autour de display: list-item; dans class.pluxml.php :
    function getSearch()    {
            foreach($this->aFiles as $i => $a) {
                $array[$i] = $this->parseArticle(PLX_DOC.$this->config['racine_xml'].$a);
                $this->result = new recordset($array);
            }
            
            $i = 0;
            $n = 0;
            
            $word = $_POST['search'];
            $word = addslashes($word);
            $word = strtolower($word);
    
            while($this->result->loop())
            {
                $titre = $this->result->f('title');
                $content = $this->result->f('chapo');
                $content .= $this->result->f('content');
                $content = addslashes($content);
                $content = strtolower($content);
                
                
                $truc = substr_count($content,$word);
    
        
                $tableau[] = new search($this->result->f('file_num'),$truc,$this->result->f('title'),$this->result->f('art_name'));
                $n++;
            }
            $search_results = "<ol>";
            sort($tableau);
        
    
            for($i=$n;$i >= 0;$i--) {
    
    
                if(@$tableau[$i]->value > 0) $search_results = sprintf("%s\n%s",$search_results,'<li><a href="?'.$tableau[$i]->id.'-'.$tableau[$i]->art_name.'">'.$tableau[$i]->title.'</a></li>');
    
            }
    
             if(@$search_results=='<ol>')  {$search_results = "<ul><li> ... fin de la recherche</li></ul><p><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>"; }
             else {  $search_results .= "</ol><p style="display:list-item;"> ... fin de la recherche</p>";
             }
             $search_results .= "
             <form method=\"post\" action=\"index.php\">
              <fieldset><legend>Faire une nouvelle recherche en changeant les mots clés.</legend>
                <input name=\"search\" size=\"15\" maxlength=\"255\" value=\"".$word."\" type=\"text\" class=\"search\" /> <b> >> </b> <input type=\"submit\" value=\"rechercher !\" />
              </fieldset>
            </form>";
    
            return $search_results;
        }
    
    Merci qd meme gcyrillus :D
  • birslipbirslip Member
    avril 2007 modifié
    J'ai pas trop le temps ce soir, mais demain promis, je fait un bon zip avec toute les corrections necessaires :)
  • elodyelody Member
    T'embete pas c deja fais tout intégré ds la version de Pluxml TOTAL avec Multi-users, Liens externes, éditeur WYSIWYG, moteur de recherche .... débuggé normalement ^^
    Et ds des versions plus light aussi, le tout sur Pluxthemes.com/Pluxml Modifiés
    Voir aussi la page Plugins pour les extensions mineures !
  • DitiDiti Member
    Qui a envie d'une version totale ? Je conseille plus une page qui centralise tout.
  • elodyelody Member
    14 personnes au moins mon cher Diti !

    Quel rabat-joie .... tu fais koi ici pour pluxml toi deja ?! mais lol ......
  • elody a écrit:
    Quel rabat-joie ....
    J'avoue que tu as la critique facile Diti...
    Comme on dit, la critique est facile et l'art est difficile. Moi je trouve ça plutôt bien que des personnes se lancent à créer des sites de partage autour de Pluxml, encourageons les!
  • DitiDiti Member
    elody a écrit:
    Quel rabat-joie .... tu fais koi ici pour pluxml toi deja ?! mais lol ......
    La même chose que Skyline : répugner les modifications lourdes.
    Demande-lui : il n'est pas contre le développement communautaire. Mais il a le même avis que moi en ce qui conçerne le code.

    Pour partir sur une note plus gaie, j'exprime mon opinion personnelle. Pour faire une analogie entre Linus Torvalds et moi, j'ai tout-à-fait le droit d'utiliser Linux comme tout le monde et pourtant de conseiller KDE (alors que des gens, comme moi, préfèrent Gnome).
  • Diti a écrit:
    La même chose que Skyline : répugner les modifications lourdes.
    Demande-lui : il n'est pas contre le développement communautaire. Mais il a le même avis que moi en ce qui conçerne le code.
    Certaines modifications sont effectivement "lourdes" tel l'intégration d'un éditeur WYSIWYG, mais d'autres plugins respectent totalement la politique de pluxml, léger et XML.
    Il faut donc rester je pense ouvert sur les propositions de modifications et d'améliorations.
  • bonsoir,

    oups content de voir l'interet porte au moteur de recherche que je trouve sympatoche.

    pour le @ devant la variable $tableau , elle m'a semblé suffissante , dans le sens qu'il s'agit d'une de type notice et que ça ne plante pas. Mes competence php sont tres minimines et je renote le test sur isset.


    Sinon , j'ai remarqué dans l'archive , que le fichier contenant la fonction search a des espaces qui trainent derriere le chevron de fermeture php ... l'erreur a propos du "header" deja envoyé vient peut-etre de la , sans toutefois comprendre le comment du pourquoi au moment du reaffichage de la page avec son nouveau commentaires.

    pour les plugins , perso je n'aime pas les editeurs wysiwyg , mais je n'ai aucun probleme a les mettre en place pour un neophyte. , il fera benificier de toutes façon des qualité de pluxml a ces visiteurs :).

    ++
    cordialement
  • double post , hmm desolé

    Pour les 2 messages d'erreurs que j'avais:

    1) undefined offset .

    elle est du a la valeur attribué a la variable $n qui devrait etre -1 et pas 0 .
    donc plus besoin de rendre muette l'erreur avec un @ devant la ligne de code renvoyant les resultat de recherches.

    2) pour le header deja envoyé ....

    aprés test , confirmations qu'il proviennent bien des espaces(tabulations) dans le fichier class.search.php aprés le chevrons de fermeture du script ( ?> ).

    merci encore de ton script qui semble bien utile sur des petits blog :).

    GC
Connectez-vous ou Inscrivez-vous pour répondre.