[plugin] MySearch: moteur de recherche

StéphaneStéphane Member, Former PluXml Project Manager
MySearch est un plugin pour faire des recherches dans les articles et les pages statiques
-
Plugin disponible ici
-
Il y a 2 façons pour afficher le formulaire de recherche:
1) en allant sur la page de recherche (menu 'Rechercher' ajouté dans la liste des menus du site)
2) à partir du theme en ajoutant la ligne de code suivant:
<?php eval($plxShow->callHook('MySearchForm')) ?>

L'apparence du formulaire peut etre modifiée à partir du fichier css de son thème, en jouant sur le contenu des classes suivantes:
.searchform
.searchfield
.searchbutton

L'écran de configuration du plugin permet de définir les paramètres suivants:
- affichage du formulaire de recherche sur la pages des résultats (oui/non)
- affichage du menu de la page de recherche dans la liste des menus des pages statiques (oui/non)
- titre du menu (par défaut Rechercher)
- position du menu dans al liste des menus des pages statiques
- template de la page statique à utiliser

Historique
=======
## Version 1.7 (07/09/2017) ##
[+] Traduction allemande (contribution schulle4u)
[+] Multilingue: Ajout link rel alternate (contribution WorlBot)
[+] Gestion du formulaire avec la méthode get + post
FIX Dossier plugin en dur (contribution WorlBot)

## Version 1.6.1 (10/04/2017) ##
BUG tableau PLX_MYMULTILINGUE non géré avec php 5.x+
BUG affichage des résultats pour les catégories home et non classé

## Version 1.6 (04/04/2017) ##
[+] Compatibilité PluXml 5.6
[+] Compatibilité avec le plugin plxMyMultiLingue
[+] Traduction occitan (contribution Quent-in)
[+] Affichage des résultats groupés par Articles/Catégorie et par Pages
[+] Ajout de l'id static-search
[+] Nettoyage code
BUG Surbrillance du menu de la page statique

## Version 1.5.3 (13/05/2015) ##
[+] Compatibilité PluXml 5.4
BUG Mauvaise récupération des templates des pages statiques
BUG fix #3: Invalid argument supplied for foreach()
BUG fix #2: Undefined variable: placeholder

## Version 1.5.2 (02/07/2014) ##
[+] Nouveau paramètre pour pré-renseigné avec un texte le contenu du champ de recherche (placeholder)
BUG Affichage du libellé du bouton

## Version 1.5.1 (23/05/2014) ##
[+] Ajout d'une liste de critères de recherche pré-renseignés sur forme de case à cocher
## Version 1.4 (06/09/2013) ##
[+] Recherche dans les tags
BUG Pas de recherche dans les articles classés en "Page d'accueil"
## Version 1.3 (11/04/2013) ##
[+] Ajout du paramètre "Sauvegarder les recherches dans un fichier" (oui/non)
[+] Enregistrement des recherches dans un fichier + écran de consultation des recherches avec nombre d'occurences (menu MySearch dans la sidebar de l'admin)
## Version 1.2 (20/11/2012) ##
[+] Prise en compte des magic_quotes pour les versions de php < 5.4.0
[+] Prise en compte des équivalents html pour les caractères accentués
## Version 1.1.4 (11/09/2012) ##
BUG Recherche de la valeur dans le contenu de la page de recherche
## Version 1.1.3 (26/04/2012) ##
[+] Ecran de configuration du plugin: ajout du paramètre "nom du paramètre dans l'url"
[+] Message d'information si aucune valeur saisie dans le champ de recherche
## Version 1.1.2 (18/04/2012) ##
BUG Mauvaise classe css pour le lien actif du menu Rechercher
## Version 1.1.1 (16/04/2012) ##
Mise à jour pour PluXml 5.1.6
## Version 1.1 (01/02/2012) ##
[+] Ne requiert plus l'utilisation de la fonction staticList pour accèder au formulaire
[+] Paramètrage du libellé du bouton "Rechercher"
[+] Affichage de la page dans le sitemap (requiert PluXml 5.1.6 minimum)
BUG Messages d'erreurs à cause de variables non renseignées (warnings)
BUG Message d'erreur lors d'une recherche dans une page statique si le fichier de la page n'existe plus
## Version 1.0 (10/01/2012) ##
version initiale 1.0

Consultant PluXml

Ancien responsable du projet (2010 à 2018)

«134567

Réponses

  • magnifique. quelle belle initiative.
    merci pour tout
  • bankaibankai Member
    janvier 2012 modifié
    Hummmmmmmmmmmm mon stéph, je test cela de suite, maintenant, :)
    merci pour tes travaux.

    Bon après installation est test, je mets donc un mot à rechercher et une erreur apparaît
    Warning: file_get_contents(./data/statiques/008.http://www.site-de-bankai.fr/forum.php) [function.file-get-contents]: failed to open stream: No such file or directory in /homez.110/mamanmax/www/plugins/plxMySearch/form.search.php on line 43
    
    Warning: file_get_contents(./data/statiques/013.http://www.site-de-bankai.fr/categorie8/figurines.php) [function.file-get-contents]: failed to open stream: No such file or directory in /homez.110/mamanmax/www/plugins/plxMySearch/form.search.php on line 43
    

    voir ici: http://www.site-de-bankai.fr/search après recherche.
  • JosJos Member
    C'est une bonne idée d'avoir transformé le moteur de recherche du wiki en plugin, c'est plus simple à mettre en place.
  • Super ! Merci !
  • Bonjour/bonsoir,

    ayant a nouveau un peu de temps libre , je me remet un peu a torturer PluXml (ou bien serait-ce moi ?)

    En voyant ce plugin je m'empresse de le tester sur un theme que je develloppe, et surprise, j'ai le droit a une page statique qui m'affiche:
    Cette page est actuellement en cours de rédaction
    ... pas moyen d'avoir la page de recherche, mais avec le theme par defaut , pas de soucis.

    En relisant le code je m'aperçois que le hook est appliquer (si besoin) une fois que la liste des pages statiques est appelé dans le template.
    Pas de chance celui-ci ne vient qu’après dans le fichier sidebar.php qui se trouve aprés statique.php dans le montage de la page.

    Pour parer au souci et tester je met alors dans header.php :
    <p style="display:none"> <?php $plxShow->staticList($plxShow->getLang('HOME'),'<i id="#static_id"  class="#static_status" title="#static_name"><i>'); ?></p>
    

    Du coup ça marche, mais je me pose la question si il ne serait pas plus judicieux d'utiliser un autre hook directement dans le fichier choisi (static.php) plutôt que de dependre de header ou l'on ne veut pas forcement y mettre la liste des pages statiques ? (Le titre de la page est lui bel et bien modifié et le mode statique est reconnu)

    <hs> je viens aussi de tester le plug plxEditor, et toujours ce truc enervant :) . on y a le droit aussi dans l'edition des pages statiques ou du themes , catastrophe ! </hs>

    Cordialement ,
    et bravo encore , en presqu'une année , pluxml est devenu bien grand


    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

  • JosJos Member
    Pour moi c'est pareil, il me dit que la page est en cours de rédaction. Parcontre sur le thème par défaut, çà marche à peu pres, mais ya l'erreur php.
  • (...)<hs> je viens aussi de tester le plug plxEditor, et toujours ce truc enervant :) . on y a le droit aussi dans l'edition des pages statiques ou du themes , catastrophe ! </hs>

    Essaie cette version de plxEditor. Il ne s'affichera pas dans les pages permettant de modifier le code source (pages statiques, pages de modification des thèmes...). En plus, tu auras la possibilité de créer facilement des tableaux.
  • StéphaneStéphane Member, Former PluXml Project Manager
    ## Version 1.1 (01/02/2012) ##
    [+] Ne requiert plus l'utilisation de la fonction staticList pour accèder au formulaire
    [+] Paramètrage du libellé du bouton "Rechercher"
    [+] Affichage de la page dans le sitemap (requiert PluXml 5.1.6 minimum)
    BUG Messages d'erreurs à cause de variables non renseignées (warnings)
    BUG Message d'erreur lors d'une recherche dans une page statique si le fichier de la page n'existe plus

    Consultant PluXml

    Ancien responsable du projet (2010 à 2018)

  • Il serait bien de pouvoir choisir les classes css de chaque élément... Sinon, je suis en train de tester et ça m'a l'air plutôt cool.
  • merci Stéphane pour ton travail.
  • StéphaneStéphane Member, Former PluXml Project Manager
    Jerry Wham a écrit:
    Il serait bien de pouvoir choisir les classes css de chaque élément... Sinon, je suis en train de tester et ça m'a l'air plutôt cool.

    les classes css existent pour les élements.
    regarde le source de la page ou le fichier style.css dans le dossier du plugin

    Consultant PluXml

    Ancien responsable du projet (2010 à 2018)

  • Stéphane a écrit:
    Jerry Wham a écrit:
    Il serait bien de pouvoir choisir les classes css de chaque élément... Sinon, je suis en train de tester et ça m'a l'air plutôt cool.

    les classes css existent pour les élements.
    regarde le source de la page ou le fichier style.css dans le dossier du plugin
    Je sais bien. Mais quand on veut adapter un thème, c'est plus pratique de modifier les classes des éléments directement depuis le plugin plutôt que de se palucher le css du thème pour savoir quoi modifier.
    Après, c'est du détail et c'est pour plus de confort de développement.
    Au passage, le plugin fonctionne nickel. Testé et adopté.
  • Stéphane a écrit:
    ## Version 1.1 (01/02/2012) ##
    (requiert PluXml 5.1.6 minimum)
    Zut, pas encore dispo

    @Bankai : c'est bien ce plugin qui figure dans la barre de droite de ton site sous le titre "Recherche sur le site" ?

    Merci
  • bankaibankai Member
    février 2012 modifié
    Oui tout à fais.
  • Jerry WhamJerry Wham Member
    février 2012 modifié
    Petit bug : si on entre par exemple "ab" comme mot à chercher, le plugin sort une liste de résultats (jusqu'ici tout va bien) seulement le dernier correspond à la page "rechercher" avec comme lien "static0/search". Si on clique sur ce résultat, une erreur est affichée disant que la page n'existe plus.
    Voici comment est paramétré le plugin chez moi :
    Afficher le formulaire de recherche sur la page de recherche : OUI
    Afficher le menu de la page de recherche : NON
    Titre du menu : Rechercher
    Position du menu : 2
    Libellé du bouton "Rechercher" : OK
    Template : static.php
    
    Pour résoudre le bug, il faut ajouter une condition lors de l'affichage des pages statiques, ligne 42 du plugin. A la place de :
    if($v['active']==1) { # si la page est bien active
    
    mettre
    if($v['active']==1 && intval($k) != 0) { # si la page est bien active et qu'elle ne correspond pas à une page inexistante
    
    Voilou
  • StéphaneStéphane Member, Former PluXml Project Manager
    ## Version 1.1.1 (16/04/2012) ##
    Mise à jour pour PluXml 5.1.6

    Consultant PluXml

    Ancien responsable du projet (2010 à 2018)

  • Salut,


    J'ai installer le plugin de recherche sur mon blog.

    l'url par défaut est «http://www.carnetb.com/search» et j'aimerais qu'il soit : «http://www.carnetb.com/recherche».

    J'ai tenté de changer tout les mot "search" par "recherche" dans le fichier plxMySearch.php, mais cela n'a pas fonctionné.

    Quelqu'un sait quel modification exactement il faut faire ?


    Merci d'avance
  • StéphaneStéphane Member, Former PluXml Project Manager
    fichier plxMySearch
    remplace le contenu du fichier par celui-ci
    <?php
    /**
     * Plugin plxMySearch
     *
     * @version	1.1.1
     * @date	16/04/2012
     * @author	Stephane F
     **/
    class plxMySearch extends plxPlugin {
    
    	/**
    	 * Constructeur de la classe
    	 *
    	 * @param	default_lang	langue par défaut
    	 * @return	stdio
    	 * @author	Stephane F
    	 **/
    	public function __construct($default_lang) {
    
            # appel du constructeur de la classe plxPlugin (obligatoire)
            parent::__construct($default_lang);
    
    		# droits pour accèder à la page config.php du plugin
    		$this->setConfigProfil(PROFIL_ADMIN);
    
            # déclaration des hooks
    		$this->addHook('plxShowConstruct', 'plxShowConstruct');
            $this->addHook('plxMotorPreChauffageBegin', 'plxMotorPreChauffageBegin');
            $this->addHook('plxShowStaticListEnd', 'plxShowStaticListEnd');
    		$this->addHook('plxShowPageTitle', 'plxShowPageTitle');
    		$this->addHook('SitemapStatics', 'SitemapStatics');
    		$this->addHook('ThemeEndHead', 'ThemeEndHead');
    		$this->addHook('MySearchForm', 'form');
        }
    
    	/**
    	 * Méthode de traitement du hook plxShowConstruct
    	 *
    	 * @return	stdio
    	 * @author	Stephane F
    	 **/
        public function plxShowConstruct() {
    		# infos sur la page statique
    		$string  = "if(\$this->plxMotor->mode=='recherche') {";
    		$string .= "	\$array = array();";
    		$string .= "	\$array[\$this->plxMotor->cible] = array(
    			'name'		=> '".$this->getParam('mnuName')."',
    			'menu'		=> '',
    			'url'		=> 'search',
    			'readable'	=> 1,
    			'active'	=> 1,
    			'group'		=> ''
    		);";
    		$string .= "	\$this->plxMotor->aStats = array_merge(\$this->plxMotor->aStats, \$array);";
    		$string .= "}";
    		echo "<?php ".$string." ?>";
    	}
    
    	/**
    	 * Méthode de traitement du hook plxMotorPreChauffageBegin
    	 *
    	 * @return	stdio
    	 * @author	Stephane F
    	 **/
        public function plxMotorPreChauffageBegin() {
    
    		$template = $this->getParam('template')==''?'static.php':$this->getParam('template');
    
    		$string = "
    		if(\$this->get && preg_match('/^recherche\/?/',\$this->get)) {
    			\$this->mode = 'recherche';
    			\$this->cible = '../../plugins/plxMySearch/form';
    			\$this->template = '".$template."';
    			return true;
    		}
    		";
    
    		echo "<?php ".$string." ?>";
        }
    
    	/**
    	 * Méthode de traitement du hook plxShowStaticListEnd
    	 *
    	 * @return	stdio
    	 * @author	Stephane F
    	 **/
        public function plxShowStaticListEnd() {
    
    		# ajout du menu pour accèder à la page de recherche
    		if($this->getParam('mnuDisplay')) {
    			echo "<?php \$class = \$this->plxMotor->mode=='recherche'?'active':'noactive'; ?>";
    			echo "<?php array_splice(\$menus, ".($this->getParam('mnuPos')-1).", 0, '<li><a class=\"static '.\$class.'\" href=\"'.\$this->plxMotor->urlRewrite('?recherche').'\">".$this->getParam('mnuName')."</a></li>'); ?>";
    		}
        }
    
    	/**
    	 * Méthode qui rensigne le titre de la page dans la balise html <title>
    	 *
    	 * @return	stdio
    	 * @author	Stephane F
    	 **/
    	public function plxShowPageTitle() {
    		echo '<?php
    			if($this->plxMotor->mode == "recherche") {
    				echo plxUtils::strCheck($this->plxMotor->aConf["title"])." - ".plxUtils::strCheck($this->plxMotor->plxPlugins->aPlugins["plxMySearch"]["instance"]->getLang("L_PAGE_TITLE"));
    				return true;
    			}
    		?>';
    	}
    
    	/**
    	 * Méthode qui référence la page de recherche dans le sitemap
    	 *
    	 * @return	stdio
    	 * @author	Stephane F
    	 **/
    	public function SitemapStatics() {
    		echo '<?php
    		echo "\n";
    		echo "\t<url>\n";
    		echo "\t\t<loc>".$plxMotor->urlRewrite("?recherche")."</loc>\n";
    		echo "\t\t<changefreq>monthly</changefreq>\n";
    		echo "\t\t<priority>0.8</priority>\n";
    		echo "\t</url>\n";
    		?>';
    	}
    
    	/**
    	 * Méthode qui ajoute le fichier css dans le fichier header.php du thème
    	 *
    	 * @return	stdio
    	 * @author	Stephane F
    	 **/
    	public function ThemeEndHead() {
    		echo "\t".'<link rel="stylesheet" type="text/css" href="'.PLX_PLUGINS.'plxMySearch/style.css" media="screen" />'."\n";
    	}
    
    	/**
    	 * Méthode statique qui affiche le formulaire de recherche
    	 *
    	 * @return	stdio
    	 * @author	Stephane F
    	 **/
    	public static function form($title=false) {
    
    		# récuperation d'une instance de plxMotor
    		$plxMotor = plxMotor::getInstance();
    		$plxPlugin = $plxMotor->plxPlugins->getInstance('plxMySearch');
    		$searchword = '';
    		if(!empty($_POST['searchfield'])) {
    			$searchword = strtolower(htmlspecialchars(trim($_POST['searchfield'])));
    		}
    	?>
    
    <div class="searchform">
    	<form action="<?php echo $plxMotor->urlRewrite('?recherche') ?>" method="post">
    		<?php if($title) : ?>
    		<p class="searchtitle"><?php $plxPlugin->lang('L_FORM_SEARCHFIELD') ?>&nbsp;:</p>
    		<?php endif; ?>
    		<p class="searchfields">
    		<input type="text" class="searchfield" name="searchfield" value="<?php echo $searchword ?>" />
    		<input type="submit" class="searchbutton" name="searchbutton" value="<?php echo $plxPlugin->getParam('frmLibButton') ?>" />
    		</p>
    	</form>
    </div>
    
    	<?php
    	}
    }
    ?>
    

    Consultant PluXml

    Ancien responsable du projet (2010 à 2018)

  • StéphaneStéphane Member, Former PluXml Project Manager
    ## Version 1.1.2 (18/04/2012) ##
    BUG Mauvaise classe css pour le lien actif du menu Rechercher

    Consultant PluXml

    Ancien responsable du projet (2010 à 2018)

  • Salut Stéphane,

    Merci pour ta réponse. J'ai fait les changement, et cela n'a pas fonctionné, ça fait encore un erreur.

    Tu peut voir l'erreur en tentant une recher sur www.carnetb.com
  • StéphaneStéphane Member, Former PluXml Project Manager
    As-tu d'abord mis à jour l'ensemble du plugin avec la derniere version et apres modifier le code du fichier plxMySearch.php. Il faut faire dans cet ordre.

    Consultant PluXml

    Ancien responsable du projet (2010 à 2018)

  • Oui, j'ai copié l'ensemble du dossier du plugin en 1.1.1 (la 1.1.2 ne m'affectant pas, car je n'affiche pas de lien de recherche dans le menu), puis ensuite j'ai modifié le fichier plxmysearch.php avec tes instruction, puis après j'ai fait la petite modification afin qu'une image de loupe soit utilisé à la place du bouton «OK».
  • StéphaneStéphane Member, Former PluXml Project Manager
    tu peux me zipper ta version du plugin et me l'envoyer par mail stp
    ça doit pa etre grand chose

    Consultant PluXml

    Ancien responsable du projet (2010 à 2018)

  • bdube30bdube30 Member
    avril 2012 modifié
    Message envoyé.

    Au cas que d'autres veuilles s'amuser, voici où est le .zip : http://www.largedocument.com/3/548aa14a/plxMySearch.zip
  • StéphaneStéphane Member, Former PluXml Project Manager
    j'ai corrigé le code du post http://forum.pluxml.org/viewtopic.php?pid=25592#p25592 qui devrait fonctionner maintenant

    Consultant PluXml

    Ancien responsable du projet (2010 à 2018)

  • Merci, je le teste dès que j'arrive chez moi !

    Vive Pluxml !
  • StéphaneStéphane Member, Former PluXml Project Manager
    bdube30 a écrit:
    Merci, je le teste dès que j'arrive chez moi !

    Vive Pluxml !

    regarde ta messagerie également ;)

    Consultant PluXml

    Ancien responsable du projet (2010 à 2018)

  • StéphaneStéphane Member, Former PluXml Project Manager
    ## Version 1.1.3 (26/04/2012) ##
    [+] Ecran de configuration du plugin: ajout du paramètre "nom du paramètre dans l'url"
    [+] Message d'information si aucune valeur saisie dans le champ de recherche

    Consultant PluXml

    Ancien responsable du projet (2010 à 2018)

  • JosJos Member
    Merci Stephane.
  • Ça fonctionne à merveille, encore merci du bon travail !
Connectez-vous ou Inscrivez-vous pour répondre.