Aller au contenu
Support de Zwii
sylvainlelievre

[TRUC]Un script de recherche interne UPDATE

Messages recommandés

Update v4.4 : amélioration du code, merci à @Gilux

Update v4.3 : mise au point (notices "Laragon")

Update v4.2 : suite aux notices "Laragon", merci à @Gilux

Update v4: cette nouvelle version possède une option de recherche par mot entier.

Update v3 : cette nouvelle version recherche_v3 corrige un problème de sécurité.

 

Les droits d'accès aux pages et aux articles de blog sont maintenant gérés dans l'affichage des résultats de la recherche.

 

Testé de Zwii 9.0 à 9.1.13, sans modification de votre Zwii

 

De quoi s'agit-il ?

Avec le script que je vous propose d'installer les internautes pourront réaliser une recherche interne dans votre site par mot ou phrase clef.

Une portion du texte contenant le mot ou la phrase clef est affichée pour chaque occurrence rencontrée.

Le nombre d'occurrence dans une page est indiqué.

Dans le mot ou la phrase clef la casse est indifférente, les accents sont pris en compte.

 

Installation

Cette procédure installe sur votre site le fichier recherche.php, aucune modification de votre ZwiiCMS n'est à faire.

Décompressez l'archive recherche_v4.zip

 

Elle contient :

site/file/include/recherche/recherche.php

Fichier php contenant le script de recherche

 

 

 

 

1 - Avec votre logiciel FTP préféré copier le dossier site à la racine de votre installation.

 

2 - Créer une nouvelle page nommée "Recherche" avec Page parent : Aucune et Position : Ne pas afficher

Vous pouvez saisir un texte qui s'affichera avant le résultat de la recherche.

3 - En configuration saisissez dans la partie "Options avancées  - Insérer un script dans body" :

 

 

<?php
//nom de la page Zwii
$page = $this->getUrl(0);
//insertion d'un include dans une page particuliére
switch ($page) {
    case 'recherche':
		if (file_exists('./site/file/include/recherche/recherche.php'))
		{
			include './site/file/include/recherche/recherche.php';
		} 
        break;
}
?>

Plus d'information dans l'article [ASTUCE]Faire un include dans une page Zwii V3

 

 

4 - Dans la page de votre choix insérer un formulaire en édition code source

 

Attention ! si vous avez coché réécriture d'url dans la page configuration de ZWii,  il faut remplacer dans les formulaires suivants

action="?recherche" par action="recherche"

 

<form action="?recherche" method="post">
<p>Votre mot ou votre phrase clef</p>
<input name="motclef" type="text" />
<p><input type="submit" value="Rechercher" /> <input id="choixmotentier" name="motentier" type="checkbox" value="1" />
<label for="choixmotentier"> Mot entier uniquement</label></p>
</form>

 

Autre possibilité de formulaire, valable à partir de la version 4.4,  par @Gilux

 

<form action="?recherche" method="post"><input name="motclef" type="text" placeholder="Rechercher dans le site" />
<div style="display: block; margin-top: 10px;"><input type="submit" value="Valider" /> <input id="choixmotentier"
name="motentier" type="checkbox" /><label for="choixmotentier"> Mot entier uniquement</label></div>
</form>

 

Ou encore avec une icone loupe, le code "src="/site/file/source/icones/loupe.gif" étant à adapter à votre icône et à son emplacement. @Gilux

<form action="?recherche" method="post">
<div style="display: inline-block; vertical-align: middle;"><input name="motclef" type="text" placeholder="Rechercher dans le site" /></div>
<div style="display: inline-block; vertical-align: middle;"><input alt="Valider" src="/site/file/source/icones/loupe.gif" type="image" /></div>
<div style="display: block; margin-top: 10px;"><input id="choixmotentier" name="motentier" type="checkbox" /> <label for="choixmotentier"> Mot entier</label></div>
</form>

 

C'est tout.

 

 

 

 

 

 

 

 

recherche_v4.4.zip

Modifié par sylvainlelievre
Update v4.4
  • Merci 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour @roger,

 

ton premier essai avec mot clef "maintenant" :  résultat anormal, as-tu bien mis input name="motclef" dans ton formulaire ?

Ton installation du script recherche.php ainsi que ton insertion du script dans body ont l'air correct.

Mais sur ton site après avoir validé la recherche on a l'url suivant :

http://www.website-distribution.com/ZwiiCMS-9111/rechercher-dans-le-site?recherche

 

on devrait avoir .../ZwiiCMS-9111/?recherche

?????

 

second essai par saisie del'URL : résultat normal. Cette utilisation n'est pas prévue puisqu'il faut transmettre motclef...

 

troisième essai sur mon site : "normal"  (je suis passé en 9.1.11 ce matin et comme je suis avec mon include en version V2 et que je n'avais pas encore lancé modifcore.php, ça donne ça).

Je passe mes sites en ligne en include V3 cet AM.

 

Je viens de refaire un nouvel essai sur mon site de test en repartant de zéro et en suivant ma méthode d'installation : je n'ai pas eu de problème.

https://www.vivreenborddebaie.fr/dev9.1/

 

A plus

 

Sylvain

 

Modifié par sylvainlelievre
  • J'aime 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour @roger,

 

Merci.

Pour le Zip du module de recherche il est unique et fourni plus haut, le suffixe V3 se rapporte à la façon de "faire un include dans une page Zwii".

 

Bien sur que tes remontées sont pertinentes et attendues, tu débusques souvent des bugs bien cachés !

 

Mon module de recherche ne sera pas compatible avec la 9.2 que @Fred développe, je ferais à ce moment là, si c'est dans mes capacités, les modifications nécessaires.

 

Bonne journée

Sylvain

  • J'aime 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Salut @sylvainlelievre

J'ai installé ce formulaire de recherche qui fonctionne bien comme attendu, dommage qu'on ne puisse pas rechercher un terme exact, évitant par ex. de remonter 'cambouis' pour une recherche du terme 'oui'

Partager ce message


Lien à poster
Partager sur d’autres sites
Il y a 1 heure, sylvainlelievre a dit :

Mon module de recherche ne sera pas compatible avec la 9.2 que @Fred développe, je ferais à ce moment là, si c'est dans mes capacités, les modifications nécessaires.

Bonjour à tous,

La 9.2 stockera les pages et les modules dans un dossier avec le code iso de la langue.

Pour déterminer la langue en cours et les langues disponibles, j'ai ajouté deux fonctions dans core. Il suffira de les appeler pour rediriger vers les bons fichiers.

Quand j'aurai un peu de temps, je regarderai comment est conçu ton module afin qu'il soit parfaitement intégré.

Bonne journée à tous.

  • J'aime 1

Partager ce message


Lien à poster
Partager sur d’autres sites

@sylvainlelievre Pourquoi ne pas créer un module standard de Zwii ?

 

Voila comment faire :

dans core.php déclarer le module "search" dans le tableau $coreModuleIds ligne 38

créer un dossier dans core/module/"search"

ce dossier contient :

  • rsearch.php qui contient les traitements.
  • un dossier view  dont le nom correspond à une fonction de search.php

A minima du dois donc avoir un dossier view/view/index.php et une fonction index

 

La structure de ton fichier search.php est la suivante :

class config extends common {

// déclaration de variables locales

// Liste de fonctions correspondant aux vues

	public function index () {
	}

// Liste de fonctions correspondants au module, ex :
	
	public function updateRobots() {
	}

}

Les fonctions internes sont des extensions de classe que tu appelles ainsi $this->updateRobots()

 

Lorsque tu ajoutes un formulaire à une vue, le traitement se fait dans la fonction après le test :

if($this->isPost()) {
}

qui contrôle si des variables sont transmises par POST

 

En fin de traitement addOutput détermine ce qu l'on fait :

			$this->addOutput([
				'redirect' => helper::baseUrl() . $this->getUrl(),
				'notification' => 'Modifications enregistrées',
				'state' => true
			]);

state false indique une erreur, donc notification en rouge

 

La sortie peut aussi tenir compte du traitement précédente avec des variables :

		$this->addOutput([
			'notification' => ($successSitemap === true && $successRobots >= 100) ? 'Création réussie' : 'Echec d\'écriture',
			'redirect' => helper::baseUrl() . 'config',
			'state' => ($successSitemap === true && $successRobots >=100)  ? true : false
		]);

Soit tu fais un test avant et tu indiques le résultat du test en valeur soit tu utilises un opérateur ternaire :

test ? si vrai : si faux

 

En t'inspirant des modules existants tu devrais t'en sortir facilement.

 

Si l'opération te tente ouvre un fil dédié, la discussion peut intéresser d'autres membres.

 

 

 

 

 

 

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour @Fred,

 

Merci pour le canevas qui devrait me permettre de faire un module recherche, à condition que je sois capable de hausser mon niveau en php (je viens des micro contrôleurs et des automates programmables, plus pas mal de Pascal (Delphi !) et un peu de C++).

 

Bonne soirée

 

Sylvain

  • J'aime 1

Partager ce message


Lien à poster
Partager sur d’autres sites
il y a 49 minutes, sylvainlelievre a dit :

Bonjour @Fred,

 

Merci pour le canevas qui devrait me permettre de faire un module recherche, à condition que je sois capable de hausser mon niveau en php (je viens des micro contrôleurs et des automates programmables, plus pas mal de Pascal (Delphi !) et un peu de C++).

 

Bonne soirée

 

Sylvain

 

Bonsoir Sylvain,

 

C'est la notion de classes que tu dois développer, le reste ira tout seul  😉

 

Bonne soirée,

 

Fred

  • J'aime 1

Partager ce message


Lien à poster
Partager sur d’autres sites
Le 18/06/2019 à 08:42, Gilux a dit :

Salut @sylvainlelievre

J'ai installé ce formulaire de recherche qui fonctionne bien comme attendu, dommage qu'on ne puisse pas rechercher un terme exact, évitant par ex. de remonter 'cambouis' pour une recherche du terme 'oui'

Bonjour @Gilux,

c'est maintenant fait dans la version v4. Si tu peux faire les tests....

 

Bonne journée

 

Sylvain

  • Merci 1

Partager ce message


Lien à poster
Partager sur d’autres sites

OK, j'ai testé 😉

 

La recherche fonctionne bien par expression et par mot, une limite cependant, en dessous de 4 lettres le résultat affiche des mots incluant la recherche, ex : pour la recherche 'mon', le résultat affiche monsieur, mondial, monnaie, montrer...

Mais aussi à l'intérieur d'un mot, comme ...monieux pour harmonieux

C'est pas grave, on ne cherche pas souvent des mots de 3 lettres

 

Les recherches des visiteurs ne se font plus dans les pages privées, du moins les résultats n'affichent plus ceux des pages privées, super !

 

Là, t'es en train d'en faire un module pour ZwiiCMS, on ne pourra alors sans doutes plus afficher le formulaire de recherche dans une barre latérale ?

Si oui, c'est bête, car c'est comme ça que je l'utilise

 

Modifié par Gilux
test
  • Merci 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour @Gilux

 

Merci pour tes tests.

Pour le premier point je ne vois pas le hic : en testant avec des mots de 3 lettres, le filtrage "mot entier" semble fonctionner...

 

Pour l'avenir du script en version Zwii 9.1, pas de soucis. Comme c'est lancé par un include et que l'on peut le déclarer dans la partie "script dans body", ça pourra toujours fonctionner.

Par contre si la structure d'enregistrement des pages change dans l'avenir (Zwii 9.2 ?) je ne sais pas si je maintiendrais le script ET le module...

 

Bonne journée

 

Sylvain

 

Partager ce message


Lien à poster
Partager sur d’autres sites
Il y a 3 heures, sylvainlelievre a dit :

Pour le premier point je ne vois pas le hic : en testant avec des mots de 3 lettres, le filtrage "mot entier" semble fonctionner...

Quel filtrage "mot entier" ?

Je teste le .zip ci-dessus

form-recherche_v4.png.7dc980414be013ab92425cffde705691.png

Le 17/06/2019 à 09:14, sylvainlelievre a dit :

recherche_v4.zip 3 Ko · 1 download

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Arf !

J'avais pas remplacé le formulaire...

Le 17/06/2019 à 09:14, sylvainlelievre a dit :

Dans la page de votre choix insérer un formulaire en édition code source

 


<form action="?recherche" method="post">
<p>Votre mot ou votre phrase clef</p>
<input name="motclef" type="text" />
<p><input type="submit" value="Rechercher" /> <input id="choixmotentier" name="motentier" type="checkbox" value="1" />
<label for="choixmotentier"> Mot entier uniquement</label></p>
</form>

 

ça va beaucoup mieux depuis :)

 

form2.png.57cf4807981064eea5ae2d41788ec58d.png

 

Il y a 7 heures, sylvainlelievre a dit :

en testant avec des mots de 3 lettres, le filtrage "mot entier" semble fonctionner...

 

Le filtrage "mot entier" fonctionne bien, super merci 😉

  • J'aime 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Deux remarques:

Les galeries ne sont pas trouvées.

Et le titre de la page n'apparait pas dans la fenêtre

Modifié par mulanee

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour @mulanee,

 

Merci pour ces remarques. Les galeries de photos ne sot pas concernées pour le moment par ce script de recherche... Quant au titre tu veux parler de celui de la page "Recherche" ? c'est une option de la page comme pour toutes les pages.

 

Bonne journée

 

Sylvain

Partager ce message


Lien à poster
Partager sur d’autres sites
Il y a 23 heures, sylvainlelievre a dit :

Bonjour @mulanee,

 

Merci pour ces remarques. Les galeries de photos ne sot pas concernées pour le moment par ce script de recherche... Quant au titre tu veux parler de celui de la page "Recherche" ? c'est une option de la page comme pour toutes les pages.

 

Bonne journée

 

Sylvain

 

Non non, le titre n'est pas masqué dans la config de la page.

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour @mulanee,

 

Voici la page "Recherche" où j'ai installé le formulaire et sur laquelle se produit l'include de recherche.php

photo 1 : avec l'option titre masqué

photo 2 : titre non masqué

Le titre "Recherche" apparaît bien dans le cas 2....

 

Bonne journée

 

Sylvain

1.jpg

2.jpg

Partager ce message


Lien à poster
Partager sur d’autres sites

Je me réponds.

J'appelais une page search, que j'ai supprimée, cependant,

 

L'appel du module se fait directement depuis un lien dans le footer personnalisé.

C'est bizarre, sur 4 sites (free) différents, je n'ai pas le même comportement:

Parfois j'ai ce titre "Rechercher dans le site" (1 fois)

Parfois j'ai "Mot entier uniquement " (1 fois mais pas sur le même site)

http://nejlabzt.free.fr/?search

http://clemelis.free.fr/?search

http://emmanuelbg.free.fr/?search

http://chateaufort78.free.fr/Zwii/?search

 

Je dois passer à côté de quelque chose..

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour @mulanee,

 

Tout ce qui est dans cet article concerne le script recherche.php et son include ....

 

Tes liens montrent que tu es en train de tester un module standard de recherche, en développement, et dont les explications sont dans atelier de développement. ..

Pour le faire fonctionner il faut mettre le module search dans core/module et modifier core.php en ajoutant search dans la liste des modules.

 

Bon we

 

Sylvain

Modifié par sylvainlelievre

Partager ce message


Lien à poster
Partager sur d’autres sites
il y a une heure, sylvainlelievre a dit :

Bonjour @mulanee,

 

Tout ce qui est dans cet article concerne le script recherche.php et son include ....

 

Tes liens montrent que tu es en train de tester un module standard de recherche,, en développement, et dont les explcations sont dans atelier de développement. ..

Pour le faire fonctionner il faut mettre le module search dans core/module et modifier core.php en ajoutant search dans la lste des modules.

 

Bon we

 

Sylvain

 

Donc ça prouve que je ne comprends rien 🙂

J'ai seulement téléchargé search.zip décompressé que j'ai mis dans /module (pas /core/module).

Je n'ai pas changé core.php

Modifié par mulanee

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour @sylvainlelievre

Dans le script de recherche interne, testé avec ZwiiCMS 9.2.0.dev, en local avec Laragon (merci @Fred pour le tuyau) il remonte les erreurs suivantes :

 

Notice: Undefined index: motclef in D:\websites\ZwiiCMS-9200\site\file\include\recherche\recherche.php on line 65

Notice: Undefined index: motentier in D:\websites\ZwiiCMS-9200\site\file\include\recherche\recherche.php on line 68

 

Que j'ai corrigées par :

	// Récupération du mot clef passé par form avec caractères accentués
	if (isset($_POST['motclef'])) {
	$motclef=$_POST['motclef'];
	}
	else {$motclef=false;}
	// Récupération de l'option mot entier uniquement valeur oui ou non
	if (isset($_POST['motentier'])) {
	$motentier=$_POST['motentier'];
	}
	else {$motentier=false;}	

 

  • Merci 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.


×
×
  • Créer...