show_menu2, version 4.9x
Show_Menu2 est un extrait de code pour le créateur de site Web CMS. Depuis WebsiteBaker 2.7, il est inclus avec le CMS.
L’ancienne fonction show_menu est complètement remplacée et étendue par show_menu2. Toutes les données nécessaires à la création du menu sont générées par une seule requête de base de données. Par des possibilités d’ajustement étendues du code HTML généré tous les types de menus possibles (listes, chapelure, plans du site, etc.) peuvent être générés.
- Installation
- Utilisation de Show_Menu2
- FAQ
- Fonction
- Sortie HTML
- Paramètre
- Options avancées
- Chaînes de format
- Mise en forme conditionnelle
- Formateur
INSTALLATIONup
Puisque show_menu2 est généralement présent dans WebsiteBaker, aucune installation n’est requise. Si, contrairement aux attentes, il n’existe pas, vous pouvez le télécharger ici.
Utilisation de SHOW_MENU2up
Pour utiliser show_menu2, vous devez modifier le modèle où vous souhaitez que le menu apparaisse. Remarque : Si les anciens appels de menu sont remplacés, les nouveaux paramètres correspondants dont show_menu2 a besoin doivent également être utilisés.
Dans la plupart des cas, l’appel standard avec au moins 4 paramètres de show_menu2 est suffisant. Dans ce cas, les valeurs par défaut sont utilisées, cela crée un menu qui affiche la page en cours et les sous-pages de la page en cours:
show_menu2(0, SM2_ROOT, SM2_START, SM2_TRIM);
Remarque: l’appel à show_menu2 est PHP et doit normalement être entouré de caractères de code PHP (sauf si l’appel est déjà dans le code PHP):
<?php show_menu2(0, SM2_ROOT, SM2_START, SM2_TRIM); ?>
Ce menu par défaut crée déjà un menu complet sur une base de liste avec plusieurs classes qui permettent un formatage facile à l’aide de CSS. Par exemple, la classe « menu-current » est ajoutée à la balise < li > de l’élément de menu actuel. De plus, chaque élément de menu des sous-éléments contient la classe « menu-expand ». Cela permet de créer des règles CSS très différenciées pour chaque élément de menu.
Par exemple:
li.menu-expand { font-weight: bold; }li.menu-current { background: red; }
La section « Sortie HTML » contient une description détaillée des classes affectées à quel élément. En utilisant différents paramètres dans l’appel de fonction show_menu2, il est également possible de créer des structures de menus assez étendues et différentes. Par exemple, pour afficher uniquement les éléments de menu du niveau supérieur de la structure de menu, vous pouvez utiliser l’appel suivant:
show_menu2(0, SM2_ROOT, SM2_START, SM2_TRIM);
Ou, par exemple, pour afficher jusqu’à deux sous-niveaux de la page en cours:
show_menu2(0, SM2_CURR+1, SM2_CURR+2, SM2_TRIM);
Il y a beaucoup de possibilités pour créer différentes structures de menus. De nombreux exemples peuvent être trouvés sur le site de démonstration: KLICK
FAQup
Q: Je ne suis pas un programmeur. N’y a-t-il pas de documentation plus simple ?
D: Non, car c’est déjà la documentation simple.
Q: Comment puis-je créer un menu déroulant?
R: Cela n’a rien à voir avec show_menu2. Pour créer un menu déroulant, il vous suffit d’ajuster le code CSS du modèle respectif. Les ajustements nécessaires peuvent être trouvés par exemple dans le modèle « allcss2 » du référentiel Addon WebsiteBaker -> https://addon.websitebaker.org/
Q : Pourquoi le menu disparaît-il après que j’ai utilisé la fonction de recherche dans une page Web multilingue ?
R : Les lignes nécessaires sont manquantes dans le modèle utilisé :
<input type="hidden" name="referrer" value="" />
<input type="hidden" name="referrer" value="<?php echo defined('REFERRER_ID')?REFERRER_ID:PAGE_ID;?>" />
Q: Multilingue? Ça a l’air génial. Comment faites-vous?
D: https://help.websitebaker.org/en/designerguide/multilingual-websites.php
Q : Chaque fois qu’une page est appelée, SM2 génère le message d’avertissement suivant :
« erreur show_menu2 :aaOptions n’est pas valide. Aucun drapeau du groupe 1 fourni! »
A: Les mauvaises valeurs ou un mauvais nombre de valeurs ont été transmises à la fonction.
Voir la section PARAMÈTRES pour les valeurs d’indicateur correctes à transmettre au paramètre $aOptions.
Q: Comment utiliser une classe/image/ couleur / widget différente pour chaque entrée d’un menu?
A: Utilisez la chaîne de format dans la chaîneaaItemOpen. Créez une classe ou un identifiant unique pour chaque élément de menu, puis référencez cet élément dans votre CSS ou Javascript pour faire ce que vous voulez.
Pour ajouter une classe unique pour chaque élément de menu (ou similaire):
"<li><a href="" target="" class=" p"></a>"
… création d’éléments de menu comme…
<li><a href="/pages/foo/bar.php" target="_top" class="menu-top p45">Top Menu</a>
Référencez ceci dans votre CSS comme:
a.p45 { color: red; }
Pour ajouter un identifiant unique pour chaque élément de menu (ou similaire):
"<li><a href="" target="" class=""></a>"
… création d’éléments de menu comme…
<li><a href="/pages/foo/bar.php" target="_top" class="menu-top">Top Menu</a>
Référencez ceci dans votre CSS comme:
a#p45 { color: red; }
Notez que l’ID ne peut être utilisé que si ce menu est généré et affiché une seule fois sur la page (car les ID HTML doivent être uniques dans une page).
FUNCTIONup
L’appel complet et les valeurs de paramètre par défaut pour show_menu2 sont les suivants:
show_menu2( $aMenu = 0, $aStart = SM2_ROOT, $aMaxLevel = SM2_CURR+1, $aOptions = SM2_TRIM, $aItemOpen = '</a>', $aItemClose = '</li>', $aMenuOpen = '', $aMenuClose = '</ul>', $aTopItemOpen = false, $aTopMenuOpen = false);
La section « Paramètres » contient une description détaillée de chaque paramètre individuel.
Chaque paramètre doit être utilisé absolument correctement. Les règles suivantes peuvent vous aider:
aMenaMenu= 0 est la meilleure valeur dans la plupart des cas.
aStaStart doit être soit un ID de page, soit une valeur commençant par « SM2_ ».
aMaMaxLevel ne peut obtenir que des valeurs commençant par « SM2_ ».
aaOptions à l’exception de quelques cas particuliers, seules les valeurs commençant par « SM2_ » sont autorisées.
Tous les autres paramètres contiennent les balises (HTML) qui contrôlent la sortie du menu.
À partir deaaItemOpen, chaque paramètre peut recevoir la valeur false pour obtenir la valeur par défaut respective.
Cela peut être utilisé, par exemple, pour créer une liste numérotée, tandis que les valeurs par défaut sont toujours utilisées pour les éléments de menu individuels:
show_menu2(0, SM2_ROOT, SM2_ALL, SM2_ALL, false, false, '<ol>', '</ol>');
Remarque: jusqu’à includingaOptions inclus, tous les paramètres doivent être passés explicitement!
Sortie HTML
La sortie HTML dépend en grande partie des paramètres transmis à la fonction. Indépendamment de cela, les classes suivantes sont toujours utilisées pour chaque menu, les éléments de menu individuels pouvant également avoir plusieurs classes si nécessaire.
CLASSE | AFFECTATION |
---|---|
menu- top | Uniquement le premier élément de menu. |
menu – parent | Tout élément du menu principal. |
menu – current | Seul l’élément de menu de la page actuelle. |
menu – frères et sœurs | Tous les « frères et sœurs » de la page en cours. |
menu – enfant | Tout sous-menu de la page en cours. |
menu – développez | Tout menu comportant des sous-menus. |
menu-first | Le premier élément d’un menu ou d’un sous-menu. |
menu – last | Le dernier élément d’un menu ou d’un sous-menu. |
menu – N | Chaque élément de menu, où le N représente la profondeur de menu ABSOLUE, commençant par 0, de l’élément de menu respectif. Donc le niveau supérieur est toujours menu-0, le niveau suivant est menu-1, et ainsi de suite. |
menu-child-N | Chaque sous-menu des pages en cours, où le N représente la profondeur RELATIVE du sous-menu, en commençant par 0. |
Exemple de sortie HTML:
<ul class="menu-top menu-0"> <li class="menu-0 menu-first"> ... </li> <li class="menu-0 menu-expand menu-parent"> ... <ul class="menu-1"> <li class="menu-1 menu-expand menu-first"> ... <ul class="menu-2"> <li class="menu-2 menu-first"> ... <li class="menu-2 menu-last"> ... </ul> </li> <li class="menu-1 menu-expand menu-parent"> ... <ul class="menu-2"> <li class="menu-2 menu-expand menu-current menu-first"> ... ** CURRENT PAGE ** <ul class="menu-3"> <li class="menu-3 menu-child menu-child-0 menu-first"> ... <ul class="menu-4"> <li class="menu-4 menu-child menu-child-1 menu-first"> ... </li> <li class="menu-4 menu-child menu-child-1 menu-last"> ... </li> </ul> </li> <li class="menu-3 menu-child menu-child-0 menu-last"> ... </li> </ul> </li> <li class="menu-2 menu-sibling menu-last"> ... </li> </ul> </li> <li class="menu-1"> ... </li> <li class="menu-1 menu-expand menu-last"> ... <ul class="menu-2"> <li class="menu-2 menu-first menu-last"> ... </li> </ul> </li> </ul> </li> <li class="menu-0 menu-last"> ... </li> </ul>
PARAMETERup
aMenaMenu
aStaStart
SM2_ROOT + N
SM2_ROOT +1 Commence une couche en dessous de la couche supérieure
SM2_ROOT+2 Commence deux niveaux en dessous du niveau supérieur
SM2_CURR+N
SM2_CURR+1 Démarre un calque sous le calque actuel avec tous les sous-niveaux.
page_id
Tous les sous-menus de cette page sont affichés. (L’id de page peut être déterminé en éditant la page dans le backend d’administration, il sera affiché dans la barre d’adresse du navigateur: http://SITE/admin/pages/modify.php?page_id=35
$ aMaxLevel
commence à partir du niveau spécifié dansaStaStart, jusqu’au niveau spécifié ici.
SM2_ALL
SM2_CURR+N
SM2_CURR +3 Tous les sous-niveaux parent + courant + 3
SM2_START + N
Les niveaux sont affichés quel que soit le niveau sur lequel se trouve la page en cours.
SM2_START + 1 Niveau de départ + un niveau en dessous.
SM2_MAX+N
Les calques en dessous du niveau actuel ne sont pas affichés.
SM2_MAX +1 Le niveau de départ et un niveau en dessous.
$ aOptions
Par exemple, pour définir à la fois TRIM et PRETTY, utilisez :(SM2_TRIM|SM2_PRETTY).
GROUPE 1
——-
Un drapeau doit toujours être spécifié dans ce groupe. Ces indicateurs déterminent comment les éléments frères de l’arborescence des menus sont supprimés dans la sortie.
SM2_ALL
A-1 -> B-1 -> B-2 -> C-1 -> C-2 (CURRENT) -> D-1 -> D-2 -> C-3 A-2 -> B-3 -> B-4
SM2_TRIM
Tous les sous-menus d’éléments qui ne sont pas dans le chemin.
sont supprimés.
A-1 -> B-1 -> B-2 -> C-1 -> C-2 (CURRENT) -> D-1 -> D-2 -> C-3 A-2
SM2_CRUMB
et tous les éléments de menu qui y mènent.
A-1 -> B-2 -> C-2 (CURRENT)
SM2_SIBLING
A-1 -> B-2 -> C-1 -> C-2 (CURRENT) -> D-1 -> D-2 -> C-3
GROUPE 2
——-
Ces drapeaux sont facultatifs, ils peuvent être combinés en n’importe quel nombre.
SM2_NUMCLASS
SM2_ALLINFO
Cela entraîne une consommation de mémoire assez élevée et doit être
doit donc être utilisé avec prudence.
Cela signifie, par exemple, que les mots-clés, la description de la page et
toutes les autres informations disponibles qui ne sont normalement pas
peuvent être chargés.
Veuillez noter: cet indicateur doit être défini au PREMIER appel de schow_menu2
peut être utilisé pour l’ID de menu respectif, ou en conjonction avec le
avec SM2_NOCACHE, sinon cela n’a aucun effet.
SM2_NOCACHE
SM2_PRETTY
sous une forme lisible. Ceci est particulièrement utile lors du débogage de la sortie du menu.
SM2_BUFFER
SM2_CURRTREE
Seuls les éléments de menu de la branche de menu actuelle sont affichés.
Si nécessaire, ce drapeau peut être combiné avec n’importe quel drapeau du groupe 1.
SM2_ESCAPE
Cela peut être nécessaire pour les anciennes installations de WebsiteBaker.
pour générer une sortie HTML valide.
SM2_SHOWHIDDEN
Utilisez des pages privées pendant le temps où vous souhaitez que les pages soient masquées, sauf lorsqu’elles sont actives. Cependant, pour la compatibilité avec la version 4.8, fournissez cet indicateur pour permettre aux pages masquées de devenir visibles lorsqu’elles sont actives.
SM2_XHTML_STRICT
SM2_NO_TITLE
Pour ce paramètre, il existe également un mode étendu où les options sont passées en tant que tableau associatif. Consultez la section OPTIONS AVANCÉES pour plus de détails. Pour la plupart des applications, cependant, cela n’est PAS nécessaire.
$ aItemOpen
Si ce paramètre est défini sur false, la chaîne de format par défaut
‘</a >’ pour assurer la compatibilité avec la fonction standard de WebsiteBaker show_menu().
Étant donné que le formatage à l’aide de classes CSS est souvent plus facile lorsqu’il est appliqué à la balise <a >, il est recommandé d’utiliser la chaîne de format suivante: ‘< li > </a >’.
Ce paramètre peut également être utilisé comme instance d’une classe de formatage pour le menu. Une description plus détaillée peut être trouvée dans la section FORMATTER. Si un formateur est spécifié ici, tous les arguments aprèsaaItemOpen sont ignorés.
aaItemClose
Si ce paramètre est défini sur false, la valeur par défaut ‘</li >’ est utilisée.
aMenaMenuOpen
Si ce paramètre est défini sur false, la valeur par défaut » est utilisée.
aMenaMenuClose
Si ce paramètre est défini sur false, la valeur par défaut ‘</ul >’ est utilisée.
aTAu Sommeouvrez
aTAu sommet du menu Ouvrir
ADVANCED OPTIONSup
le paramètre $aOptions peut être utilisé de deux façons. Tout d’abord, comme décrit ci-dessus dans la section Paramètres, ce type devrait suffire pour la grande majorité des cas d’utilisation. Toutefois, pour pouvoir aborder les options spéciales dans des cas particuliers, les valeurs requises doivent être fournies sous forme de tableau associatif.
veuillez noter: les indicateurs SM2_ * sont également requis et doivent être transmis en tant que ‘flags’.
Cela définit un certain nombre de niveaux qui sont toujours affichés par rapport au niveau de menu défini dansaStaStart. Cela fait que l’indicateur SM2_TRIM est ignoré pour ces niveaux.
Pour utiliser ce tableau, il est recommandé de le créer d’abord, puis de fournir le paramètre $aOptions avec le tableau créé:
$options = array('flags' => (SM2_TRIM|...), 'notrim' => 1); show_menu2(0, SM2_ROOT, SM2_CURR+1, $options);
FORMAT STRINGSup
Les balises suivantes peuvent être utilisées dans les chaînes de format pour $aItemOpen et $aMenuOpen et doivent être remplacées par le texte correspondant.
< une balise > sans classe:
'<a href="" target="">' |
|
< une balise > avec classe:
'<a href="" target="" class="">' |
|
< balise li > avec classe:
'<li class="">' |
|
< étiquette ul > avec classe:
'<ul class="">' |
|
Liste des cours pour cette page | |
Texte du titre du menu (entité HTML échappée sauf si l’indicateur SM2_NOESCAPE est défini) |
|
L’URL d’un fichier image avec une représentation normale | |
L’URL d’un fichier image avec affichage actif/survol | |
Texte du titre de la page (entité HTML échappée sauf si l’indicateur SM2_NOESCAPE est défini) |
|
L’URL d’un fichier image lié à une page | |
L’URL des pages de la balise <a > | |
La cible de page pour la balise <a > | |
ID de page de l’élément de menu actuel. | |
ID de page de l’élément de menu parent. | |
Au niveau de la page, c’est le même numéro utilisé dans la balise CSS « menu-N ». | |
Nombre de frères et sœurs de l’élément de menu actuel. | |
Nombre de frères et sœurs dans ce menu. | |
Condition (voir la section « Mise en forme conditionnelle » pour plus de détails) |
Les balises suivantes ne sont disponibles QUE si l’indicateur SM2_ALLINFO est défini.
description de la page | |
Mots-clés de la page |
Mise en forme conditionnelle jusqu’à
L’instruction de mise en forme conditionnelle peut prendre l’une des formes suivantes:
B
Cela peut être n’importe quelle chaîne qui ne contient pas le caractère ‘}’.
peut contenir. Il peut contenir n’importe quelle chaîne de format de la section
Chaînes de format ‘, mais aucun autre test de condition (car le caractère ‘}’ n’est pas autorisé).
C
Cela peut être n’importe quelle chaîne qui ne contient pas le caractère ‘}’.
peut contenir. Il peut contenir n’importe quelle chaîne de format de la section
Chaînes de format ‘, mais aucun autre test de condition (car le caractère ‘}’ n’est pas autorisé).
La condition est une combinaison d’une ou plusieurs comparaisons booléennes.
Si plus d’une comparaison est nécessaire, elle doit être combinée avec les autres comparaisons
peuvent être liées en utilisant |/ (booléen ou -OU) ou & & (booléen et – ET).
Une seule comparaison se compose de l’opérande gauche, de l’opérateur et de l’opérande droit.
par exemple X == Y – où X est l’opérande gauche, == l’opérateur et Y l’opérande droit.
classe | Vérifiez si cette classe existe. Seuls les « == » et « != »les opérateurs sont autorisés. Dans ce cas, les opérateurs ont la signification « contient » ou « ne contient pas » au lieu de « est égal » ou « n’est pas égal ». |
niveau | Vérification du niveau de la page. |
sib | Vérifiez le nombre de frères et sœurs sur la page en cours. |
sibCount | Vérifiez le nombre total de frères et sœurs dans le menu actuel. |
id | Vérifiez l’id de la page. |
cible | Vérification de la spécification cible. |
< | Moins de |
<= | Inférieur ou égal à |
== | Égal |
!= | Pas égal |
>= | Supérieur ou égal à |
> | Supérieur à |
class | Un des noms de classe « menu-* » tels que spécifiés dans la section « Sortie ». |
niveau | Vérifiez le niveau de la page par rapport aux valeurs suivantes:
|
id | Vérifiez l’ID de la page par rapport aux valeurs suivantes:
|
sib | Un entier positif, ou « sibCount » pour vérifier le nombre de frères et sœurs dans ce menu. |
sibCount | Un nombre entier positif |
target | Une chaîne qui représente une spécification cible possible. |
A un sous-menu | |
Si la première entrée d’un menu est | |
N’EST PAS le premier élément d’un menu | |
Si la dernière entrée d’un menu est | |
Situé au plus haut niveau | |
N’est PAS au niveau supérieur | |
Si la deuxième entrée dans un menu est | |
Si dans un menu avec plus d’une entrée | |
Est dans un menu qui n’a pas exactement 2 articles | |
Se trouve dans un menu frère ou dans le sous-menu d’un menu frère | |
Est le point parent de l’id actuel | |
La chaîne ‘_self’ est contenue dans l’attribut target. |
Si une clause else est ajoutée, elle sera exécutée dans tous les autres cas.
Par exemple, « foo » est toujours exécuté lorsque la vérification if est incorrecte, donc:
N’EST PAS le deuxième élément du menu | |
n’est PAS dans un menu avec plus de deux entrées |
est la première entrée OU est la quatrième entrée ou plus dans le menu | |
Si l’entrée actuelle est ET a des sous-menus |
Remarque :
Tous les contrôles seront effectués dans l’ordre dans lequel ils sont notés, car:
- Il n’y a pas de vérification des boucles possibles (toutes les vérifications sont toujours exécutées).
- Les vérifications ne sont pas groupées (les parenthèses de vérifications ne sont pas prises en charge)
- Ces deux éléments ont la même valeur.
FORMATTERup
Attention: Il s’agit d’une fonctionnalité avancée et rarement utilisée!
Avec une connaissance approfondie de la programmation PHP, il est possible d’utiliser le formatage
prédéfini de show_menu2 avec le vôtre.
Dans l’inclusion.php de show_menu2 vous pouvez voir comment écrire le formateur.
L’API qui doit être utilisée ressemble à ceci:
class SM2_Formatter{ // called once before any menu is processed to allow object initialization function initialize() { } // called to open the menu list function startList($aPage, $aUrl) { } // called to open the menu item function startItem($aPage, $aUrl, $aCurrSib, $aSibCount) { } // called to close the menu item function finishItem() { } // called to close the menu list function finishList() { } // called once after all menu has been processed to allow object finalization function finalize() { } // called once after finalize() if the SM2_NOOUTPUT flag is used function getOutput() { }};
Websitebakerest publié sous la Licence Publique Générale GNU