Aller au contenu
Support de Zwii et Yocto

Messages recommandés

Bonjour,

Voici un module de recherche qui exploite le fichier data.json d'un site ZWII (testé sous 8.5.9) pour chercher des occurences dans toutes les pages du site.

Il est constitué d'un seul fichier php et agrémenté d'une image de fond pour le rendu.

Plus de détails dans l'entête du fichier recherche.php

Vous aurez un aperçu du rendu en allant sur la page d'accueil du site https://www.halteauxmareesvertes.org   (bas de page)

 

<!-- Recherche des pages contenant un mot ou une phrase clef à partir du fichier data.json
Une portion du texte contenant le mot ou la phrase clef est affichée pour chaque occurence rencontrée
Le nombre d'occurence dans une page est indiqué.
Dans le mot ou la phrase clef la casse est indifférente, les accents sont pris en compte.

Testé avec ZWII 8.5.9
Sont à regrouper dans un dossier ce fichier recherche.php, loupe.jpg, data.json (une copie de votre data.json) et un .htaccess
Un formulaire POST placé dans une des pages ZWII pointe sur ce fichier
<form action="/....../recherche.php" method="post">Recherche : <input name="motclef" size="10" type="text" />
<input type="submit" value="valider" /></form>
-->

<head>
    <title>Recherche</title>            
    <link rel="stylesheet" href="/site/data/theme.css">
    <link rel="stylesheet" href="/site/data/custom.css">
</head>
<body style="background-image:url(loupe.jpg);">

<?php
//Déclaration de la fonction nettoyer(string $contenu) : string
//Supprime de $contenu les caractères placés entre < et >, donc les balises html comme <p> <br/> etc...
//Retourne $contenu nettoyée
function nettoyer_html($contenu)
{
    do
    {
        $pos1=strpos($contenu,chr(60));
        if($pos1!==false)
        {
            $pos2=strpos($contenu,chr(62));
            if($pos2!==false) $contenu=substr_replace($contenu," ",$pos1,($pos2 - $pos1 + 1));
        }
    }
    while($pos1!==false);
    return $contenu;
}


// Récupération de l'ensemble des données d'un site ZWII 8.x.x
// On utilise une copie du fichier data.json, manuelle car avec .htaccess impossible d'utiliser copy
// Lire le fichier json
$json_source = file_get_contents('data.json');

// Décoder le JSON en un array
$array = json_decode($json_source,true);

// Récupération du mot clef passé par form avec caractères accentués
$motclef=$_POST['motclef'];
echo '<h1>R&eacute;sultats de la recherche avec le mot clef : '.$motclef.'<br/></h1>';
if ($motclef!="" && strlen($motclef)>2)
{
    foreach ($array as $key1 => $value1)
    {
        // Déterminer le chemin de tous les contenus (content) dans page ou module
        if (($key1=='page' || $key1=='module') && is_array($value1) )
        {
            foreach ($value1 as $key2 => $value2)
            {
                if (is_array($value2))
                {
                        foreach ($value2 as $key3 => $value3)
                        {
                            if ($key3=="content" && is_string($value3))
                            {
                                // compte le nombre d'occurences dans la page
                                $nboccu=0;
                                // le contenu à explorer est dans $value3, le nom de la page est $key2
                                //Nettoyage de $value3 : on enlève tout ce qui est inclus entre < et >
                                $value3=nettoyer_html($value3);
                                //accentuation
                                $value3=html_entity_decode($value3);
                                // Recherche et affichage des occurences
                                do
                                {
                                    $occu = stristr($value3,$motclef);
                                    if ($occu!="")
                                    {
                                        if ($key2!=$dejavu) echo '<p><br/>Mot clef trouv&eacute; dans la page : <a href="/?'.$key2.'">'.$key2.'</a><br/></p>';
                                        $dejavu=$key2;
                                        $nboccu++;
                                        //Affichage d'un extrait de $value3
                                        echo '<p>'.$nboccu.' - "...<em>'.substr($occu,0,200).'</em>..."<br/></p>';
                                        //pour recherche d'une autre occurence dans le même contenu
                                        $value3=substr($occu,100);
                                    
                                    }
                                }
                                while($occu!="");
                                $dejavu="";
                                $nboccu=0;
                            }
                            elseif ($key1 == "module" && is_array($value3))
                            {
                                foreach ($value3 as $key4 => $value4)
                                {    
                                    if ($key4=="content" && is_string($value4) )
                                    {
                                        $nboccu=0;
                                        // le contenu à explorer est dans $value4, le nom du module/page est $key2/$key3
                                        //Nettoyage de $value4 : on enlève tout ce qui est inclus entre < et >
                                        $value4=nettoyer_html($value4);
                                        //accentuation
                                        $value4=html_entity_decode($value4);
                                        // Recherche et affichage des occurences
                                        do
                                        {
                                            $occu = stristr($value4,$motclef);
                                            if ($occu!="")
                                            {
                                                if ($key3!=$dejavu) echo '<p><br/>Mot clef trouv&eacute; dans la page : <a href="/?'.$key2.'/'.$key3.'">'.$key2.'/'.$key3.'</a><br/></p>';
                                                $dejavu=$key3;
                                                $nboccu++;
                                                echo '<p>'.$nboccu.' - "...<em>'.substr($occu,0,200).'</em>..."<br/></p>';
                                            }
                                            //pour recherche d'une autre occurence dans le même contenu
                                            $value4=substr($occu,100);
                                        }
                                        while($occu!="");
                                        $dejavu="";
                                        $nboccu=0;
                                    }                    
                                }
                            }            
                        }
                }
    
            }
        }
    }
}
else echo '<p><br/>Trop court ! minimum 3 caract&egrave;res</p>';
echo '<br/><br/><br/>';
?>
</body></html>

 

loupe.jpg

recherche.php

Modifié par sylvainlelievre
aspect visuel du code
  • J'aime 2

Partager ce message


Lien à poster
Partager sur d’autres sites

Il serait intéressant de tester ce script sur une v9 :

- le fichier de données est désormais core.json

- la v9 contient un module code :

  1. copier le script dans le gestionnaire de fichier,
  2. créer une page avec ce module pointant vers le script.
  3. et tester...

C'est très cool d'avoir commenté, juste en passant la fonction http://php.net/manual/fr/function.strip-tags.php peut remplacer la fonction nettoyer il me semble.

Je vais le tester pour voir 😉

Modifié par cybertaf

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour Cybertaf,

 

J'ai monté rapidement une version 9. En testant mon script de façon basique (avec ouverture de la page recherche.php "hors du site" le changement de nom data.json vers core.json ne pose pas de problème, ça détecte bien les occurences dans les pages, les pages enfant et les blogs (pas testé dans d'autres modules).

 

Par contre l'essai comme proposé dans ton message n'a pas fonctionné.

Dans la partie php de mon fichier j'ai remplacé data.json par core.json, supprimé l'entête html.

J'ai créé une page de type module code pointant vers le script php.

Le gestionnaire de fichier a placé mon fichier recherche.php dans un dossier code, j'ai mis dans ce dossier une copie de core.json.

J'ai créé un formulaire sur la page d'accueil qui pointe vers la page contenant le module code.

 

La page recherche.php s'ouvre bien ( et c'est vrai qu'à l'intérieur du site c'est plus fun) mais le mot clef (ou phrase clef) ne passe pas, la page php reçoit une chaîne vide. Bref je n'arrive pas à passer le contenu du formulaire vers le script php.

 

Plus un truc bizarre : quand je suis connecté et que je test la recherche, la page contenant le module code s'ouvre en mode édtition au lieu de s'exécuter.

 

Merci pour strip-tags.php, j'ai réinventé la roulette....

 

Ce module code ouvre de superbes perspectives mais soit je ne sais pas m'en servir, soit il y a un bug.

 

A suivre, mais je vais être absent 15 jours

 

Partager ce message


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

Bonjour Cybertaf,

 

J'ai monté rapidement une version 9. En testant mon script de façon basique (avec ouverture de la page recherche.php "hors du site" le changement de nom data.json vers core.json ne pose pas de problème, ça détecte bien les occurences dans les pages, les pages enfant et les blogs (pas testé dans d'autres modules).

 

Par contre l'essai comme proposé dans ton message n'a pas fonctionné.

Dans la partie php de mon fichier j'ai remplacé data.json par core.json, supprimé l'entête html.

J'ai créé une page de type module code pointant vers le script php.

Le gestionnaire de fichier a placé mon fichier recherche.php dans un dossier code, j'ai mis dans ce dossier une copie de core.json.

J'ai créé un formulaire sur la page d'accueil qui pointe vers la page contenant le module code.

 

La page recherche.php s'ouvre bien ( et c'est vrai qu'à l'intérieur du site c'est plus fun) mais le mot clef (ou phrase clef) ne passe pas, la page php reçoit une chaîne vide. Bref je n'arrive pas à passer le contenu du formulaire vers le script php.

 

Plus un truc bizarre : quand je suis connecté et que je test la recherche, la page contenant le module code s'ouvre en mode édtition au lieu de s'exécuter.

 

Merci pour strip-tags.php, j'ai réinventé la roulette....

 

Ce module code ouvre de superbes perspectives mais soit je ne sais pas m'en servir, soit il y a un bug.

 

A suivre, mais je vais être absent 15 jours

 

Ok je vais contrôler le fonctionnement du module code.
Il y a peut-être d'autres optimisation dans ton code (comme apr exemple éviter de travailler sur une copie de code), et je me demande d'ailleurs si ce n'est pas l'occasion d'un nouveau module.

Modifié par cybertaf

Partager ce message


Lien à poster
Partager sur d’autres sites

Tout fonctionne  très bien avec une V9 💖  !

 

  1. Télécharger l'archive et la décompacter dans source, il y aura un dossier code.
  2. Copier le core.json dans ce même dossier (oui je sais ce n'est pas glop mais je n'ai pas touché au code)
  3. Créer une nouvelle page module code et sélectionner search.php dans le dossier code
  4. Valider puis enregistrer,
  5. se déconnecter
  6. et enjoy :
    2019-02-07_19h20_17.thumb.png.c396281d63ac8068fd5668384e97695f.png
     

 

Je suis bien content de cet exemple mon cher @sylvainlelievre car il me donne l'occasion de mettre en pratique ce nouveau module qui était passé inaperçu à ce jour.

 

Je vais me permettre d'améliorer ton code et de te proposer une version clean que tu pourras publier dans téléchargement.

Et pourquoi pas un module Rechercher ???  si tu veux bosser dessus, je te filerai un coup de main.

 

 

 

code.zip

2019-02-07_19h20_08.png

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour Cybertaf,

 

Merci pour ta réponse, ça marche nickel et ça prouve en effet le bien fondé de ce nouveau module code, qui va ouvrir des possibilités de développement.

Entretemps j'étais arrivé au même résultat mais en plaçant le formulaire et le script de recherche dans la même page (voir pièce jointe). ça revient au même résultat mais ta solution est plus structurée (il me restait à recharger les feuilles de style).

 

Pour aller plus loin au niveau du module code : ne pourrait-on pas éviter de l'ouvrir dans un iframe ? on perd les mises en forme du site et puis ces ascenseurs !... +  il y a  la nécessité d'être déconnecté pour activer les pages associées à un module code (sinon on passe en page edit).

 

Pour le module recherche, si c'est dans mes possibilités, pourquoi pas, mais là je vais être absent 15 jours.

 

Merci @cybertaf

Et encore bravo pour ce gros travail de développement de la version 9 !

recherche_version9.php

Partager ce message


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

Bonjour Cybertaf,

 

Merci pour ta réponse, ça marche nickel et ça prouve en effet le bien fondé de ce nouveau module code, qui va ouvrir des possibilités de développement.

Entretemps j'étais arrivé au même résultat mais en plaçant le formulaire et le script de recherche dans la même page (voir pièce jointe). ça revient au même résultat mais ta solution est plus structurée (il me restait à recharger les feuilles de style).

 

Pour aller plus loin au niveau du module code : ne pourrait-on pas éviter de l'ouvrir dans un iframe ? on perd les mises en forme du site et puis ces ascenseurs !... +  il y a  la nécessité d'être déconnecté pour activer les pages associées à un module code (sinon on passe en page edit).

 

Pour le module recherche, si c'est dans mes possibilités, pourquoi pas, mais là je vais être absent 15 jours.

 

Merci @cybertaf

Et encore bravo pour ce gros travail de développement de la version 9 !

recherche_version9.php

 

Honnêtement, je n'ai pas trouvé la possibilité d'exécuter le module dans  en-dehors un iframe.

Et puis le module code peut poser des problèmes de sécurité, je ne pense pas qu'il sera distribué dans la version grand publique. En tout cas sans avoir vérifié les droits.
C'est aussi pourquoi je pense qu'il faudrait plutôt un module recherche spécifique.

 

Modifié par cybertaf

Partager ce message


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

Actuellement un modulecode s'affiche dans un Iframe (c'est codé dans module/code/code.php), c'est ce que j'aurais aimé éviter, si possible...

Merci @cybertaf

🙂 je viens d'éditer mon post précédent, en-dehors je ne sais pas encore faire proprement.

Partager ce message


Lien à poster
Partager sur d’autres sites
Le 08/02/2019 à 11:15, sylvainlelievre a dit :

Actuellement un modulecode s'affiche dans un Iframe (c'est codé dans module/code/code.php), c'est ce que j'aurais aimé éviter, si possible...

Merci @cybertaf

 

Je n'y connais rien, mais je me suis laissé dire que la balise <object> conviendrait mieux qu'une <iframe>. Merci de ne pas tirer sur le pianiste ! 

Partager ce message


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

Je n'y connais rien, mais je me suis laissé dire que la balise <object> conviendrait mieux qu'une <iframe>. Merci de ne pas tirer sur le pianiste ! 

lol

object est pour le multimédia 😉

Partager ce message


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

object est pour le multimédia 😉

 

C'est qu'est-ce que je croyais aussi avant que @creatifmen me prouve le contraire en intégrant un explorateur de fichiers directement dans une page de Zwii. Je n'ai malheureusement plus de copies d'écran, mais c'était bien mieux du point de vue de la mise en page.

Partager ce message


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

 

C'est qu'est-ce que je croyais aussi avant que @creatifmen me prouve le contraire en intégrant un explorateur de fichiers directement dans une page de Zwii. Je n'ai malheureusement plus de copies d'écran, mais c'était bien mieux du point de vue de la mise en page. 

Ah bon ? C'est dommage qu'il ne soit plus parmi nous..

A explorer cette idée, je sens que le module code va renaitre de ses cendres.

Partager ce message


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

C'est qu'est-ce que je croyais aussi avant que

 et je confirme si je puis me permettre le fait, on peut se passer des balises iframe avec la fonction object (valable aussi pour afficher dans une page n'importe quoi y compris des vidéos)

 

Le code de base à employer et celui ci:

Pour le cas où l'on veut afficher dans la page un document au format pdf

<object data="mypdf.pdf" type="application/pdf"
        width="800" height="1200" typemustmatch>
  <p>Vous ne possédez pas de greffon PDF, mais vous pouvez <a href="myfile.pdf">télécharger le fichier PDF.</a></p>
</object>

Il suffit alors de renseigner l'adresse du dit fichier dans le data="adresse-de-mon-fichier.Comment.pdf"   ainsi que dans le lien donné en dessous pour télécharger le fichier au cas où...

 

Et l'on obtient ceci (dans une V9.0;00 de dev)

c1.thumb.png.10c58615027271b56d248f3f3ff1de8c.png

 

code source dans le "tinymce" reanié pour mon propre gout personnel

c2.png.0753d2a86e59aae3afb1b067ba262063.png

  et résultat visble directement ici:

Vous pouvez ainsi lire directement le fichier pdf dans la page en question;

 

http://www.desforges-roger.fr/Z9a/page-code

 

Si cela peut aider.

 

Partager ce message


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

Ah bon ? C'est dommage qu'il ne soit plus parmi nous..

A explorer cette idée, je sens que le module code va renaitre de ses cendres.

 

peut être reviendra il un jour, en tout cas il est possible d'essayer de reproduire ce module sous une autre forme (la fonction "object" en étant une) et ainsi produire ce que l'on veut y comùpris un module de recherche dans le zwii qui ne s'affiche pas dans une iframe comme le souhaiterait le créateur de ce topic sylvainlelievre;

 

Pour ma part sur un site de prod je me sers d'un autre système de recherche et adapté dans son design au zwii où je l'ai implémenté. Il s'ouvre dans une page et affiche les résultats de recherche dans la même page.

 

Je l'utilisais déjà par le passé car à l'époque on ne trouvait pas facilement de moteur de recherche àç intégrer à un cms et ma fois, ce même "petit truc" marche toujours aujhourd'hui (dans toutes les version du cms produites et à venir).

 

Mais il est certain que les puristes préfère utiliser un moteur de recherche interne (ce qui est mon cas) mais je n'ai pas encore trouvé le bon fichier sur le git ou ailleurs qui va bien pour le faire; et j'en ai fait des essais depuis que notre ami à donner ses code pour ce fameux module à intégrer au zwii.

 

Pour info (je sais que beaucoup n'aime pas) je me suis servis de mon compte chez google et leur api disponibles pour réaliser mon truc adapté aux version actuelles du zwii.

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Est-ce qu'il possible d'intégrer du code avec cette fonction ? J'avoue ne jamais y avoir pensé.

Partager ce message


Lien à poster
Partager sur d’autres sites

Oui je le pense car pour afficher de nos jours n'importe quoi dans un cms, et bien les codes ont beaucoup évoluer (surtout pour le html4 et sa récente version html5) sans compter que nos navigateurs web ont eux aussi fait de sacré pas en avant pour déchiffrer quoi que ce soit sur la toile.

Même moi je reprends mes vieux codes pour les adapter aux standards actuels et parfois bien je reste éblouis devant le résultat obtenu;

Ce que je croyais impossible l'est encore plus facilement réalisable maintenant.

 

Là je vais tenter d'incorporer un truc dans les modèle de templates du tinymce pour voir si celui ci m'affiche bien le code voulu.

l'une de mes base de références se trouve ici si tu veux y jeter un oeil, la fondation Mozilla est une sacrée ressource d'astuces et de code en tout genre pour les développeurs.

https://developer.mozilla.org/en-US/

 

Là tu as le lien qui ramène à l'exemple que j'ai donné au dessus..

https://developer.mozilla.org/fr/docs/Apprendre/HTML/Multimedia_and_embedding/Other_embedding_technologies

 

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Tout à fait Thispy, ce n'est plus responsif car dans l'exemple donné et avec le lien qui envoie vers le site je me suis servi d'un fichier PDF à aficher dans la page. Et t'avouer qu'en pluys le but nétait pas de montrer ce fameux fichier pdf "responsivement" adapté à tout type de matériel mais concernait bien la possibilité de mettre autre chose qque des iframes (le cas c'est une balise object) mais...

 

En ajoutant donc lors de la rédaction qui affichera ce fameux fichier ceci en code source dans l'éditeur de tinymce une largeur en % et une hauteur que tu fixe selon ta volonté

<p>Aficher n'importe quoi dans une page en remplacant iframe par object...</p>
<p><object data="/Z9a/site/file/source/documents/Comment.pdf" type="application/pdf" typemustmatch="" width="100%" height="600"> <p>Vous ne possédez pas de greffon PDF, mais vous pouvez <a href="http://www.desforges-roger.fr/Z9a/site/file/source/documents/Comment.pdf">télécharger le fichier PDF.</a></p> </object></p>

 à la place de la hauteur/largeur fixée dans qui elles sont fixes en largeur et hauteu

width="800" height="1200"

  Tu obtiens alors un fichier pdf parfaitement lisible même responsivement. (par contre faudra avoir de bon yeux pour lire l'intérieur du texte sur un petit affichage)

 

Je viens de faire ceci à l'instant  pour parfaire l'exemple avec la balise object, voir ici bien enten du pour un résultat avec fichier pdf (c'est valable pour n'importe quoi d'ailleurs, vidéos y compris comme aussi des images) et si l'on a choisi un fichier pdf large, il y a meme le  slider en bas pour faire coulisser la page du pdf;

 

http://www.desforges-roger.fr/Z9a/page-code

 

Je ne sais pour pour ce qui est de google chrome car je n'ai pas de greffon pdf intégré dedans...en tout tcas sous firefox c'est totalement responsif mon exemple;

 

Aprés il ne faut pas oublier que dess réglages basiques se changent aussi  lors de la rédaction de tels exemples dans l'éditeur de texte.

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.


  • Contenu similaire

    • Par wilo
      Salut la communauté,
      je viens de découvrir un bug assez embêtant sur la version 8.0.1 de Zwii.
      Ca m'est arrivé 2 fois maintenant et la première fois je m'en suis rendu compte lorsque j'ai remarqué que mon site avant disparu des indexes de Google. Lors de la sauvegarde automatique, le fichier data.json ce vide totalement et contient uniquement encore :
      {"core":{"lastClearTmp":1491516000,"lastBackup":1491516000}} Le plus embêtant c'est que ça ne se produit pas à chaque fois et aujourd'hui ça m'est arrivé après 3h de boulot donc pas de sauvegardes.
×
×
  • Créer...