Aller au contenu
Support de Zwii et Yocto
  • 0
windoxs@free.fr

ajout de fonctionnalités

Question

Bonjour,

tout d'abord un énorme merci pour ce CMS que je trouve très (très) convivial et simple d'utilisation.

 

Les données des blogs (voir du site) étant gérées dans un fichier JSON, je me demandais si quelqu'un parmi vous avait développé un moteur de recherche interne au site.

Par exemple, si je cherche un mot en particulier, que le site puisse me remonter toutes ses pages internes où le mot / l'expression apparaît.

 

autre point pour l'impression des articles ou leur téléchargement en PDF, est-ce que quelqu'un a un petit bout de code qui pourrait se glisser en en-tête ou pied des articles pour permettre d'imprimer/télécharger.

 

Merci d'avance de vos réponses,

Franck

Partager ce message


Lien à poster
Partager sur d’autres sites

14 réponses à cette question

Messages recommandés

  • 0

et aussi tant que j'y pense 🙂 comme il y a la possibilité d'intégrer des bouts de code (JS / PHP / HTML...) depuis l'éditeur pour les montrer dans des articles, une petite fonction automatique en présence d'une balise <PRE> de type "Copy to Clipboard" serait la bienvenue.

bonne journée à tous,

Partager ce message


Lien à poster
Partager sur d’autres sites
  • 0

Bonjour,

 

J'ai commencé à bricoler un moteur de recherche interne au site, qui pour le moment donne ça (voir image jointe).

J'ai installé un formulaire POST sur une page Zwii et j'utilise le fichier data.json pour rechercher une occurence avec un mot ou une phrase clef.

 

Voici le code de la page php associée au formulaire :

 

html  lang="fr">
<head>
    <meta charset="utf-8">
    <title>Recherche</title>            
    <link rel="stylesheet" href="https://www.................../site/data/theme.css">
    <link rel="stylesheet" href="https://www................../site/data/custom.css">
</head>
<body style="background-image:url(loupe.jpg);">

<?php
// Recherche des pages contenant un mot clef

// j'utilise une copie du fichier data.json placée manuellement dans le répertoire de ce fichier, car avec .htaccess impossible d'utiliser copy
// Lire le fichier json
$json_source = file_get_contents('data.json');

// Décode le JSON
$json_data = json_decode($json_source);

// Récupération du mot clef
$motclef=$_POST['motclef'];
echo '<h1>R&eacute;sultats de la recherche avec le mot clef : '.$motclef.'<br/>'.'<br/></h1>';
if ($motclef!="")
{

// Déclaration des noms de page du site en attendant mieux, minuscules et l'espace remplacé par un tiret
    $pages=array("accueil","contact","photos","ca","vivre-ici","nos-digues","adherents","journal-de-bord","zone-rouge","en-bref","mentions");
    $taille=count($pages);

// Recherche et affichage des occurences

    for ($i = 0; $i < $taille; $i++) {
        $contenu = $json_data->{"page"}->{$pages[$i]}->{"content"};
        $occu = stristr($contenu,$motclef);
        if ($occu!="")
        {
            echo '<p>Mot clef trouv&eacute; dans la page : <a href="/?'.$pages[$i].'">'.$pages[$i].'</a><br/><br/></p>';
        }
    }
}

// A faire pour les modules blog : $json_data->{"module"}->{$blog[$i]}->{$article[$j]}->{"content"}
// News et pour les pages enfant...

?>
</body></html>

 

voici le code source du formulaire :

<form action="/test/recherche/lirejson.php" method="post">Recherche : <input name="motclef" size="10" type="text" /> <input type="submit" value="valider" /></form>

 

 

recherche.jpg

Partager ce message


Lien à poster
Partager sur d’autres sites
  • 0

merci pour la réponse. Effectivement, le fait de lister les pages dans la requête c'est chaud, en terme de maintenabilité / évolutivité, ça nécessite de penser à ajouter la page systématiquement.

Ce qui aurait été cool, c'est que les résultants apparaissent sur une page ayant le rendu de la page blog, ou chaque bloc est une page qui matche avec la recherche.

je vais tester ça ce week-end,

merci

Partager ce message


Lien à poster
Partager sur d’autres sites
  • 0

Bonjour,

J'ai fait évoluer ma page de recherche, elle trouve maintenant automatiquement les chemins des contenus :

 

<html  lang="fr">
<head>
    <meta charset="utf-8">
    <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
/* Recherche des pages contenant un mot ou une phrase clef à partir du fichier data.json

Limitation : le mot ou la phrase clef est également détecté dans les liens, les images de la page, dans tout le code source de la page
A faire : déterminer et afficher le nombre d'occurences dans la page

Sont regroupés dans un dossier ce fichier recherche.php, loupe.jpg, data.json (copie)
Un formulaire POST placé dans une des pages ZWII pointe sur ce fichier
<form action="/test/recherche/recherche.php" method="post">Recherche : <input name="motclef" size="10" type="text" />
<input type="submit" value="valider" /></form>
*/

// 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
$motclef=$_POST['motclef'];
echo '<h1>R&eacute;sultats de la recherche avec le mot clef : '.$motclef.'<br/>'.'<br/></h1>';
if ($motclef!="")
{
    foreach ($array as $key1 => $value1)
    {
        // Déterminer le chemin de tous les contenus (content) dans page ou module
        //echo $key1.' : '.$value1.'<br/>';
        if (($key1=='page' || $key1=='module') && is_array($value1) )
        {
            foreach ($value1 as $key2 => $value2)
            {
                //echo $key1.' * '.$key2.' * '.$value2.'<br/>';
                if (is_array($value2))
                {
                        foreach ($value2 as $key3 => $value3)
                        {
                            //echo $key1.' - '.$key2.' - '.$key3.' - '.$value3.'<br/>';
                            if ($key3=="content" && is_string($value3))
                            {
                                // le contenu à explorer est dans $value3, le nom de la page est $key2
                                // Recherche et affichage des occurences
                                $occu = stristr($value3,$motclef);
                                if ($occu!="")
                                {
                                    echo '<p>Mot clef trouv&eacute; dans la page : <a href="/?'.$key2.'">'.$key2.'</a><br/><br/></p>';
                                }
                            }
                            elseif ($key1 == "module" && is_array($value3))
                            {
                                foreach ($value3 as $key4 => $value4)
                                {    
                                //echo $key1.' ; '.$key2.' ; '.$key3.' ; '.$key4.' ; '.$value4.'<br/>';
                                    if ($key4=="content" && is_string($value4) )
                                    {
                                        // le contenu à explorer est dans $value4, le nom du module page est $key2/$key3
                                        // Recherche et affichage des occurences
                                        $occu = stristr($value4,$motclef);
                                        if ($occu!="")
                                        {
                                            echo '<p>Mot clef trouv&eacute; dans la page : <a href="/?'.$key2.'/'.$key3.'">'.$key2.'/'.$key3.'</a><br/><br/></p>';
                                        }
                                    }                    
                                }
                            }            
                        }
                }
    
            }
        }
    }


    
}


?>
</body></html>

 

 

A suivre...

loupe.jpg

recherche.php

Partager ce message


Lien à poster
Partager sur d’autres sites
  • 0

slt Sylvain,

j'ai testé ton code. ça fonctionne bien de mon côté pour trouver des pages mais par contre, quand je clique sur l'URL proposée, ça pointe à la racine, ça ne tient pas compte du chemin réel vers l'article. As-tu une idée du ce qui bug ou est-ce le comportement attendu ?

effectivement, dommage pour le blocage htaccess (erreur 403) si on veut parser le json. J'ai essayé de filouter pour éviter la création d'une copie mais malheureusement, rien n'y fait, file_get_contents ne veut rien savoir.

a+

Partager ce message


Lien à poster
Partager sur d’autres sites
  • 0

Salut @windoxs@free.fr et @sylvainlelievre !

Pour l'url, je n'ai pas le temps d'essayer — d'autant que je suis sur d'autres choses en ce moment — mais la formule miracle, qui vaut pour les fichiers css, les scripts... se trouve dans "core/layout/main.php"

<link rel="stylesheet" href="<?php echo helper::baseUrl(false); ?>core/layout/common.css">

Envoyez le retour. 🙂

Partager ce message


Lien à poster
Partager sur d’autres sites
  • 0

en fait, dans la page qui se nomme "cachée" dans l'installation standard, j'ai ajouter ton form  de la manière suivante :


<div class="col6">
<form action="/ReleaseNotes/recherche.php" method="post">Recherche : <input name="motclef" size="10" type="text" /> <input type="submit" value="valider" />&nbsp;</form>

 

quand je saisi une recherche dans la zone, cela exécute bien ta page recherche.php avec le bon résultat. Par contre, quand je clique sur l'un des 2 résultats, l'url de la page est : http://localhost/?cachee

cela signifie qu'il a bien détecté que le terme recherché était sur la page nommée "cachée" mais par contre l'url n'est pas reconstruite.

J'avais tenté l'astuce de PeterRabbit mais sans franc succès car je n'ai pas l'impression que cela fonctionnait dans le cas présent (j'avais ajouté base Url dans le code de la page recherche). de ton côté @Sylain comment est trouvée / restituée la racine pour l'URL ?

<?php echo helper::baseUrl(false); ?>

pour info, je viens de retester et j'ai probablement d'autres problèmes :

1 - pour un mot dont je sais qu'il est présent dans 4 ou 5 articles, seuls 2 résultats sont remontés (donc sûrement des blocages que je vois pas)

2 - dans la liste des 2 résultats, la racine de l'url proposée diffère entre les 2 alors qu'elle devrait être similaire.

 

je vais continuer d'enquêter

 

Partager ce message


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

@windoxs@free.fr @sylvainlelievre Je n'avais pas compris que c'était une conversation privée. Désolé, je m'échappe. 😶

 

PS : Oops. J'avais lu trop vite. Shame on me😶

 

Sorry, @windoxs@free.fr ! Je pensais que le problème était lié à la formulation de l'adresse et j'ai lu en diagonale. Depuis, j'ai mis un PS. Je ne devrais pas courir plusieurs lièvres à la fois. 🙂

Je crois me souvenir qu'un ancien membre avait mis au point un moteur de recherche pour la 8, mais je n'en ai pas trouvé trace avec celui du forum. Voulez-vous que je le contacte ?

 

De plus, si j'en crois ton pseudo, tes problèmes sont peut-être liés aux restrictions de Free en matière de réécriture des URLs dans les sites persos.

Modifié par PeterRabbit

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 à cette question…

×   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...