show_menu2, wersja 4.9 x
Show_Menu2 jest fragmentem kodu dla WebsiteBaker CMS. Od WebsiteBaker 2.7 jest dołączony do CMS.
poprzednia funkcja show_menu jest całkowicie zastąpiona i rozszerzona o show_menu2. Wszystkie dane wymagane do utworzenia menu są generowane przez jedno zapytanie do bazy danych. Dzięki rozbudowanym możliwościom dostosowania generowanego kodu HTML wszystkie możliwe typy menu (listy, bułka tarta, mapy witryn, itp.) mogą być generowane.
- instalacja
- używanie Show_Menu2
- FAQ
- funkcja
- wyjście HTML
- parametr
- Opcje zaawansowane
- formatowanie ciągów
- formatowanie warunkowe
- formatowanie
instalacjaup
ponieważ show_menu2 jest zwykle obecny w websitebaker, nie jest wymagana instalacja. Jeśli wbrew oczekiwaniom nie istnieje, możesz go pobrać tutaj.
używając SHOW_MENU2up
aby użyć show_menu2 musisz zmodyfikować szablon, w którym ma się pojawić menu. Uwaga: Jeśli stare wywołania menu są zastępowane, należy również użyć odpowiednich nowych parametrów, których potrzebuje show_menu2.
w większości przypadków wystarczy standardowe wywołanie z co najmniej 4 parametrami show_menu2. W tym przypadku używane są wartości domyślne, to tworzy menu, które wyświetla bieżącą stronę i podstrony bieżącej strony:
show_menu2(0, SM2_ROOT, SM2_START, SM2_TRIM);
Uwaga: wywołanie show_menu2 to PHP i zwykle musi być zamknięte w znakach kodu PHP (chyba że wywołanie jest już wewnątrz kodu PHP):
<?php show_menu2(0, SM2_ROOT, SM2_START, SM2_TRIM); ?>
to domyślne menu tworzy już kompletne menu na podstawie listy z kilkoma klasami, które umożliwiają łatwe formatowanie za pomocą CSS. Na przykład klasa „menu-current” jest dodawana do znacznika <li> bieżącego elementu menu. Dodatkowo każdy element menu podpunktów zawiera klasę „menu-expand”. Pozwala to na tworzenie bardzo zróżnicowanych reguł CSS dla każdego elementu menu.
na przykład:
li.menu-expand { font-weight: bold; }li.menu-current { background: red; }
sekcja „HTML Output” zawiera szczegółowy opis klas przypisanych do danego elementu. Używając różnych parametrów w wywołaniu funkcji show_menu2, możliwe jest również tworzenie dość rozbudowanych i różnych struktur menu. Na przykład, aby wyświetlić tylko pozycje menu z górnego poziomu struktury menu, można użyć następującego wywołania:
show_menu2(0, SM2_ROOT, SM2_START, SM2_TRIM);
lub, na przykład, aby wyświetlić do dwóch podpoziomów bieżącej strony:
show_menu2(0, SM2_CURR+1, SM2_CURR+2, SM2_TRIM);
istnieje wiele możliwości tworzenia różnych struktur menu. Liczne przykłady można znaleźć na stronie demo: KLICK
FAQup
P: nie jestem programistą. Czy nie ma prostszej dokumentacji?
A: Nie, ponieważ jest to już prosta dokumentacja.
P: Jak mogę utworzyć rozwijane menu?
A: to nie ma nic wspólnego z show_menu2. Aby utworzyć rozwijane menu, musisz tylko dostosować kod CSS odpowiedniego szablonu. Niezbędne korekty można znaleźć np. w szablonie „allcss2” z repozytorium dodatków WebsiteBaker-> https://addon.websitebaker.org/
P: Dlaczego menu zniknie po skorzystaniu z funkcji wyszukiwania na wielojęzycznej stronie internetowej?
A: brak niezbędnych linii w użytym szablonie:
<input type="hidden" name="referrer" value="" />
<input type="hidden" name="referrer" value="<?php echo defined('REFERRER_ID')?REFERRER_ID:PAGE_ID;?>" />
P: wielojęzyczny? Brzmi świetnie. Jak ty to robisz?
A: https://help.websitebaker.org/en/designerguide/multilingual-websites.php
P: przy każdym wywołaniu strony, SM2 generuje następujący komunikat ostrzegawczy:
” show_menu2 error: $aoptions is invalid. Nie dostarczono FLAG z grupy 1!”
A: Błędne wartości lub niewłaściwa liczba wartości zostały przekazane do funkcji.
patrz sekcja parametry dla poprawnych wartości znaczników, które należy przekazać do parametru $aOptions.
P: Jak użyć innej klasy/obrazu/koloru / widżetu dla każdej pozycji w menu?
a: użyj łańcucha formatu w łańcuchu $aitemopen. Utwórz unikalną klasę lub identyfikator dla każdego elementu menu, a następnie odwołaj się do tego elementu w CSS lub Javascript, aby zrobić, co chcesz.
aby dodać unikalną klasę dla każdego elementu menu (lub podobnego):
"<li><a href="" target="" class=" p"></a>"
… tworzenie elementów menu, takich jak …
<li><a href="/pages/foo/bar.php" target="_top" class="menu-top p45">Top Menu</a>
odwołaj się do tego w swoim CSS jak:
a.p45 { color: red; }
aby dodać unikalny identyfikator dla każdego elementu menu (lub podobnego):
"<li><a href="" target="" class=""></a>"
… tworzenie elementów menu, takich jak …
<li><a href="/pages/foo/bar.php" target="_top" class="menu-top">Top Menu</a>
odwołaj się do tego w swoim CSS jak:
a#p45 { color: red; }
zauważ, że ID może być użyte tylko wtedy, gdy to menu jest generowane i wyświetlane tylko raz na stronie (ponieważ identyfikatory HTML muszą być unikalne na stronie).
FUNCTIONup
pełne wywołanie i domyślne wartości parametrów dla show_menu2 są następujące:
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);
sekcja „parametry” zawiera szczegółowy opis każdego parametru.
każdy parametr musi być użyty absolutnie poprawnie. Poniższe zasady mogą pomóc:
$aMenu = 0 jest najlepszą wartością w większości przypadków.
$aStart musi być albo ID strony, albo wartością zaczynającą się od „SM2_”.
$aMaxLevel może pobierać tylko wartości zaczynające się od”SM2_”.
$aoptions z wyjątkiem kilku szczególnych przypadków dozwolone są tylko wartości zaczynające się od „SM2_”.
wszystkie pozostałe parametry zawierają znaczniki (HTML), które kontrolują wyjście menu.
począwszy od $aitemopen każdy parametr może być przekazany wartości false, aby uzyskać odpowiednią wartość domyślną.
można tego użyć na przykład do utworzenia numerowanej listy, podczas gdy wartości domyślne są nadal używane dla poszczególnych pozycji menu:
show_menu2(0, SM2_ROOT, SM2_ALL, SM2_ALL, false, false, '<ol>', '</ol>');
Uwaga: do $aoptions włącznie wszystkie parametry muszą być przekazane jawnie!
wyjście HTML
wyjście HTML zależy w dużej mierze od tego, które parametry są przekazywane do funkcji. Niezależnie od tego, kolejne klasy są zawsze używane dla każdego menu, przy czym poszczególne pozycje menu mogą mieć również kilka klas, jeśli to konieczne.
Klasa | przypisanie |
---|---|
menu-Góra | tylko pierwsza pozycja menu. |
menu-rodzic | dowolny element menu głównego. |
menu-bieżąca | tylko pozycja menu bieżącej strony. |
menu-rodzeństwo | wszystkie „rodzeństwo” bieżącej strony. |
menu-dziecko | dowolne podmenu bieżącej strony. |
menu-rozwiń | dowolne menu, które ma podmenu. |
menu-pierwszy | pierwszy element dowolnego menu lub podmenu. |
menu-ostatnia | ostatnia Pozycja dowolnego menu lub podmenu. |
menu-N | każdy element menu, gdzie N oznacza absolutną głębokość menu, począwszy od 0, danego elementu menu. więc najwyższym poziomem jest zawsze menu-0, następnym poziomem jest menu-1 i tak dalej. |
menu-child-N | każde podmenu bieżących stron, gdzie N oznacza względną głębokość podmenu, zaczynając od 0. |
przykład wyjścia 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
$aMenu
$aStart
SM2_ROOT+N
SM2_ROOT+1 rozpoczyna warstwę poniżej najwyższej warstwy
SM2_ROOT+2 rozpoczyna dwa poziomy poniżej najwyższego poziomu
SM2_CURR+N
SM2_CURR+1 uruchamia warstwę pod bieżącą warstwą ze wszystkimi podpoziomami.
page_id
wszystkie podmenu tej strony są wyświetlane. (Identyfikator strony można określić, edytując stronę w panelu administracyjnym, zostanie ona wyświetlona w pasku adresu przeglądarki: http://SITE/admin/pages/modify.php?page_id=35
$aMaxLevel
rozpoczyna się od poziomu podanego w $aStart, aż do poziomu podanego tutaj.
SM2_ALL
SM2_CURR+N
SM2_CURR+3 Wszystkie podpoziomy nadrzędne + bieżące + 3
SM2_START+N
poziomy są wyświetlane niezależnie od tego, na którym poziomie znajduje się bieżąca strona.
SM2_START+1 poziom startowy + jeden poziom poniżej.
SM2_MAX+N
warstwy poniżej bieżącego poziomu nie są wyświetlane.
SM2_MAX+1 poziom startowy i jeden poziom poniżej niego.
$Aoptions
na przykład, aby zdefiniować zarówno TRIM, jak i PRETTY, użyj : (SM2_TRIM | SM2_PRETTY).
Grupa 1
——-
z tej grupy należy zawsze podać jedną flagę. Te flagi określają, w jaki sposób elementy siostrzane w drzewie menu są tłumione na wyjściu.
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
wszystkie podmenu elementów, których nie ma w ścieżce.
są usuwane.
A-1 -> B-1 -> B-2 -> C-1 -> C-2 (CURRENT) -> D-1 -> D-2 -> C-3 A-2
SM2_CRUMB
i wszystkie prowadzące do niej pozycje menu.
A-1 -> B-2 -> C-2 (CURRENT)
SM2_SIBLING
A-1 -> B-2 -> C-1 -> C-2 (CURRENT) -> D-1 -> D-2 -> C-3
Grupa 2
——-
flagi te są opcjonalne, mogą być łączone w dowolnej liczbie.
SM2_NUMCLASS
SM2_ALLINFO
powoduje to dość duże zużycie pamięci i dlatego należy je stosować ostrożnie.
oznacza to na przykład, że można załadować słowa kluczowe, opis strony i
wszystkie inne dostępne informacje, które normalnie nie są
.
Uwaga: znacznik ten musi być ustawiony przy pierwszym wywołaniu schow_menu2
może być użyty dla odpowiedniego ID menu, lub w połączeniu z
z SM2_NOCACHE, w przeciwnym razie nie ma to wpływu.
SM2_NOCACHE
SM2_PRETTY
podziałami linii do czytelnej formy. Jest to szczególnie przydatne podczas debugowania wyjścia menu.
SM2_BUFFER
SM2_CURRTREE
wyświetlane są tylko pozycje menu bieżącej gałęzi menu.
w razie potrzeby flaga ta może być łączona z dowolną flagą z grupy 1.
SM2_ESCAPE
może to być wymagane w przypadku starszych instalacji WebsiteBaker.
aby wygenerować poprawny wynik HTML.
SM2_SHOWHIDDEN
używaj prywatnych stron przez czas, gdy chcesz, aby strony były ukryte, chyba że są aktywne. Jednak dla zgodności z wersją 4.8, podaj tę flagę, aby umożliwić widoczność ukrytych stron, gdy są aktywne.
SM2_XHTML_STRICT
SM2_NO_TITLE
dla tego parametru istnieje również tryb rozszerzony, w którym opcje są przekazywane jako tablica asocjacyjna. Szczegółowe informacje można znaleźć w sekcji Opcje zaawansowane. W przypadku większości zastosowań nie jest to jednak wymagane.
$aItemOpen
Jeśli ten parametr jest ustawiony na false, domyślny ciąg formatujący
'</A>’, aby zapewnić zgodność ze standardową funkcją show_menu () WebsiteBaker.
ponieważ formatowanie za pomocą klas CSS jest często łatwiejsze, gdy stosuje się je do znacznika <A>, zaleca się użycie następującego formatu: '<li></A>’.
ten parametr może być również użyty jako instancja klasy formatującej dla menu. Bardziej szczegółowy opis można znaleźć w sekcji formatowanie. Jeśli podano tutaj formatowanie, wszystkie argumenty po $aitemopen są ignorowane.
$aitemclose
jeśli ten parametr jest ustawiony na false, używana jest domyślna wartość '</li>’.
$aMenuOpen
jeśli ten parametr jest ustawiony na false, używana jest wartość domyślna”.
$aMenuClose
jeśli ten parametr jest ustawiony na false, używana jest domyślna wartość '</ul>’.
$aTopItemOpen
$aTopMenuOpen
Advanced OPTIONSup
parametr $aOptions można wykorzystać na dwa sposoby. Po pierwsze, jak opisano powyżej w sekcji Opcje, ten typ powinien wystarczyć dla większości przypadków użycia. Jednak w szczególnych przypadkach, aby odnieść się do specjalnych parametrów, niezbędne wartości muszą być podane jako tablica asocjacyjna.
Uwaga: flagi SM2_* są również potrzebne i powinny być przekazywane jako „flagi”.
definiuje liczbę poziomów, które są zawsze wyświetlane względem poziomu menu zdefiniowanego w $aStart. Powoduje to, że znacznik SM2_TRIM jest ignorowany dla tych poziomów.
w celu użycia tej tablicy zaleca się najpierw ją wytworzyć a następnie podać parametr $aOptions z wytworzoną tablicą:
$options = array('flags' => (SM2_TRIM|...), 'notrim' => 1); show_menu2(0, SM2_ROOT, SM2_CURR+1, $options);
FORMAT STRINGSup
następujące znaczniki mogą być używane w ciągach formatu dla $aitemopen i $aMenuOpen i powinny być zastąpione odpowiednim tekstem.
< > tag bez klasy:
'<a href="" target="">' |
|
< > tag z klasą:
'<a href="" target="" class="">' |
|
<li> tag z klasą:
'<li class="">' |
|
<UL > tag z klasą:
'<ul class="">' |
|
lista klas dla tej strony | |
tekst tytułu menu (encja HTML uciekła, chyba że ustawiono flagę SM2_NOESCAPE) |
|
adres URL do pliku obrazu o normalnej reprezentacji | |
adres URL do pliku obrazu z aktywnym wyświetlaczem/najazdem | |
tekst tytułu strony (encja HTML uciekła, chyba że ustawiono flagę SM2_NOESCAPE) |
|
adres URL do pliku obrazu związanego ze stroną | |
URL stron dla tagu <a> | |
strona dla tagu < a> | |
identyfikator strony bieżącego elementu menu. | |
identyfikator strony elementu menu nadrzędnego. | |
poziom strony, jest to ten sam numer użyty w znaczniku CSS” menu-N”. | |
Liczba rodzeństwa aktualnego elementu menu. | |
liczba wszystkich rodzeństwa w tym menu. | |
warunek (szczegóły w sekcji” Formatowanie warunkowe”) |
następujące znaczniki są dostępne tylko wtedy, gdy ustawiono flagę SM2_ALLINFO.
opis strony | |
słowa kluczowe strony |
Formatowanie warunkowe w górę
Instrukcja formatowania warunkowego może przyjmować jedną z następujących form:
B
może to być dowolny ciąg znaków, który nie zawiera znaku ’}’.
może zawierać. Może zawierać dowolny ciąg formatujący z sekcji
Formatuj ciągi’, ale nie ma dalszego testowania warunków (ponieważ znak’} ’ nie jest dozwolony).
C
może to być dowolny ciąg znaków, który nie zawiera znaku ’}’.
może zawierać. Może zawierać dowolny ciąg formatujący z sekcji
Formatuj ciągi’, ale nie ma dalszego testowania warunków (ponieważ znak’} ’ nie jest dozwolony).
warunek jest kombinacją jednego lub więcej porównań logicznych.
jeśli wymagane jest więcej niż jedno porównanie, należy je połączyć z innymi porównaniami
można połączyć za pomocą || (boolean or – OR) lub && (boolean and – AND).
pojedyncze porównanie składa się z lewego argumentu, operatora i prawego argumentu.
np. X = = Y-gdzie X jest lewym operandem, = = operatorem, A Y prawym operandem.
Klasa | sprawdź, czy ta klasa istnieje. Tylko ” = = „i”!= „operatory są dozwolone. W tym przypadku operatory mają znaczenie „zawiera ” lub” nie zawiera „zamiast” jest równe ” lub „nie jest równe”. |
poziom | sprawdzanie poziomu strony. |
sib | sprawdź liczbę rodzeństwa na bieżącej stronie. |
sibCount | Sprawdź całkowitą liczbę rodzeństwa w bieżącym menu. |
id | Sprawdź ID strony. |
target |
< | mniej niż |
<= | mniejsza lub równa |
== | równe |
!= | Nie równe |
>= | większe lub równe |
> | większe niż |
Klasa | jedna z nazw klas” menu -* „określonych w sekcji” wyjście”. |
poziom | Sprawdź poziom strony na podstawie następujących wartości:
|
id | Sprawdź ID strony pod kątem następujących wartości:
|
sib | dodatnia liczba całkowita lub „sibCount”, aby sprawdzić liczbę rodzeństwa w tym menu. |
sibCount | dodatnia liczba całkowita |
target | ciąg znaków, który reprezentuje możliwą specyfikację celu. |
ma podmenu | |
jeśli pierwszy wpis w menu jest | |
nie jest pierwszą pozycją w menu | |
jeśli ostatni wpis w menu jest | |
znajduje się na najwyższym poziomie | |
nie jest na najwyższym poziomie | |
jeśli druga pozycja w menu jest | |
jeśli w menu z więcej niż jedną pozycją | |
jest w menu który nie ma dokładnie 2 elementów | |
jest w menu rodzeństwa lub w podmenu menu rodzeństwa | |
jest punktem nadrzędnym bieżącego id | |
łańcuch '_self’jest zawarty w atrybucie target. |
jeśli dodana zostanie klauzula else, zostanie ona wykonana we wszystkich innych przypadkach.
na przykład, ” foo ” jest zawsze wykonywane, gdy sprawdzenie if jest błędne, więc:
nie jest drugą pozycją w menu | |
nie znajduje się w menu z więcej niż dwoma wpisami |
jest pierwszym wpisem lub czwartym lub wyższym wpisem w menu | |
Jeśli bieżący wpis jest i ma podmenu |
Uwaga:
wszystkie kontrole będą wykonywane w kolejności, w jakiej są odnotowywane, ponieważ:
- nie ma sprawdzania możliwych Pętli (wszystkie sprawdzania są zawsze wykonywane).
- kontrole nie są zgrupowane (nawiasy kontroli nie są obsługiwane)
- obie te rzeczy mają tę samą wartość.
FORMATTERup
uwaga: jest to zaawansowana i rzadko używana funkcja!
dzięki rozległej wiedzy w zakresie programowania PHP możliwe jest użycie predefiniowanego
formatowania show_menu2 z własnym.
w załączeniu.php z show_menu2 możesz zobaczyć jak napisać formater.
API, które musi być użyte wygląda tak:
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() { }};
strona wydana na licencji GNU General Public License