show_menu2, version 4.9 x
Show_Menu2 är ett kodavsnitt för CMS WebsiteBaker. Sedan WebsiteBaker 2.7 det ingår i CMS.
den tidigare show_menu-funktionen ersätts helt och utökas med show_menu2. Alla data som krävs för att skapa menyn genereras av en enda databasfråga. Genom omfattande justeringsmöjligheter för den genererade HTML-koden alla möjliga menytyper (listor, ströbröd, webbplatskartor, etc.) kan genereras.
- Installation
- använda Show_Menu2
- FAQ
- funktion
- HTML-utmatning
- Parameter
- Avancerade alternativ
- formatsträngar
- villkorlig formatering
- Formaterare
installationup
eftersom show_menu2 vanligtvis finns i WebsiteBaker krävs ingen installation. Om det, i motsats till förväntningarna, inte existerar, kan du ladda ner det här.
använda SHOW_MENU2up
för att använda show_menu2 måste du ändra mallen där du vill att menyn ska visas. Observera: om gamla menysamtal ersätts måste motsvarande nya parametrar som show_menu2 behöver också användas.
i de flesta fall är standardsamtalet med minst 4 parametrar för show_menu2 tillräckligt. I det här fallet används standardvärdena, detta skapar en meny som visar den aktuella sidan och undersidorna på den aktuella sidan:
show_menu2(0, SM2_ROOT, SM2_START, SM2_TRIM);
observera: samtalet till show_menu2 är PHP och måste normalt bifogas PHP – kodtecken (såvida inte samtalet redan finns i PHP-kod):
<?php show_menu2(0, SM2_ROOT, SM2_START, SM2_TRIM); ?>
den här standardmenyn skapar redan en komplett meny på listbasis med flera klasser som möjliggör enkel formatering med CSS. Till exempel läggs klassen ”meny-aktuell” till taggen <li> för det aktuella menyalternativet. Dessutom innehåller varje menyalternativ i underobjekten klassen ”meny-expandera”. Detta gör det möjligt att skapa mycket differentierade CSS-regler för varje menyalternativ.
till exempel:
li.menu-expand { font-weight: bold; }li.menu-current { background: red; }
avsnittet” HTML-utgång ” innehåller en detaljerad beskrivning av vilka klasser som tilldelas vilket element. Genom att använda olika parametrar i show_menu2 – funktionsanropet är det också möjligt att skapa ganska omfattande och olika menystrukturer. Om du till exempel bara vill visa menyalternativ från den översta nivån i menystrukturen kan du använda följande samtal:
show_menu2(0, SM2_ROOT, SM2_START, SM2_TRIM);
eller, till exempel, för att visa upp till två undernivåer på den aktuella sidan:
show_menu2(0, SM2_CURR+1, SM2_CURR+2, SM2_TRIM);
det finns många möjligheter att skapa olika menystrukturer. Många exempel finns på demowebbplatsen: klicka
FAQup
F: Jag är inte en programmerare. Finns det ingen enklare dokumentation?
A: Nej, för det här är redan den enkla dokumentationen.
F: Hur kan jag skapa en rullgardinsmeny?
A: Detta har inget att göra med show_menu2. För att skapa en rullgardinsmeny behöver du bara justera CSS-koden för respektive Mall. De nödvändiga justeringarna finns t. ex. i mallen ”allcss2” från WebsiteBaker Addon Repository -> https://addon.websitebaker.org/
f: varför försvinner menyn efter att jag har använt sökfunktionen på en flerspråkig WebsiteBaker-sida?
A: de nödvändiga raderna saknas i mallen som används:
<input type="hidden" name="referrer" value="" />
<input type="hidden" name="referrer" value="<?php echo defined('REFERRER_ID')?REFERRER_ID:PAGE_ID;?>" />
f: flerspråkig? Det låter bra. Hur gör du det?
A: https://help.websitebaker.org/en/designerguide/multilingual-websites.php
F: varje gång en sida anropas genererar SM2 följande varningsmeddelande:
”show_menu2-fel: $aOptions är ogiltigt. Inga flaggor från grupp 1 levereras!”
A: Fel värden eller fel antal värden skickades till funktionen.
se avsnittet Parametrar för de korrekta flaggvärdena som ska överföras till parametern $aOptions.
F: Hur använder jag en annan klass/bild/färg/widget för varje post i en meny?
A: använd formatsträngen i $aItemOpen-strängen. Skapa en unik klass eller id för varje menyalternativ och referera sedan till det objektet i din CSS eller Javascript för att göra vad du vill.
för att lägga till en unik klass för varje menyalternativ (eller liknande):
"<li><a href="" target="" class=" p"></a>"
… skapa menyalternativ som …
<li><a href="/pages/foo/bar.php" target="_top" class="menu-top p45">Top Menu</a>
referera till detta i din CSS som:
a.p45 { color: red; }
för att lägga till ett unikt ID för varje menyalternativ (eller liknande):
"<li><a href="" target="" class=""></a>"
… skapa menyalternativ som …
<li><a href="/pages/foo/bar.php" target="_top" class="menu-top">Top Menu</a>
referera till detta i din CSS som:
a#p45 { color: red; }
Observera att ID endast kan användas om den menyn genereras och visas en gång bara på sidan (eftersom HTML-ID måste vara unikt på en sida).
FUNCTIONup
det fullständiga samtalet och standardparametervärdena för show_menu2 är följande:
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);
avsnittet ”Parametrar” innehåller en detaljerad beskrivning av varje enskild parameter.
varje parameter måste användas helt korrekt. Följande regler kan hjälpa till:
$aMenu = 0 är det bästa värdet i de flesta fall.
$aStart måste vara antingen ett sid-ID eller ett värde som börjar med ”SM2_”.
$aMaxLevel kan bara få värden som börjar med ”SM2_”.
$aOptions förutom några speciella fall är endast värden som börjar med ”SM2_” tillåtna.
alla andra parametrar innehåller (HTML)taggar som styr utdata från menyn.
från $aItemOpen kan varje parameter skickas värdet falskt för att få respektive standardvärde.
detta kan till exempel användas för att skapa en numrerad lista, medan standardvärdena fortfarande används för de enskilda menyalternativen:
show_menu2(0, SM2_ROOT, SM2_ALL, SM2_ALL, false, false, '<ol>', '</ol>');
Observera: upp till och med $aOptions alla parametrar måste skickas explicit!
HTML-utmatning
HTML-utmatningen beror till stor del på vilka parametrar som skickas till funktionen. Oavsett detta används efterföljande klasser alltid för varje meny, varvid enskilda menyalternativ också kan ha flera klasser om det behövs.
klass | uppgift |
---|---|
meny-top | endast det första menyalternativet. |
meny-förälder | alla huvudmenyalternativ. |
meny-aktuell | endast menyalternativet på den aktuella sidan. |
meny-syskon | alla ”syskon” på den aktuella sidan. |
meny-barn | någon undermeny på den aktuella sidan. |
meny-expandera | någon meny som har undermenyer. |
meny-först | det första objektet i någon meny eller undermeny. |
meny-sista | det sista objektet i någon meny eller undermeny. |
meny-n | Varje menyalternativ, där N står för det absoluta menydjupet, som börjar med 0, för respektive menyalternativ. så den översta nivån är alltid meny-0, nästa nivå är meny-1, och så vidare. |
meny-barn-N | varje undermeny på de aktuella sidorna, där N står för UNDERMENYENS relativa djup, börjar med 0. |
exempel på HTML-utdata:
<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 startar ett lager under det översta lagret
SM2_ROOT+2 startar två nivåer under den översta nivån
SM2_CURR+N
SM2_CURR+1 startar ett lager under det aktuella lagret med alla undernivåer.
page_id
alla undermenyer på denna sida visas. (Sidan id kan bestämmas genom att redigera sidan i admin backend, det kommer att visas i adressfältet i webbläsaren: http://SITE/admin/pages/modify.php?page_id=35
$aMaxLevel
startar från den nivå som anges i $aStart, upp till den nivå som anges här.
SM2_ALL
SM2_CURR + N
SM2_CURR+3 alla överordnade + nuvarande + 3 undernivåer
SM2_START+N
nivåerna visas oavsett vilken nivå den aktuella sidan är på.
SM2_START+1 startnivå + en nivå nedan.
SM2_MAX + N
lager under den aktuella nivån visas inte.
SM2_MAX+1 startnivån och en nivå under den.
$Aoptions
till exempel, för att definiera både TRIM och PRETTY, använd : (SM2_TRIM | SM2_PRETTY).
Grupp 1
——-
en flagga måste alltid anges från denna grupp. Dessa flaggor bestämmer hur syskonelementen i menyträdet undertrycks i utgången.
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
alla undermenyer av objekt som inte finns i sökvägen.
tas bort.
A-1 -> B-1 -> B-2 -> C-1 -> C-2 (CURRENT) -> D-1 -> D-2 -> C-3 A-2
SM2_CRUMB
och alla menyalternativ som leder till det.
A-1 -> B-2 -> C-2 (CURRENT)
SM2_SIBLING
A-1 -> B-2 -> C-1 -> C-2 (CURRENT) -> D-1 -> D-2 -> C-3
Grupp 2
——-
dessa flaggor är valfria, de kan kombineras i valfritt antal.
SM2_NUMCLASS
SM2_ALLINFO
detta orsakar en ganska hög minnesförbrukning och bör vara
bör därför användas med försiktighet.
detta innebär till exempel att nyckelord, sidbeskrivning och
all annan tillgänglig information som normalt inte är
kan laddas.
observera: denna flagga måste ställas in vid första anropet av schow_menu2
kan användas för respektive meny-ID, eller i samband med
med SM2_NOCACHE, annars har ingen effekt.
SM2_NOCACHE
SM2_PRETTY
radbrytningar i en läsbar form. Detta är särskilt användbart när du felsöker menyutgången.
SM2_BUFFER
SM2_CURRTREE
endast menyalternativ i den aktuella menygrenen visas.
vid behov kan denna flagga kombineras med valfri flagga från grupp 1.
SM2_ESCAPE
detta kan krävas för äldre WebsiteBaker installationer.
för att generera en giltig HTML-utgång.
SM2_SHOWHIDDEN
Använd privata sidor för tid när du vill att sidor ska döljas utom när de är aktiva. Men för kompatibilitet med release 4.8, ange denna flagga så att dolda sidor blir synliga när de är aktiva.
SM2_XHTML_STRICT
SM2_NO_TITLE
för denna parameter finns också ett utökat läge där alternativen skickas som en associativ array. Se avsnittet Avancerade alternativ för mer information. För de flesta applikationer är detta dock inte nödvändigt.
$aItemOpen
om denna parameter är inställd på false, standardformatsträngen
’</a> ’ för att säkerställa kompatibilitet med WebsiteBaker standardfunktion show_menu().
eftersom formatering med CSS-klasser ofta är lättare när den tillämpas på taggen < a>rekommenderas att du använder följande formatsträng: ’<li></a>’.
denna parameter kan också användas som en instans av en formateringsklass för menyn. En mer detaljerad beskrivning finns i avsnittet formatera. Om en Formaterare anges här ignoreras alla argument efter $aItemOpen.
$ aItemClose
om denna parameter är inställd på false används standardvärdet ’</li>’.
$aMenuOpen
om denna parameter är inställd på false används standardvärdet”.
$aMenuClose
om denna parameter är inställd på false används standardvärdet ’</ul>’.
$ aTopItemOpen
$ aTopMenuOpen
ADVANCED OPTIONSup
parametern $aoptions kan användas på två sätt. För det första, som beskrivits ovan i avsnittet Parametrar, bör denna typ vara tillräcklig för de allra flesta användningsfall. För att kunna adressera specialalternativen i speciella fall måste de nödvändiga värdena anges som en associativ array.
Observera: sm2_* – flaggorna krävs också här och måste skickas som ’flaggor’.
detta definierar ett antal nivåer som alltid visas i förhållande till menynivån definierad i $aStart. Detta gör att SM2_TRIM-flaggan ignoreras för dessa nivåer.
för att använda denna array rekommenderas att du först skapar den och sedan levererar parametern $aOptions med den skapade arrayen:
$options = array('flags' => (SM2_TRIM|...), 'notrim' => 1); show_menu2(0, SM2_ROOT, SM2_CURR+1, $options);
FORMAT STRINGSup
följande taggar kan användas i formatsträngarna för $aItemOpen och $aMenuOpen och bör ersättas med motsvarande text.
<en > tagg utan klass:
'<a href="" target="">' |
|
<en > tagg med klass:
'<a href="" target="" class="">' |
|
<li> tagg med klass:
'<li class="">' |
|
<ul> tagg med klass:
'<ul class="">' |
|
lista över klasser för denna sida | |
Text på menytiteln (HTML-entitet flydde om inte SM2_NOESCAPE-flaggan är inställd) |
|
URL till en bildfil med normal representation | |
URL till en bildfil med aktiv / hover display | |
Sidtiteltext (HTML-entitet flydde om inte SM2_NOESCAPE-flaggan är inställd) |
|
webbadressen till en sidrelaterad bildfil | |
webbadressen till sidorna för taggen <a> | |
sidmålet för taggen <a> | |
sidans ID för det aktuella menyalternativet. | |
sidans ID för det överordnade menyalternativet. | |
du sidnivå, det här är samma nummer som används i CSS-taggen” meny-N”. | |
antal syskon i det aktuella menyalternativet. | |
antal syskon i denna meny. | |
villkor (se avsnittet ”Villkorlig formatering” för mer information) |
följande taggar är endast tillgängliga om flaggan SM2_ALLINFO är inställd.
beskrivning av sidan | |
nyckelord på sidan |
Villkorsstyrd formatering upp
villkorsstyrd formatering kan ha ett av följande formulär:
B
detta kan vara vilken sträng som helst som inte innehåller tecknet ’}’.
kan innehålla. Den kan innehålla vilken formatsträng som helst från avsnittet
formatsträngar’, men inget ytterligare villkorstest (eftersom tecknet ’}’ inte är tillåtet).
C
detta kan vara vilken sträng som helst som inte innehåller tecknet ’}’.
kan innehålla. Den kan innehålla vilken formatsträng som helst från avsnittet
formatsträngar’, men inget ytterligare villkorstest (eftersom tecknet ’}’ inte är tillåtet).
villkoret är en kombination av en eller flera booleska jämförelser.
om mer än en jämförelse krävs måste den kombineras med de andra jämförelserna
kan länkas med || (boolean or – OR) eller && (boolean and – AND).
en enda jämförelse består av vänster operand, operatören och höger operand.
t.ex. X == Y – där X är den vänstra operanden, == operatören och Y den högra operanden.
klass | kontrollera om den här klassen finns. Endast ”= = ”och”!= ”operatörer är tillåtna. I detta fall har operatörerna betydelsen ”innehåller” eller ”innehåller inte” istället för ”är lika”eller” är inte lika”. |
nivå | kontrollera sidnivån. |
sib | kontrollera antalet syskon på den aktuella sidan. |
sibCount | kontrollera det totala antalet syskon i den aktuella menyn. |
id | kontrollera sidan id. |
mål | verifiering av målspecifikationen. |
< | mindre än |
<= | mindre än eller lika med |
== | lika |
!= | inte lika |
>= | större än eller lika med |
> | större än |
klass | ett av klassnamnen ” menu -* ”som anges i avsnittet” Output”. |
nivå | kontrollera sidnivån mot följande värden:
|
id | kontrollera sidans id mot följande värden:
|
sib | ett positivt heltal, eller ”sibCount” för att kontrollera antalet syskon i den här menyn. |
sibCount | ett positivt heltal |
mål | en sträng som representerar en möjlig målspecifikation. |
har en undermeny | |
om den första posten i en meny är | |
är inte det första objektet i en meny | |
om den sista posten i en meny är | |
ligger på den översta nivån | |
är inte på toppnivå | |
om den andra posten i en meny är | |
om i en meny med mer än en post | |
finns i en meny det har inte exakt 2 artiklar | |
finns i en syskonmeny eller i undermenyn till en syskonmeny | |
är den överordnade punkten för det aktuella id | |
strängen ’_self’ finns i målattributet. |
om en else-klausul läggs till kommer den att utföras i alla andra fall.
till exempel körs ”foo” alltid när if-kontrollen är fel, så:
är inte det andra objektet i menyn | |
finns inte i en meny med mer än två poster |
är den första posten eller är den fjärde eller högre posten i menyn | |
om den aktuella posten är och har undermenyer |
Observera:
alla kontroller kommer att utföras i den ordning de noteras, eftersom:
- det finns ingen kontroll för möjliga slingor (alla kontroller utförs alltid).
- kontroller är inte grupperade (parenteser av kontroller stöds inte)
- båda dessa saker har samma värde.
FORMATTERup
Obs: Detta är en avancerad och sällan använd funktion!
med omfattande kunskaper i PHP-programmering är det möjligt att använda den fördefinierade
formatering av show_menu2 med din egen.
i inkludera.php av show_menu2 du kan se hur man skriver formateraren.
API: et som måste användas ser ut så här:
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 släppt under GNU General Public License