show_menu2, versie 4.9 x
Show_Menu2 is een codefragment voor de CMS WebsiteBaker. Sinds WebsiteBaker 2.7 is het inbegrepen bij het CMS.
de voormalige show_menu functie is volledig vervangen en uitgebreid met show_menu2. Alle gegevens die nodig zijn om het menu aan te maken, worden gegenereerd door een enkele database query. Door uitgebreide aanpassingsmogelijkheden van de gegenereerde HTML-code alle mogelijke menu types (lijsten, paneermeel, sitemaps, enz.) kan worden gegenereerd.
- installatie
- Show_Menu2
- FAQ
- functie
- HTML-uitvoer
- Parameter
- geavanceerde opties
- Format Strings
- Conditionele opmaak
- Formatter
INSTALLATIONup
omdat show_menu2 gewoonlijk aanwezig is in WebsiteBaker, is geen installatie vereist. Als het, in tegenstelling tot de verwachtingen, niet bestaat, kunt u het hier downloaden.
SHOW_MENU2up
om show_menu2 te gebruiken moet u de sjabloon wijzigen waar u het menu wilt laten verschijnen. Let op: als oude menuaanroepen worden vervangen, moeten de overeenkomstige nieuwe parameters die show_menu2 nodig heeft ook worden gebruikt.
in de meeste gevallen is de standaard aanroep met ten minste 4 parameters van show_menu2 voldoende. In dit geval worden de standaardwaarden gebruikt, dit maakt een menu dat de huidige pagina en de subpagina ‘ s van de huidige pagina weergeeft:
show_menu2(0, SM2_ROOT, SM2_START, SM2_TRIM);
let op: de aanroep naar show_menu2 is PHP en moet normaal worden ingesloten in PHP code tekens (tenzij de aanroep al binnen PHP code):
<?php show_menu2(0, SM2_ROOT, SM2_START, SM2_TRIM); ?>
dit standaardmenu maakt al een compleet menu aan op basis van een lijst met verschillende klassen die eenvoudige opmaak met behulp van CSS mogelijk maken. Bijvoorbeeld, de klasse “menu-current” wordt toegevoegd aan de <li> tag van het huidige menu-item. Bovendien bevat elk menu-item van de subitems de klasse “menu-expand”. Dit maakt het mogelijk om zeer gedifferentieerde CSS regels voor elk menu-item te maken.
bijvoorbeeld:
li.menu-expand { font-weight: bold; }li.menu-current { background: red; }
de sectie “HTML Output” bevat een gedetailleerde beschrijving van welke klassen worden toegewezen aan welk element. Door het gebruik van verschillende parameters in de show_menu2 functie aanroep, is het ook mogelijk om vrij uitgebreide en verschillende menustructuren te creëren. Als u bijvoorbeeld alleen menu-items van het hoogste niveau van de menustructuur wilt weergeven, kunt u de volgende aanroep gebruiken:
show_menu2(0, SM2_ROOT, SM2_START, SM2_TRIM);
of bijvoorbeeld om maximaal twee subniveaus van de huidige pagina weer te geven:
show_menu2(0, SM2_CURR+1, SM2_CURR+2, SM2_TRIM);
er zijn veel mogelijkheden om verschillende menustructuren te creëren. Talrijke voorbeelden zijn te vinden op de demo website: KLICK
FAQup
Q: Ik ben geen programmeur. Is er geen eenvoudigere documentatie?
A: Nee, want dit is al de eenvoudige documentatie.
V: Hoe kan ik een vervolgkeuzemenu aanmaken?
A: Dit heeft niets te maken met show_menu2. Om een drop-down menu te maken hoeft u alleen de CSS-code van de betreffende template aan te passen. De nodige aanpassingen zijn te vinden in bijvoorbeeld de” allcss2 ” template van de WebsiteBaker Addon Repository -> https://addon.websitebaker.org/
V: Waarom verdwijnt het menu nadat ik de zoekfunctie in een meertalige WebsiteBaker pagina heb gebruikt?
A: de benodigde regels ontbreken in het gebruikte sjabloon:
<input type="hidden" name="referrer" value="" />
<input type="hidden" name="referrer" value="<?php echo defined('REFERRER_ID')?REFERRER_ID:PAGE_ID;?>" />
Q: meertalig? Dat klinkt geweldig. Hoe doe je het?
A: https://help.websitebaker.org/en/designerguide/multilingual-websites.php
Q: elke keer dat een pagina wordt aangeroepen, genereert SM2 het volgende waarschuwingsbericht:
” show_menu2 error: $aOptions is ongeldig. Geen vlaggen van groep 1 geleverd!”
A: De verkeerde waarden of een verkeerd aantal waarden werden doorgegeven aan de functie.
zie de sectie PARAMETERS voor de juiste flag waarden om door te geven aan de parameter $aOptions.
V: Hoe gebruik ik een andere klasse/afbeelding/kleur/widget voor elk item in een menu?
A: Gebruik de format string in de $ aItemOpen string. Maak een unieke klasse of id voor elk menu-item, dan verwijzen naar dat item in uw CSS of Javascript om te doen wat je wilt.
om een unieke klasse toe te voegen voor elk menu-item (of vergelijkbaar):
"<li><a href="" target="" class=" p"></a>"
… het creëren van menu-items zoals …
<li><a href="/pages/foo/bar.php" target="_top" class="menu-top p45">Top Menu</a>
refereer dit in uw CSS zoals:
a.p45 { color: red; }
een unieke ID toevoegen voor elk menu-item (of vergelijkbaar)):
"<li><a href="" target="" class=""></a>"
… het creëren van menu-items zoals …
<li><a href="/pages/foo/bar.php" target="_top" class="menu-top">Top Menu</a>
refereer dit in uw CSS zoals:
a#p45 { color: red; }
merk op dat de ID alleen kan worden gebruikt als dat menu wordt gegenereerd en slechts één keer op de pagina wordt weergegeven (omdat HTML ID ‘ s uniek moeten zijn binnen een pagina).
FUNCTIONup
de volledige aanroep en de standaard parameterwaarden voor show_menu2 zijn als volgt:
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);
het gedeelte “Parameters” bevat een gedetailleerde beschrijving van elke afzonderlijke parameter.
elke parameter moet absoluut correct worden gebruikt. De volgende regels kunnen helpen:
$aMenu = 0 is de beste waarde in de meeste gevallen.
$aStart moet een pagina-ID zijn of een waarde die begint met”SM2_”.
$aMaxLevel kan alleen waarden krijgen die beginnen met”SM2_”.
$aoptions behalve een paar speciale gevallen zijn alleen waarden die beginnen met” SM2_ ” toegestaan.
alle andere parameters bevatten de (HTML)tags die de uitvoer van het menu bepalen.
vanaf $aItemOpen kan elke parameter de waarde false worden doorgegeven om de respectievelijke standaardwaarde te krijgen.
dit kan bijvoorbeeld worden gebruikt om een genummerde lijst aan te maken, terwijl de standaardwaarden nog steeds worden gebruikt voor de afzonderlijke menu-items:
show_menu2(0, SM2_ROOT, SM2_ALL, SM2_ALL, false, false, '<ol>', '</ol>');
let op: tot en met $aOptions moeten alle parameters expliciet worden doorgegeven!
HTML-uitvoer
de HTML-uitvoer hangt grotendeels af van welke parameters aan de functie worden doorgegeven. Ongeacht dit, worden de volgende klassen altijd gebruikt voor elk menu, waarbij individuele menu-items kunnen ook meerdere klassen indien nodig.
klasse | toewijzing |
---|---|
menu-top | alleen het eerste menu-item. |
menu-ouder | elk hoofdmenu-item. |
menu-current | alleen het menu-item van de huidige pagina. |
menu-broer of zus | alle “broer of zus” van de huidige pagina. |
menu-dochter | elk submenu van de huidige pagina. |
menu-expand | elk menu met submenu ‘ s. |
menu-first | het eerste item van een menu of submenu. |
menu-laatste | het laatste item van een menu of submenu. |
menu-N | elk menu-item, waarbij de N staat voor de absolute menudiepte, beginnend met 0, van het betreffende menu-item. dus het hoogste niveau is altijd menu-0, het volgende niveau is menu-1, enzovoort. |
menu-child – N | elk submenu van de huidige pagina ‘ s, waarbij de N staat voor de relatieve diepte van het submenu, beginnend met 0. |
voorbeeld van HTML-uitvoer:
<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
$aMenu
$ aStart
SM2_ROOT+N
SM2_ROOT+1 Begint een laag onder de bovenste laag
SM2_ROOT+2 Begint twee niveaus onder het hoogste niveau
SM2_CURR+N
SM2_CURR+1 begint een laag onder de huidige laag met alle subniveaus.
page_id
alle submenu ‘ s van deze pagina worden weergegeven. (De pagina-id kan worden bepaald door het bewerken van de pagina in de admin backend, het zal worden weergegeven in de adresbalk van de browser: http://SITE/admin/pages/modify.php?page_id=35
$aMaxLevel
start vanaf het niveau dat is opgegeven in $ aStart, tot het niveau dat hier is opgegeven.
SM2_ALL
SM2_CURR + N
SM2_CURR+3 Alle ouder + huidige + 3 subniveaus
SM2_START+N
de niveaus worden weergegeven ongeacht op welk niveau de huidige pagina zich bevindt.
SM2_START+1 startniveau + één niveau lager.
SM2_MAX+N
lagen onder het huidige niveau worden niet weergegeven.
SM2_MAX+1 het startniveau en één niveau eronder.
$Aopties
bijvoorbeeld, om zowel TRIM als PRETTY te definiëren, gebruik je: (SM2_TRIM / SM2_PRETTY).
groep 1
——-
van deze groep moet altijd één vlag worden opgegeven. Deze vlaggen bepalen hoe de sibling elementen in de menuboom worden onderdrukt in de uitvoer.
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
alle submenu ‘ s van items die niet in het pad staan.
worden verwijderd.
A-1 -> B-1 -> B-2 -> C-1 -> C-2 (CURRENT) -> D-1 -> D-2 -> C-3 A-2
SM2_CRUMB
Menu-item en alle menu-items die ernaar leiden.
A-1 -> B-2 -> C-2 (CURRENT)
SM2_SIBLING
A-1 -> B-2 -> C-1 -> C-2 (CURRENT) -> D-1 -> D-2 -> C-3
groep 2
——-
deze vlaggen zijn optioneel, ze kunnen worden gecombineerd in elk nummer.
SM2_NUMCLASS
SM2_ALLINFO
dit veroorzaakt een vrij hoog geheugenverbruik en dient
te zijn, moet daarom met voorzichtigheid worden gebruikt.
dit betekent bijvoorbeeld dat de trefwoorden, de paginabeschrijving en
alle andere beschikbare informatie die normaal niet
is, kunnen worden geladen.
let op: deze vlag moet worden ingesteld bij de eerste aanroep van schow_menu2
kan worden gebruikt voor de respectievelijke menu-ID, of in combinatie met de
met SM2_NOCACHE, anders heeft het geen effect.
SM2_NOCACHE
SM2_PRETTY
regeleinden in een leesbare vorm. Dit is vooral handig bij het debuggen van de menu-uitvoer.
SM2_BUFFER
SM2_CURRTREE
alleen menu-items van de huidige menutak worden weergegeven.
indien nodig kan deze vlag worden gecombineerd met elke vlag van groep 1.
SM2_ESCAPE
dit kan nodig zijn voor oudere WebsiteBaker-installaties.
om een geldige HTML-uitvoer te genereren.
SM2_SHOWHIDDEN
gebruik privépagina ’s voor de tijd dat u pagina’ s wilt verbergen, behalve wanneer deze actief zijn. Maar voor compatibiliteit met release 4.8, geef deze vlag om verborgen pagina ‘ s zichtbaar te maken wanneer ze actief zijn.
SM2_XHTML_STRICT
SM2_NO_TITLE
voor deze parameter is er ook een uitgebreide modus waar de opties worden doorgegeven als een associatieve array. Zie het gedeelte Geavanceerde opties voor meer informatie. Voor de meeste toepassingen is dit echter niet vereist.
$aItemOpen
als deze parameter is ingesteld op false, de standaard format string
‘</a>’ om compatibiliteit met de WebsiteBaker standaard functie show_menu () te garanderen.
omdat opmaak met behulp van CSS-klassen vaak gemakkelijker is wanneer toegepast op de tag <a>, wordt aanbevolen de volgende format string te gebruiken: ‘<li></a>’.
deze parameter kan ook worden gebruikt als een instantie van een opmaakklasse voor het menu. Een meer gedetailleerde beschrijving is te vinden in de FORMATTER sectie. Als hier een formatter wordt opgegeven, worden alle argumenten na $aItemOpen genegeerd.
$aItemClose
als deze parameter is ingesteld op false, wordt de standaard ‘< / li> ‘ gebruikt.
$aMenuOpen
als deze parameter is ingesteld op false, wordt de standaardwaarde ” gebruikt.
$aMenuClose
als deze parameter is ingesteld op false, wordt de standaard ‘< / ul> ‘ gebruikt.
$aTopItemOpen
$aTopMenuOpen
ADVANCED OPTIONSup
de parameter $aoptions kan op twee manieren worden gebruikt. Ten eerste, zoals hierboven beschreven in de sectie PARAMETERS, moet dit type voldoende zijn voor de overgrote meerderheid van de use cases. Om de speciale opties in speciale gevallen te kunnen aanpakken, moeten de vereiste waarden echter als een associatieve array worden opgegeven.
let op: de sm2_ * vlaggen zijn hier ook verplicht en moeten worden doorgegeven als ‘vlaggen’.
dit definieert een aantal niveaus die altijd relatief worden weergegeven ten opzichte van het menuniveau gedefinieerd in $aStart. Dit zorgt ervoor dat de sm2_trim vlag genegeerd wordt voor deze niveaus.
om deze array te gebruiken wordt aanbevolen om deze eerst aan te maken en dan de $aOptions parameter te leveren met de aangemaakte array:
$options = array('flags' => (SM2_TRIM|...), 'notrim' => 1); show_menu2(0, SM2_ROOT, SM2_CURR+1, $options);
FORMAT STRINGSup
de volgende tags kunnen worden gebruikt in de format strings voor $aItemOpen en $aMenuOpen en moeten worden vervangen door de bijbehorende tekst.
<een> – tag zonder klasse:
'<a href="" target="">' |
|
<een> tag met klasse:
'<a href="" target="" class="">' |
|
<li> tag met klasse:
'<li class="">' |
|
<ul> tag met klasse:
'<ul class="">' |
|
Lijst van klassen voor deze pagina | |
Tekst van de titel van het menu (HTML-entiteit ontsnapt, tenzij de SM2_NOESCAPE vlag is ingesteld) |
|
De URL naar een image-bestand met normale weergave | |
De URL naar een image-bestand met actieve/zweven display | |
de titel van de Pagina tekst (HTML-entiteit ontsnapt, tenzij de SM2_NOESCAPE vlag is ingesteld) |
|
De URL naar een pagina met gerelateerde image bestand | |
de URL van de pagina ‘ s voor het <a> label | |
het paginadoel voor het<a > – label | |
de pagina-ID van het huidige menu-item. | |
de pagina-ID van het bovenliggende menu-item. | |
u paginaniveau, dit is hetzelfde nummer gebruikt in de “menu-N” CSS tag. | |
aantal broers en zussen van het huidige menu-item. | |
aantal broers en zussen in dit menu. | |
voorwaarde (Zie sectie “Conditionele opmaak” voor details) |
de volgende tags zijn alleen beschikbaar als de sm2_allinfo vlag is ingesteld.
pagina-omschrijving | |
trefwoorden van de pagina |
Voorwaardelijke opmaak up
het statement voorwaardelijke opmaak kan een van de volgende vormen aannemen:
B
dit kan elke tekenreeks zijn die niet het teken’} ‘ bevat.
kan bevatten. Het kan elke format string bevatten uit de sectie
Format Strings’, maar geen verdere conditietest (omdat het teken’} ‘ niet is toegestaan).
C
dit kan elke tekenreeks zijn die niet het teken’} ‘ bevat.
kan bevatten. Het kan elke format string bevatten uit de sectie
Format Strings’, maar geen verdere conditietest (omdat het teken’} ‘ niet is toegestaan).
de voorwaarde is een combinatie van een of meer Booleaanse vergelijkingen.
indien meer dan één vergelijking vereist is, moet deze worden gecombineerd met de andere vergelijkingen
kan worden gekoppeld met behulp van || (boolean of – OF) of && (boolean en – en).
een enkele vergelijking bestaat uit de linker operand, de operator en de rechter operand.
bijvoorbeeld X = = Y-waarbij X de linker operand is, == de operator en Y de rechter operand.
klasse | Controleer of deze klasse bestaat. Alleen de “= = “en”!= “operators zijn toegestaan. In dit geval hebben de operators de Betekenis “bevat” of “Bevat niet” in plaats van “is gelijk” of “is niet gelijk”. |
niveau | controle van het paginaniveau. |
sib | controleer het aantal broers en zussen op de huidige pagina. |
sibCount | controleer het totale aantal broers en zussen in het huidige menu. |
id | controleer de pagina-id. |
doel | verificatie van de doelspecificatie. |
< | minder dan |
<= | kleiner dan of gelijk aan |
== | gelijk |
!= | niet gelijk |
>= | groter dan of gelijk aan |
> | groter dan |
klasse | een van de klassenamen ” menu – * “zoals gespecificeerd in de sectie” Output”. |
niveau | controleer het paginaniveau met de volgende waarden:
|
id | controleer de pagina-id met de volgende waarden:
|
sib | een positief geheel getal, of “sibCount” om het aantal broers en zussen in dit menu te controleren. |
sibCount | een positief geheel getal |
target | een tekenreeks die een mogelijke doelspecificatie vertegenwoordigt. |
een submenu Heeft | |
Als de eerste entry in een menu | |
Is NIET het eerste item in een menu | |
Als het laatste item in een menu | |
Gelegen op het hoogste niveau | |
Is het NIET op het hoogste niveau | |
Als het tweede item in een menu | |
Als in een menu met meer dan één item | |
in een menu dat heeft niet precies 2 items | |
bevindt zich in een verwant menu of in het submenu van een verwant menu | |
het bovenliggende punt van het huidige id Is | |
de string ‘_self’ zit in het doelattribuut. |
als er een else-clausule wordt toegevoegd, zal deze in alle andere gevallen worden uitgevoerd.
bijvoorbeeld, “foo” wordt altijd uitgevoerd als de if-check verkeerd is, dus:
Is het NIET het tweede item in het menu | |
is het NIET in een menu met meer dan twee ingangen |
de eerste vermelding OF is het de vierde of hogere vermelding in het menu | |
Als het huidige item EN submenu ‘ s |
let op:
Alle controles zullen worden uitgevoerd in de volgorde waarin ze worden vermeld, omdat:
- er is geen controle op mogelijke lussen (alle controles worden altijd uitgevoerd).
- controles zijn niet gegroepeerd (haakjes van controles worden niet ondersteund)
- beide dingen hebben dezelfde waarde.
FORMATTERup
let op: dit is een geavanceerde en zelden gebruikte functie!
met uitgebreide kennis van PHP programmeren is het mogelijk om de voorgedefinieerde
opmaak van show_menu2 te gebruiken met je eigen.
In de include.php van show_menu2 je kunt zien hoe je de formatter schrijft.
de API die gebruikt moet worden ziet er als volgt uit:
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() { }};
WebsiteBakeris vrijgegeven onder de GNU General Public License