Gestion des menus dans PluXml
Je n'ai rien vu dans la doc mais j'ai l'impression que la gestion des menus se fait directement dans le HTML ?
Je me trompe ? ou il y a un plugin pour cela ?
Mon but c'est surtout de permettre au quidam de gérer ses menus et pas simplement un développeur.
Mots clés:
0
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Du coup, j'ai crée un plugin "vite fait" qui marche assez bien.
Je peux créer différents menus.
Puis au choix : Sélectionner des pages, des catégories, des tags ou des urls libres.
Le hook est donné dans le plugin qu'il faut intégrer manuellement dans le header, le footer ou vous voulez en fait.
Je vais le tester un peu plus et je le mettrai sur Gitlab, si ça intéresse des gens ?
Bonjour,
oui je veux bien regarder ce plugin
Je posterais ici le lien. Par contre le hook de sortie est à insérer directement dans le template.
Du coup, je me demande si en dehors de mon thème c'est vraiment pratique ?
D'autant que je viens de m'apercevoir qu'il y a déjà un système automatique de menu avec les articles et les catégories.
D'ailleurs, je ne crois pas avoir vu le chapitre "MENU" dans la DOC. Sauf erreur de ma part.
PluXml a une gestion de menus qui conveint presque à tout le monde :
Tu peux trouver quelques exemple de thèmes avec le lien suivant :
https://www.kazimentou.fr/repo/index.php?page=themes
Accès à mon dépôt de plugins et thèmes
installe PluXml plus vite que ton ombre avec kzInstall2
Dans mes thèmes j'aime bien mettre différents menus (pour dégager le menu principal notamment).
Un menu dans le footer par exemple, pour les mentions légales, plan du site (RGAA) et autres.
Du coup, le système PluXml automatique ne me suffira pas. Mais j'entends qu'il suffit au plus grand nombre.
Pouvoir mettre des URL aussi c'est toujours utiles pour des sites de réservations par exemple.
Les menus déroulants à partir des catégories méritent d'etre améliorés :
J'ai utilisé l'IA (Mistral l'outil français), pour créer une sidebar qui répond à mon besoin
Vous pouvez voir le résultat sur nom site https://nobles.bodieu.fr/
avec le fichier sidebar.php :
<?php if(!defined('PLX_ROOT')) exit; ?> <aside class="main-aside"> <center> <?php eval($plxShow->callHook('log')); ?></Center> <?php $choix = []; if (isset($_GET['liste']) && is_array($_GET['liste'])) { $choix = array_values(array_intersect(['Famille','Commune','Lieu','Récents'], $_GET['liste'])); } ?> <form method="get" action="" id="form-listes"> <p><strong>Choisissez une liste :</strong></p> <div class="boite-choix"> <label><input type="checkbox" name="liste[]" value="Famille" <?= in_array('Famille', $choix) ? 'checked' : '' ?>> Famille</label> <label><input type="checkbox" name="liste[]" value="Commune" <?= in_array('Commune', $choix) ? 'checked' : '' ?>> Commune</label> <label><input type="checkbox" name="liste[]" value="Lieu" <?= in_array('Lieu', $choix) ? 'checked' : '' ?>> Lieu</label> <label><input type="checkbox" name="liste[]" value="Récents" <?= in_array('Récents', $choix) ? 'checked' : '' ?>> Récents</label> </div> </form> <style> .boite-choix { height: calc(5* 1.9em); overflow-y: auto; border: 1px solid #aaa; padding: 0.2em 0.4em; margin-bottom: 0.5em; background: #fff; line-height: 1.9em; } .boite-choix label { display: block; cursor: pointer; white-space: nowrap; color:black ; } /* Fenêtre à ascenseur pour les listes d'articles */ .fenetre-liste { max-height: 16em; /* hauteur visible avant défilement */ overflow-y: auto; /* l'ascenseur apparaît si besoin */ border: 1px solid #aaa; padding: 0.3em 0.5em; margin-bottom: 1em; background: #fff; } .fenetre-liste ul { margin: 0; padding-left: 1.2em; } </style> <script> (function() { var form = document.getElementById('form-listes'); if (!form) return; form.addEventListener('change', function() { form.submit(); }); })(); </script> <?php if (!empty($choix)): ?> <?php if (in_array('Famille', $choix)): ?> <h3>Liste des familles</h3> <div class="fenetre-liste"> <ul class="nowrap"> <?php $plxShow->lastArtList('<li class="#art_status"><a href="#art_url" title="#art_title">#art_title</a></li>', 999, 2, '', 'alpha'); ?> </ul> </div> <?php endif; ?> <?php if (in_array('Commune', $choix)): ?> <h3>Liste des Communes</h3> <div class="fenetre-liste"> <ul class="nowrap"> <?php $plxShow->lastArtList('<li class="#art_status"><a href="#art_url" title="#art_title">#art_title</a></li>', 999, 3, '', 'alpha'); ?> </ul> </div> <?php endif; ?> <?php if (in_array('Lieu', $choix)): ?> <h3>Liste des lieux</h3> <div class="fenetre-liste"> <ul class="nowrap"> <?php $plxShow->lastArtList('<li class="#art_status"><a href="#art_url" title="#art_title">#art_title</a></li>', 999, 4, '', 'alpha'); ?> </ul> </div> <?php endif; ?> <?php if (in_array('Récents', $choix)): ?> <h3>Récents</h3> <div class="fenetre-liste"> <ul class="nowrap"> <?php $plxShow->lastArtList('<li><a class="#art_status" href="#art_url">#art_title</a></li>', 999); ?> </ul> </div> <?php endif; ?> <?php endif; ?> <a href="https://cegenceb.asso.fr/"><img src="<?php $plxShow->template(); ?>/img/logo_CEGENCEB_2022.png" alt="logo_CEGENCEB_2022.png" width=50%/></a> </aside >Mélanger du CSS, du HTLM et du PHP via du JS, je me garderais d'appeler ça une amélioration.
IA style quoi...
C'est une tambouille qui marche mais ce n'est pas super orthodoxe !
OK. Ce n'est qu'une maquette opérationnelle. Il conviendrait de réécrire ce programme pour avoir en page statique, un menu à 2 niveaux avec ascenceurs....
Merci à Mistral IA
pour avoir résolu la gestion d'un menu pour avoir les articles de catégories prédéfinies.
Le IA français semble être très à l'aise avec Pluxml.
Il vous faut :
écrire dans les pages statiques la liste des catégories souhaitées et le n° d'ordre sous la forme
Famille = 002
Lieu = 003
Commune = 004
(le numéro 001 n'est pas pris en compte !!!)
Choisisser le template : static-categorie.php
Il faut à préalable charger le fichier static-categorie.php dans le dossier de votre theme :
<?php if(!defined('PLX_ROOT')) { exit; } include 'header.php'; ob_start(); # --- Les listes sont définies dans le CONTENU de la page statique --- # Dans l'admin PluXml (Pages statiques > votre page), le champ « Contenu » # doit contenir une ligne par liste, au format : # libellé = identifiant de catégorie # Exemple : # Famille = 002 # Commune = 003 # Lieu = 004 # (les autres lignes du contenu sont ignorées) # On récupère le contenu de la page statique ob_start(); $plxShow->staticContent(); $contenu = ob_get_clean(); # On en extrait les lignes « libellé = identifiant » valides $cats = $plxShow->plxMotor->aCats; $categorie = array(); foreach (preg_split('/\r\n|\r|\n/', trim(strip_tags($contenu))) as $ligne) { $ligne = trim($ligne); if ($ligne === '' || strpos($ligne, '=') === false) { continue; } list($libelle, $id) = array_map('trim', explode('=', $ligne, 2)); if ($libelle !== '' && isset($cats[$id])) { $categorie[$id] = $libelle; } } # Choix reçu du formulaire (la valeur du bouton radio = identifiant réel) # On lit $_POST : le formulaire passe en POST pour ne pas écraser le # paramètre d'URL staticX/... (la réécriture d'URL étant désactivée) $choix = isset($_POST['categorie']) ? $_POST['categorie'] : (isset($_GET['categorie']) ? $_GET['categorie'] : ''); if ($choix !== '' && !isset($categorie[$choix])) { $choix = ''; } ?> <article class="static" id="static-page-<?php echo $plxShow->staticId(); ?>"> <form method="post" action="" id="form-listes"> <p><strong>Choisissez une liste :</strong></p> <div class="boite-choix"> <?php foreach ($categorie as $id => $nom) { ?> <label><input type="radio" name="categorie" value="<?php echo $id; ?>"<?php if ($choix === (string)$id) echo ' checked'; ?>> <?php echo $nom; ?></label> <?php } ?> </div> </form> <?php if ($choix !== '') : ?> <h3>Liste <= <?php echo $categorie[$choix]; ?></h3> <div class="fenetre-liste"> <ul class="nowrap"> <?php $plxShow->lastArtList('<li class="#art_status"><a href="#art_url" title="#art_title">#art_title</a></li>', 999, $choix, '', 'alpha'); ?> </ul> </div> <?php endif; ?> </article> <?php include 'footer.php'; ?> <script> (function() { var form = document.getElementById('form-listes'); if (!form) return; form.addEventListener('change', function() { form.submit(); }); })(); </script>