flera menyer

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:

1. I WB Admin Backend: Alternativ – > Visa avancerade alternativ – > sökalternativ – > rubrik-infoga följande rad direkt efter öppningen <form> tagg:

<input type="hidden" name="referrer" value="" />

2. infoga följande rad i indexet.php av den använda mallen omedelbart efter öppningen < form> taggen för sökningen:

<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.
följande klasser läggs bara till om flaggan SM2_NUMCLASS är inställd:
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

meny nummer. Detta är användbart för att använda flera menyer på en sida. Menynummer 0 är standardmenyn på den aktuella sidan, sm2_allmenu returnerar alla menyer som används i systemet.

$ aStart

anger nivån från vilken skapandet av menyn ska börja. I de flesta fall kommer detta att vara den översta nivån på menyn som ska visas. Ett av följande värden kan användas:

SM2_ROOT+N

startar n nivåer under den översta nivån, t.ex.:

SM2_ROOT börjar på den översta nivå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

startar n nivåer under den aktuella nivån, t. ex.:

SM2_CURR börjar vid det aktuella lagret. Alla syskon på den aktuella nivån
SM2_CURR+1 startar ett lager under det aktuella lagret med alla undernivåer.

page_id

använder sidan med det angivna sid-id som överordnat element.
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

det maximala antalet nivåer som kan visas. Displayen
startar från den nivå som anges i $aStart, upp till den nivå som anges här.
SM2_ALL

ingen begränsning, alla nivåer visas.

SM2_CURR + N

visar alltid den aktuella sidan + N nivåer.

SM2_CURR nuvarande lager (inget underlager)
SM2_CURR+3 alla överordnade + nuvarande + 3 undernivåer

SM2_START+N

börjar alltid på startnivå + n nivåer.
nivåerna visas oavsett vilken nivå den aktuella sidan är på.

SM2_START en enda nivå från startnivån.
SM2_START+1 startnivå + en nivå nedan.

SM2_MAX + N

visar maximalt n-nivåer från startnivån.
lager under den aktuella nivån visas inte.

SM2_MAX endast startplanet (samma effekt som SM2_START)
SM2_MAX+1 startnivån och en nivå under den.

$Aoptions

särskilda flaggor för olika meny generation alternativ. De kan kombineras med varandra med hjälp av en eller länk (|).
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

visar alla grenar i menyträdet

 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

visar alla syskonmenyer på sidan i den aktuella sökvägen.
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

visar sökvägen till menyn, dvs. det aktuella menyalternativet
och alla menyalternativ som leder till det.

A-1 -> B-2 -> C-2 (CURRENT)

SM2_SIBLING

som SM2_TRIM, men endast syskonmenyer på den aktuella sidan visas. Alla andra objekt är undertryckta.

 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

lägger till de numrerade menyklasserna ”menu-N”och” menu-child-N”.

SM2_ALLINFO

Läser in alla fält från sidtabellen i databasen.
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

data som läses från databasen återanvänds inte när show_menu2 anropas igen, men läses igen från databasen.

SM2_PRETTY

ger HTML-utmatningen i menyn med tomma och
radbrytningar i en läsbar form. Detta är särskilt användbart när du felsöker menyutgången.

SM2_BUFFER

matar inte ut HTML-koden direkt, men sparar den internt och matar ut den som en komplett sträng.

SM2_CURRTREE

utesluter alla andra toppnivåmenyer från visning.
endast menyalternativ i den aktuella menygrenen visas.
vid behov kan denna flagga kombineras med valfri flagga från grupp 1.

SM2_ESCAPE

gäller htmlspecialchars till menysträngen.
detta kan krävas för äldre WebsiteBaker installationer.
för att generera en giltig HTML-utgång.

SM2_SHOWHIDDEN

dolda sidor är vanligtvis dolda hela tiden, inklusive när de är aktiva (dvs. aktuell sida eller en överordnad sida).
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

säkerställer länkarnas XHTML-kompatibilitet genom att ta bort målspecifikationen i länkar formaterade med eller och infoga argumentet title=””. För manuellt sammanställda länkar är designern ansvarig för XHTML-överensstämmelsen.

SM2_NO_TITLE

undertrycker utmatningen av innehållet i Titelattributet för eller formaterade länkar.
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

detta definierar formatsträngen med vilken varje enskilt menyalternativ startas. En annan formatsträng kan definieras för det allra första menyalternativet med $aTopItemOpen.
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

denna sträng kompletterar varje menyalternativ. Observera: Detta är inte en formatsträng och inga nyckelord kommer att ersättas!
om denna parameter är inställd på false används standardvärdet ’</li>’.

$aMenuOpen

denna formatsträng öppnar en lista med menyalternativ. En annan formatsträng kan definieras för den första menyn med $aTopMenuOpen.
om denna parameter är inställd på false används standardvärdet”.

$aMenuClose

denna sträng kompletterar varje meny. Observera: Detta är inte en formatsträng och inga nyckelord kommer att ersättas!
om denna parameter är inställd på false används standardvärdet ’</ul>’.

$ aTopItemOpen

formatsträngen för det allra första menyalternativet. Om denna parameter är inställd på false används samma formatsträng som för $aItemOpen.

$ aTopMenuOpen

formatsträngen för den första menyn. Om denna parameter är inställd på false används samma formatsträng som $aMenuOpen.

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

’flaggor’

**CONCELARY krävs** dessa är flaggorna som beskrivs ovan i avsnittet Parametrar under $aOptions.

’notrim’

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:


en

villkoret. Se nedan för mer information.

B

uttrycket som används när villkoret är uppfyllt.
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

uttrycket som används när villkoret inte är uppfyllt.
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.

vänster operand. Måste vara ett av följande nyckelord:
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.

operatör. Måste vara något av följande:
< mindre än
<= mindre än eller lika med
== lika
!= inte lika
>= större än eller lika med
> större än
höger operand. Typen av denna operand beror på nyckelordet som används för vänster operand.
klass ett av klassnamnen ” menu -* ”som anges i avsnittet” Output”.
nivå kontrollera sidnivån mot följande värden:

  • <nummer> den absoluta sidnivån
  • root är den översta nivån på sidan
  • granny en sidnivå ovanför den överordnade sidnivån
  • överordnad den överordnade sidnivån
  • aktuell den aktuella sidnivån
  • underordnad sidnivå
id kontrollera sidans id mot följande värden:

  • < nummer> den absoluta sidan id
  • förälder den överordnade sidan id
  • aktuell den aktuella sidan id
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.
följande exempel resulterar i ”true” och uttrycket {exp} körs om true:
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
i flera jämförelser utförs uttrycket ”exp” endast om:
ä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

Lämna ett svar

Din e-postadress kommer inte publiceras.