Wielopoziomowe menu MODX wykorzystujące Bootstrap. PdoMenu - tworząc menu w MODX Wayfinder, nazwy pomiędzy zakresami nie są wyświetlane
Ale to nie dla nas ;).
Zrobimy wszystko od podstaw. Dlaczego my (ja) tego potrzebowaliśmy, skoro istnieją już gotowe opcje? Bo tak mi się bardziej podoba. Ponieważ uważam, że takie podejście jest jak najbardziej prawidłowe. Bo wiedząc, jak opracować własny, możemy łatwo zrozumieć cudzy kod, zmienić go, naprawić błędy, czy uzupełnić go o niezbędną w konkretnym przypadku funkcjonalność. I w końcu tworzenie własnych jest często bardzo przyjemne!
W poniższej narracji założono, że czytelnik ma minimalną wiedzę na temat programowania w języku PHP. Teoretycznie osoby, które w ogóle nie rozumieją kodu, będą mogły skopiować kod i odtworzyć wszystkie działania, które zostaną omówione poniżej. Może jednak lepszym rozwiązaniem będzie dla nich skorzystanie z gotowych fragmentów a la Ditto, gdyż dostarczają one sporo możliwości zewnętrznej konfiguracji bez wchodzenia w główny kod.
Nie chcę tu dyskutować, co jest lepsze dla użytkownika – wziąć gotowy, czy opracować własny… Obydwa przypadki mają swoje wady i zalety. Dla mnie osobiście zalet tej drugiej opcji jest więcej. Także każdy czytelnik podejmie decyzję sam.
Przyjrzyjmy się więc jeszcze raz naszemu. Ponieważ na naszej stronie internetowej znajduje się sporo różnych części oprogramowania i musimy od czegoś zacząć, zaprogramujmy więc...
Górne menu
Pod pojęciem „górne menu” rozumiem zestaw linków do stron znajdujących się w górnej części witryny (patrz rysunek poniżej):
Pierwszy przykład tworzenia fragmentu opiszę bardzo szczegółowo; w przyszłości skupię się głównie na najistotniejszych szczegółach.
Porównajmy to z naszym drzewem witryn w systemie zarządzania, które zbudowaliśmy w poprzednim artykule:
Jak widać na rysunku, w drzewie witryny wyróżnione są cztery dokumenty (mianowicie „Blog”, „O autorach”, „Zdjęcia” i „ Informacja zwrotna"), które następnie utworzą linki w górnym menu.
Przypomnę też, że wcześniej ukryliśmy dokumenty, których nie chcemy pokazywać w menu. Przykładowo w ustawieniach dokumentu o nazwie „Wyszukiwanie w witrynie” usunęliśmy pole wyboru „Pokaż w menu”, a pozostałe dwa dokumenty „Linki” i „Kategorie” ukryliśmy na stronie odznaczając pole wyboru „Publikuj” w ustawienia dokumentu (zakładka „Ustawienia strony”) w ustawieniach dokumentu).
Dlatego w poprzednim artykule przygotowaliśmy menu górne w systemie sterowania.
Przejdźmy teraz do kwestii wyświetlania naszych działań bezpośrednio na stronie.
Większość programów znajdujących się w serwisie realizowana jest poprzez tzw. " ", tj. poszczególne fragmenty kodu (można je również rozumieć jako pojedyncze funkcje lub podprogramy) w PHP. Dlatego też, aby zaimplementować wyświetlanie górnego menu w MODx, musimy także stworzyć nowy fragment, zaprogramować go i dodać wywołanie tego fragmentu w szablonie w odpowiednim miejscu.
Przejdźmy do systemu zarządzania, otwórzmy zakładkę „Zasoby” -> „Zarządzanie zasobami” -> zakładkę „Snippets” i klikamy w link „Nowy fragment”. W polu „Nazwa fragmentu” wpisz „TopMenu” bez cudzysłowów i na razie po prostu zapisz pusty fragment bez kodu. Po zapisaniu, w zakładce „Snippets” zobaczymy nazwę naszego fragmentu.
Przypomnę, że w naszym szablonie górne menu umieściliśmy w kawałku „TOPMENU”. Przejdźmy do zakładki „Chunks” i otwórzmy fragment „ ”. W zawartości tego fragmentu zobaczymy następujący kod:
- Blog
- O autorach
- Zdjęcia
- Informacja zwrotna
Ten kod tworzy nasze menu. Skomentujmy to i dodajmy wywołanie fragmentu „TopMenu” we fragmencie:
[]
Tutaj znowu będziemy musieli zrobić małą dygresję, aby wyjaśnić znaczenie tej konstrukcji []. Faktem jest, że za pomocą konstrukcji takich jak [] lub [!SnippetName!] możemy wywoływać fragmenty w dowolnym miejscu w naszych szablonach, fragmentach, a nawet na dowolnej pojedynczej stronie witryny.
W tym przypadku konstrukcja [] oznacza wywołanie buforowane fragment, tj. wywołanie podprogramu dynamicznego, którego wynik zostanie obliczony i wykonany jednorazowo, a następnie przy ładowaniu strony, na której wywołany jest ten fragment, wynik pozostanie niezmieniony, ponieważ fragment nie jest już wywoływany ponownie. W ten sposób oszczędzamy zasoby na naszym serwerze WWW (a to zawsze jest bardzo ważne, gdy na zasobie panuje duży ruch).
Są jednak sytuacje, gdy trzeba za każdym razem ponownie wykonywać fragment kodu i nie można buforować wyników. W takich przypadkach używana jest konstrukcja [!SnippetName!], która zawsze wymusi wykonanie fragmentu kodu bez buforowania. Przez analogię ta konstrukcja nazywa się wezwaniem niebuforowalne skrawek.
Zapiszmy więc fragment „TOPMENU” i zaktualizujmy stronę witryny. Hmm, co dziwne, menu górne zniknęło. Ale czy to naprawdę jest takie zaskakujące? Komentując kod HTML menu we fragmencie, ukryliśmy jego wyświetlanie w przeglądarce (sprawdź to, patrząc na kod źródłowy Strony HTML). Ale nasz fragment „TopMenu” nic nie robi, ponieważ nic jeszcze do niego nie dodano. Poprawmy to niedociągnięcie :).
Wróćmy do zakładki „Snippets”, otwórz utworzony fragment „TopMenu” i spróbujmy przetestować jego możliwości... Cierpliwości, moi zaawansowani czytelnicy, nie każdy zna te szczegóły.
Najpierw napiszmy najprostszy kod (zwykły kod PHP):
echo "Testuję...";
?>
Przed zapisaniem wybierz „Kontynuuj edycję”, ponieważ będziemy musieli zmienić treść naszego fragmentu więcej niż raz, a potem zapiszemy fragment. Odświeżmy stronę serwisu i zobaczmy w miejscu górnego menu... cóż, szczerze mówiąc, na pierwszy rzut oka nie dostrzeżemy prawie żadnych zmian, poza lekko powiększonym niebieskim tłem menu. Naciśnijmy „CRTL+A”, aby zaznaczyć cały tekst na stronie witryny, a zobaczymy, że nasz fragment mimo wszystko wyświetla tekst „Testowanie…” zamiast menu, tylko kolor tekstu odpowiada kolorowi tła .
Zmieńmy fragment kodu na następujący:
echo” Testowanie...";
?>
Teraz wyraźnie widać, że nasz fragment działa i nawet (!) wyświetla jakiś tekst. Cóż, to świetnie, ale nie wystarczy do naszego zadania, ponieważ musimy zadbać o to, aby nasz fragment wyświetlał linki z systemu sterowania i dokładnie w tym samym kodzie HTML, który skomentowaliśmy w fragmencie „TOPMENU”.
I znowu mała odskocznia...
Cały system powiązań dokumentów w MODx zbudowany jest na zasadzie: każdy „dokument nadrzędny” zawiera od zera do wielu „dokumentów podrzędnych” („rodzic” -> „podrzędne”).
Każdy dokument w bazie MODx posiada swój unikalny identyfikator „ID” – jest to numer, który widzimy w nawiasach w drzewie serwisu obok każdego dokumentu.
Nawiasem mówiąc, ten unikalny identyfikator ma tylko jedno znaczenie - jednoznacznie identyfikuje konkretny dokument w systemie zarządzania i nic więcej! Szczególnie podkreślam ten fakt, ponieważ spotkałem się z wielokrotnymi próbami zmiany tych identyfikatorów w najróżniejszych celach... Trzeba od razu pamiętać, że jest to po prostu bezcelowe, więc nie próbuj zmieniać tych numerów. Nie należy w ogóle zwracać na nie szczególnej uwagi; zazwyczaj liczby te służą po prostu do generowania linków do określonych dokumentów.
Baza danych MODx tworzy także dla każdego dokumentu specjalne pole „rodzic”. Wartością tego pola jest liczba wskazująca albo unikalny identyfikator dokumentu nadrzędnego, albo, jeśli dokument znajduje się w korzeniu drzewa, zero. Dzięki temu zawsze można jednoznacznie określić, który dokument jest dokumentem nadrzędnym dla danego dokumentu.
Aby wyraźnie zobaczyć o czym właśnie rozmawialiśmy, otwórz phpMyAdmin, wybierz swoją bazę danych i znajdź tabelę (PREFIX)site_content, gdzie (PREFIX) to Twój prefiks wprowadzony podczas instalacji. Zobaczysz wiele pól przechowujących określone dane dokumentu, w tym „ID” – unikalny identyfikator, „rodzic” – numer dokumentu nadrzędnego, „tytuł strony” – tytuł strony i inne.
Korzystając więc z informacji o zasadzie przechowywania i łączenia dokumentów w MODx, możemy zrozumieć, jak uzyskać dane niezbędne do wyświetlenia linków do górnego menu: musimy znaleźć w bazie danych wszystkie dokumenty, które znajdują się w katalogu głównym witryny drzewo, tj. mieć wartość zero w polu „rodzic”.
Używanie Język SQL, podobne żądanie jest opisane mniej więcej tak (Możesz spróbować wpisać tę prośbę w polu wejściowym SQL w phpMyAdmin, po zastąpieniu „modx_” swoim prefiksem):
WYBIERAĆ *
Z `modx_site_content`
GDZIE „rodzic” = 0;
Jednak takie żądanie zwróci nam absolutnie wszystkie dokumenty z katalogu głównego witryny, co nie jest do końca poprawne, biorąc pod uwagę główne zadanie - wyświetlanie linków tylko do tych dokumentów, które mają:
- status opublikowany (w bazie pozycja ta reprezentowana jest przez pole „opublikowany”, gdzie wartość = 1 oznacza, że dokument jest opublikowany, a wartość = 0 oznacza niepublikowany).
- nieusunięte (pole „usunięte”, gdzie 1 jest usuwane, a 0 nie jest usuwane),
- i które mają ustawioną opcję „Pokaż w menu” (pole „ukryj menu”, gdzie 1 oznacza ukryj, a 0 oznacza pokaż w menu).
Dodatkowo patrząc trochę w przyszłość od razu posortujemy dokumenty po parametrze „Pozycja w menu”, który określi położenie każdego linku w naszym menu.
Cóż, z punktu widzenia SQL jest to całkowicie proste zadanie i można je rozwiązać w ten sposób:
WYBIERAĆ *
Z `modx_site_content`
GDZIE „opublikowano” = 1
ORAZ „rodzic” = 0
ORAZ „usunięte” = 0
ORAZ „ukryjmenu” = 0
ZAMÓW PRZEZ `menuindex` ASC;
Teoretycznie wszystkie zapytania SQL można wykonać we fragmentach bezpośrednio za pomocą Skrypty PHP, za każdym razem łącząc bazę danych na nowo i wykonując wiele innych rutynowych operacji, powtarzając je w kółko... Ale, widzisz, to zaprzeczałoby celowi używania frameworka, którym z pewnością jest nasz system zarządzania, ponieważ MODx, wśród innych zalet, zapewnia gotowy zestaw fundusze interfejs oprogramowania(API, interfejs programowania aplikacji). API to funkcje oprogramowania, które ujednolicają i ułatwiają wiele procesów przetwarzania danych.
Wykorzystajmy w naszym fragmencie jedną z wymienionych funkcji API „getDocumentChildren”. Funkcja „getDocumentChildren” jako parametry otrzymuje następujące dane:
- $id - numer dokumentu nadrzędnego,
- $active - wybierz tylko dokumenty opublikowane lub niepublikowane (odpowiednio 1 lub 0),
- $usunięte - zaznacz tylko dokumenty usunięte lub nieusunięte (1 | 0),
- $pola - pola wybrane z bazy danych,
- $where - warunki specjalne, tj. GDZIE warunek w Zapytanie SQL,
- $sort - pole, według którego mają zostać posortowane wyniki
- $kierunek - kierunek sortowania, może przyjmować wartości ASC lub DESC, tj. sortuj od najmniejszej do największej wartości i odwrotnie
- $limit - limit żądań, tj. Warunek LIMIT w zapytaniu SQL
$results = $modx->getDocumentChildren(
$id = 0,
$aktywny = 1,
$usunięty = 0,
$gdzie = "ukrytemenu = 0",
$sort="indeks menu",
$katalog="ASC",
$limit
);
Wydrukować("
Foreach($wyniki jako $klucz => $wartość) (
print_r($wartość);
}
Wydrukować("");
?>
Zapisz fragment i odśwież stronę. W wyniku wykonania zaktualizowanego fragmentu „TopMenu” zobaczysz listę tablic wraz z ich wartościami, posortowaną według wartości pola „menuindex” od najmniejszej do największej. Spróbuj zmienić parametr $dir="ASC" na $dir="DESC" - w rezultacie tablice zostaną przebudowane i dokument z największą wartością pola "menuindex" zostanie wyświetlony jako pierwszy dokument.
Doświadczeni programiści zapewne rozumieją, że uzyskany wynik zapewnia już wszystko, czego potrzeba do zbudowania gotowego menu z linkami. No prawie wszystko. W każdym razie będę kontynuował: przepiszmy kod PHP, aby maksymalnie zbliżyć się do pożądanego rezultatu.
$results = $modx->getDocumentChildren(
$id = 0,
$aktywny = 1,
$usunięty = 0,
"id, tytuł strony, opublikowany, indeks menu, usunięty, ukryj menu, tytuł menu",
$gdzie = "ukrytemenu = 0",
$sort="indeks menu",
$katalog="ASC",
$limit
);
$przedmioty = "";
$wyjście = "";
Foreach($wyniki jako $klucz => $wartość) (
$przedmioty.= "
„.$wartość[„tytuł strony”].”
}
Jeśli ($przedmioty != "") (
$wyjście = "
- \N";
$wyjście .= $przedmioty;
$wyjście.= "
}
Zwróć $wyjście;
Nie będziemy szczegółowo analizować kodu, ponieważ jest to najzwyklejszy kod PHP, nic więcej. Jeżeli ktoś nie rozumie znaczenia jakiejś konstrukcji, proszę o pozostawienie komentarza, a jeszcze lepiej o udanie się na odpowiednie fora wsparcia.
Zapiszmy nowy fragment kodu i odświeżmy stronę. W wyniku wykonania kodu zobaczymy prawie to, co chcieliśmy uzyskać:
Te. Są to już automatycznie wygenerowane linki, których struktura całkowicie powtarza strukturę dokumentów w drzewie MODx. Aby to przetestować, spróbuj utworzyć dokument testowy w katalogu głównym witryny i odśwież stronę.
Jednak to nie wszystko. Wielu pewnie już zauważyło, że są linki, ale linków nie ma... Paradoks :). Chodzi mi o to, że w menu wyświetlają się nazwy dokumentów, ale linki do nich nie działają. Jest to logiczne, ponieważ na razie kod łącza wyświetla „#” zamiast rzeczywistych ścieżek.
Aby rozwiązać ten problem, musisz poznać kolejną niezwykle przydatną funkcję MODx: adres dowolnej wewnętrznej strony serwisu można uzyskać za pomocą następującej konstrukcji [~id~], gdzie id to unikalny numer wymagany dokument, tj. ten sam numer wskazany w nawiasach obok nazwy każdego dokumentu w drzewie serwisu. Zatem dodając taką konstrukcję [~1~] do treści szablonu/fragmentu/strony,
-
- indeks – alias dokumentu „Blog”, jeśli jako alias dokumentu wprowadziliśmy „indeks”, lub
- 1.html, jeśli nie wpisaliśmy nic w polu „Pseudonim” dla dokumentu „Blog”.
- jeśli przyjazne linki są wyłączone, zobaczymy tekst indeks.php?id=1
Przepiszmy fragment, korzystając z tych informacji:
$results = $modx->getDocumentChildren(
$id = 0,
$aktywny = 1,
$usunięty = 0,
"id, tytuł strony, opublikowany, indeks menu, usunięty, ukryj menu, tytuł menu",
$gdzie = "ukrytemenu = 0",
$sort="indeks menu",
$katalog="ASC",
$limit
);
$przedmioty = "";
$wyjście = "";
Foreach($wyniki jako $klucz => $wartość) (
$przedmioty.= "
„.$wartość[„tytuł strony”].”
}
Jeśli ($przedmioty != "") (
$wyjście = "
- \N";
$wyjście .= $przedmioty;
$wyjście.= "
}
Zwróć $wyjście;
Zmieniliśmy więc # na [~".$wartość["id"].."~], tj. w rzeczywistości dla każdego dokumentu z tablicy jego unikalny identyfikator jest wstawiany wewnątrz konstrukcji [~id~]. W rezultacie otrzymujemy menu z działającymi linkami.
Już prawie osiągnęliśmy ideał... Jednak nawet teraz pozostaje jeszcze jeden szczegół, na który trzeba zwrócić uwagę: projektant ustalił, że nasze aktywne łącze powinno być podświetlone białym tłem i odpowiednio zmienić kolor łącza na pomarańczowy.
Aby to osiągnąć, ponownie zdradzimy tajemnice MODx CMS :). W API ukryta jest funkcja $modx->documentIdentifier, która zwraca wartość unikalnego identyfikatora bieżącej strony. Będziemy go potrzebować do ustalenia aktywnej strony i podświetlenia jej w menu:
$results = $modx->getDocumentChildren (
$id = 0,
$aktywny = 1,
$usunięty = 0,
"id, tytuł strony, opublikowany, indeks menu, usunięty, ukryj menu, tytuł menu",
$gdzie = "ukrytemenu = 0",
$sort="indeks menu",
$katalog="ASC",
$limit
);
$cid = $modx->identyfikator dokumentu;
$przedmioty = "";
$wyjście = "";
Foreach($wyniki jako $klucz => $wartość) (
if ($wartość["id"] == $cid) (
$aktywny = " id=\"aktywny\"";
}
w przeciwnym razie(
$aktywny = "";
}
$przedmioty.= "
„.$wartość[„tytuł strony”].”
}
Jeśli ($przedmioty != "") (
$wyjście = "
- \N";
$wyjście .= $przedmioty;
$wyjście.= "
}
Zwróć $wyjście;
No i jak wyszło? To zadziałało!
Ale nie myślałeś, że to wszystko się na tym skończy, prawda? I słusznie. Stawiamy sobie najwyższą poprzeczkę, chcemy wykorzystać maksymalne możliwości MODx. Dlatego jest jeszcze jeden mały szczegół, który przeoczyliśmy.
Przyjrzyjmy się bliżej nazwom pól, o które prosimy za pomocą funkcji getDocumentChildren: „id, tytuł strony, opublikowane, menuindex, usunięte, hidemenu, menutitle”. Wśród nich znajduje się takie pole jak „menutitle”. Jak sama nazwa wskazuje, w tym polu można przechowywać tytuł menu. System sterowania posiada także pole wejściowe „Pozycja menu”. To pole jest opcjonalne. Logika jest jednak taka, że jeśli to pole zostanie wypełnione, to tekst linku w menu musimy zastąpić tym, który wprowadzi użytkownik. Cóż, zróbmy to:
/********************************
Nazwa: Menu główne
Cel: Wyświetlenie górnego menu
Projekt: Strona demonstracyjna MODx
********************************/
$results = $modx->getDocumentChildren(
$id = 0, // Identyfikator dokumentu nadrzędnego
$active = 1, // Wybierz tylko opublikowane dokumenty
$deleted = 0, // Wybierz tylko nieusunięte dokumenty
"id, tytuł strony, opublikowany, menuindex, usunięty, ukryj menu, tytuł menu", // Wybierz pola z bazy danych
$where = "hidemenu = 0", // Wybierz tylko te dokumenty, które mają zostać opublikowane w menu
$sort="menuindex", // Sortuj dokumenty według pola menuindex
$dir="ASC", // Sortuj dokumenty w kolejności rosnącej
$limit = "" // Nie stawiamy ograniczeń (parametr LIMIT w zapytaniu SQL)
);
$cid = $modx->identyfikator dokumentu; //pobierz identyfikator bieżącej strony
$przedmioty = "";
$wyjście = "";
Foreach($wyniki jako $klucz => $wartość) (
if ($wartość["id"] == $cid) (
$aktywny = " id=\"aktywny\"";
}
w przeciwnym razie(
$aktywny = "";
}
if ($wartość["tytuł menu"] != "") (
$tytuł = $wartość["tytuł menu"];
}
w przeciwnym razie(
$tytuł = $wartość["tytuł strony"];
}
$przedmioty.= "
„.$tytuł.”
}
// Jeśli udało nam się znaleźć przynajmniej jeden pozycja menu,
// utwórz kod menu HTML
if ($elementy != "") (
$wyjście = "
- \N";
$wyjście .= $przedmioty;
$wyjście.= "
}
// Zwraca wynik fragmentu
zwróć $wyjście;
Teraz spróbuj wpisać tekst w polu wejściowym „Element menu” dowolnego dokumentu... Czy wszystko działa? Niesamowity!
P.S.: Niektórzy czytelnicy mogą być zaskoczeni, że podążając za linkami w naszym menu, zawartość stron się nie zmienia, chociaż wydaje się, że sądząc po ścieżce w adresie przeglądarki, przenosimy się na nowe strony... Uwierz dla mnie jest to całkowicie normalne, ponieważ Absolutnie wszystkie strony używają obecnie tego samego szablonu. W tym szablonie do tej pory zdynamizowaliśmy jedynie górne menu; wszystkie pozostałe szczegóły pozostały niezmienione. Na pewno zajmiemy się tym później, ale na razie - nie panikuj ;).
Wniosek:
Tak więc kolejny artykuł doszedł do logicznego wniosku.
Wyniki szkolenia:
- Próbowaliśmy zrozumieć cel niektórych pól wejściowych w dokumentach MODx i przyjrzeliśmy się przechowywaniu tych informacji w bazie danych;
- Dowiedzieliśmy się o nowych specjalnych projektach MODx: [], [!SnippetName!], [~id~];
- Dowiedzieliśmy się o dostępności specjalnego API i skorzystaliśmy z niektórych funkcji API;
- I bazując na tej wiedzy stworzyliśmy nasz nowy fragment w MODx!
Zacznijmy od lekcji 8 MODx Revolution dla początkujących. Przypomnę, że tworzymy stronę internetową do nauki MODx Revolution. Na ostatniej lekcji przyjrzeliśmy się pojęciu fragmentów kodu, czyli fragmentów kodu PHP, które pozwalają nam dodawać funkcjonalności do naszej witryny internetowej. W tej lekcji przyjrzymy się specjalnemu fragmentowi - Wayfinderowi i wykorzystamy go do stworzenia dynamicznego menu dla naszej witryny.
Co to jest Wayfinder?
Znalezisko to fragment wyświetlający nieposortowaną listę łączy do zasobów w drzewie witryny. Typ wyniku listy zależy od wywołania fragmentu i parametrów tego wywołania. Ogólnie rzecz biorąc, oznacza to, że gdy umieścisz w swoim szablonie wywołanie Wayfinder, rozpocznie ono wyszukiwanie zasobów spełniających określone w nim parametry i zwróci listę linków do tych zasobów w formacie listy nieposortowanej lub w formacie zdefiniowanym przez Ciebie.
Dlaczego warto korzystać z Wayfindera?
Zwykle używam Wayfindera do tworzenia dynamicznej nawigacji stron internetowych, czyli menu. Od większości Szablon HTML ov używaj nieuporządkowanych list do tworzenia menu, a Wayfinder jest idealne narzędzie do tych celów. Tworząc witrynę, możesz starannie wstawić adresy URL do menu nawigacyjnego, tak jak robiłeś to wcześniej w statycznej witrynie HTML. Jednocześnie za każdym razem, gdy chcesz usunąć lub utworzyć stronę, musisz wprowadzić odpowiednie zmiany w swoim menu, zmienić adresy URL. Użycie fragmentu Wayfindera do dynamicznego generowania menu pozwala uniknąć tego bólu głowy, ponieważ automatycznie wykrywa zmiany i odpowiednio zmienia menu.
Wayfinder jest dość elastycznym narzędziem i pozwala określić, jakie zasoby uwzględnić lub wykluczyć z menu, jaki jest szablon menu, jak głębokie jest menu Twojej witryny. Granicę Twoich możliwości wyznacza Twój kod HTML/CSS.
Jak korzystać z Wayfindera?
Jak już wspomnieliśmy w poprzedniej lekcji, składnia wywoływania fragmentów wygląda następująco: [[!somesnippet]]
To tylko podstawowe wywołanie i to nie wystarczy, poza tym musimy zdefiniować pewne właściwości tego wywołania. W przypadku Wayfindera minimum, które należy zdefiniować we właściwościach, to miejsce w drzewie zasobów, w którym Wayfinder powinien rozpocząć tworzenie listy zasobów. Zatem wywołując fragment kodu Wayfindera, należy podać przynajmniej jeden parametr – początkowy identyfikator. Podstawowe wywołanie fragmentu Wayfindera w tym przypadku będzie wyglądać następująco:
To wywołanie mówi Wayfinderowi, aby zaczął od korzenia drzewa ( ID 0 oznacza katalog główny witryny) i pokazuje wszystkie opublikowane zasoby, które nie mają zaznaczenia w polu wyboru Ukryj w menu.
Jeśli spojrzymy na szablon, którego używamy, zobaczymy górne menu z kilkoma opcjami i listami rozwijanymi.
Przyjrzyjmy się szablonowi i wynikowemu kodowi to menu:
Jak widać, jest to zagnieżdżona lista nieuporządkowana. Zastąpmy ten kod podstawowym wywołaniem Wayfindera i zobaczmy, co otrzymamy. Usuń powyższy kod i wklej w jego miejsce:
[[!Wayfinder? &startId=`0` ]]
Jeśli używasz tego samego szablonu co ja, Twój kod będzie wyglądał mniej więcej tak:
Zapisz szablon i spójrz strona główna, powinno to wyglądać tak:
Fantastyczny! Jak widać, nasze poprzednie menu, które posiadało kilka opcji, zostało teraz zastąpione prostym menu z tylko jedną pozycją – Strona główna. To mówi nam, że Wayfinder działa tak, jak powinien i pobiera jedną stronę z naszej witryny i wyświetla jej tytuł jako pozycję menu.
Stwórzmy jeszcze kilka zasobów. Zamierzam dodać stronę Informacje z 3 stronami podrzędnymi (MODx, Poradniki, Strony Kontaktowe i FAQ). Możesz utworzyć dowolne zasoby lub strony dla swojej witryny. Celem tego ćwiczenia jest utworzenie kilku zasobów, aby Wayfinder miał coś do wyświetlenia.
Skończyłem tworzenie stron i drzewo zasobów mojej witryny wygląda następująco:
Mamy teraz kilka stron, zobaczmy jak wywołanie Wayfindera wygeneruje menu dla naszej witryny:
Dobra wiadomość jest taka, że wszystkie nasze strony pojawiły się w menu i klikając każdą pozycję menu zostajemy przeniesieni na odpowiednią stronę. (Aby przetestować ten element, dodaj trochę tekstu do każdej strony, na przykład na stronie Informacje możesz dodać „To jest strona Informacje”, a ten komunikat pojawi się po otwarciu strony. Pamiętaj, że musimy zdefiniować szablon dla każdej stronę, ale w w tej chwili nie mam zamiaru się tym przejmować).
Zła wiadomość jest taka, że formatowanie menu jest zepsute, ale możemy to naprawić. Trzask kliknij prawym przyciskiem myszy najedź kursorem na stronę internetową i spójrz na kod źródłowy (lub użyj do tego Firebuga), teraz to zobaczysz Znalezisko generuje HTML w następujący sposób:
- Dom
- O
- MODxCMS
- Pad kodujący
- Blog
- Siły zbrojne
- Skontaktuj się z nami
- Poradniki
- Często zadawane pytania
Jak widać, wygląda to bardzo podobnie do naszego początkowego kodu statycznego, z kilkoma wyjątkami. Najpierw wygenerowano Wayfinder
- przedmiot bez klasy menu sf który został użyty w naszym kodzie statycznym. Szablon potrzebuje tej klasy do pracy z CSS. To też jest jasne
- elementy mają parametr przęsło, który odnosi się do elementów tekstu łącza w oryginalnym kodzie statycznym i nie jest obecny w wygenerowanym kodzie Wayfindera. Dodatkowo nasz statyczny kod HTML posiada klasę element bieżącej strony, który nie jest reprezentowany w naszym fragmencie kodu Wayfindera. Wszystkie te brakujące elementy sprawiają, że nasze menu wygląda nieestetycznie.
Jak dostosować styl wyjściowy fragmentu Wayfindera
Patrząc na to, jak Wayfinder generuje kod, pojawia się bardzo naturalne pytanie: „Jak dodać brakujące fragmenty kodu, abyśmy chcieli wyświetlić menu w takiej formie, jaką potrzebujemy?” Odpowiedź jest bardzo prosta: używamy fragmentów szablonów do formatowania danych wyjściowych fragmentu Wayfindera.
Wayfinder to elastyczne narzędzie, które można zdefiniować za pomocą parametrów wygląd wyjście. Niektóre ogólne parametry pozwalają określić, na jakim poziomie rozpocząć budowanie menu, jakich pozycji nie uwzględniać w menu itp. Pozostałe parametry to parametry szablonu, które pozwalają ustawić kod szablonu HTML dla Twojego menu itp. Opisy tych ostatnich znajdziesz w oficjalnej dokumentacji - http://rtfm.modx.com/display/ADDON/Wayfinder.
Uwaga: Niektóre parametry Wayfindera mają wartości domyślne.
To wyjaśnia na przykład, dlaczego w menu wygenerowanym przez Wayfindera element strony głównej ma nazwę klasy „ pierwszy aktywny" Jest to klasa domyślna, ale możemy ją zastąpić, definiując własne klasy w fragmentach szablonu.
W tym samouczku będziemy używać kilku opcji Wayfindera, ale zachęcam Cię do zapoznania się z nimi wszystkimi i przećwiczenia ich używania w miarę możliwości, aby zrozumieć wszystkie ich możliwości. Ponieważ domyślne ustawienia Wayfindera są wyraźnie udokumentowane na oficjalnej stronie internetowej, głupotą byłoby mówić o nich tutaj. Będziemy ich używać coraz częściej, przeglądając różne menu.
Aby rozpocząć pracę nad szablonem menu, utwórzmy kilka miniszablonów i zapiszmy je w kawałkach. Zobaczysz, że w tych fragmentach używamy kodu HTML, ale zastępujemy elementy dynamiczne wypełniacze(Lub symbole zastępcze jak się je nazywa) którego składnia wygląda następująco: [[+symbol zastępczy]]. Symbole zastępcze, których używamy, są specyficzne dla fragmentu Wayfindera, a ich definicja jest oczywista na podstawie nazwy, ale zawsze możesz odwołać się do dokumentacji MODx, aby uzyskać pełniejszą pomoc.
Oto fragmenty, których użyję do stworzenia naszego szablonu:
Menu 7w1Zewnętrzne– będzie zawierać kod HTML naszego zewnętrznego kontenera ul.
Widać, że dodałem klasę dla zewnętrznej ul. Alternatywny sposób w tym celu należy użyć symbolu zastępczego wf.classes, a następnie dodać nazwę klasy do bieżącego wywołania Wayfindera za pomocą parametru klasa zewnętrzna. Ale dla uproszczenia zastosujmy pierwszą metodę, ale obie będą działać dobrze...
Menu 7w1Wiersz– będzie zawierać kod HTML pozycji menu pierwszego poziomu
- [[+wf.linktext]][[+wf.wrapper]]
- [[+wf.linktext]][[+wf.wrapper]]
- [[+tytuł menu]][[+opakowanie]]
- [[+tytuł menu]] ([[+dzieci]]) [[+opakowanie]]` &countChildren=`1` ]]
- . Nie będziemy przepisywać fragmentu, ale zmiana klasy w stylach nie stanowi problemu.
- Menu w formie listy, tabeli, obrazów, ikon itp.
- Menu statyczne
- Menu z różnymi efektami (rozwijane, rozwijane itp.)
- Mapa serwisu
- [[+wf.linktext]][[+wf.wrapper]]
- wf.classes - wyświetla klasy pobrane z zestawu parametrów Wayfindera (wraz z atrybutem class="")
- wf.classnames - wyświetla nazwy klas (bez class="")
- wf.wrapper - wyjście zawartości wewnętrznej (wiersz).
- wf.classes - wynik klasy (wraz z atrybutem class="")
- wf.classnames - wyjście odpowiednich klas (bez klasy="")
- wf.link - href="" wartość atrybutu łącza menu
- wf.title - nazwa tekstu tytułu linku z pola określonego w parametrze &titleOfLinks
- wf.linktext - tekst dla aktywnego linku określony w polu przekazywanym w parametrze &textOfLinks
- wf.wrapper - wyświetla zawartość wewnętrzną, taką jak podmenu
- wf.id - wyświetla unikalny identyfikator atrybutu. Aby ten symbol zastępczy otrzymał wartość, należy określić parametr &rowIdPrefix. Wartością jest prefiks + identyfikator dokumentu.
- wf.attributes - wyświetla link do atrybutów bieżącego elementu
- wf.docid - identyfikator dokumentu bieżącego elementu
- wf.description - opis bieżącego elementu
- wf.level - bieżący poziom zagnieżdżenia
- [[+wf.linktext]][[+wf.wrapper]]
- [[+wf.linktext]] - [[+wf.opis]] [[+wf.wrapper]]
[[+wf.tytuł]]
[[+wf.tytuł]]
Główną ideą jest to, że dodałem tag do tekstu łącza menu, tak jak w oryginalnym statycznym kodzie HTML. Dołączyłem także symbol zastępczy wf.classes, co pozwoli mi zdefiniować klasę dla bieżącej strony, która zastąpi domyślną klasę „aktywną”.
Menu 7 w 1 Wewnętrzne– będzie zawierać kod HTML wewnętrznych kontenerów ul
- [[+wf.wrapper]]
Menu 7 w 1 Wewnętrzny rząd– będzie zawierać kod HTML dla linii elementów poziomu wewnętrznego
To wszystko, teraz nasze fragmenty szablonów są już na swoim miejscu, jak widać (dla porządku umieściłem je w osobnej kategorii):
Teraz możemy zmienić wywołanie Wayfindera, abyśmy mogli użyć tych mini szablonów do wygenerowania Wayfindera. Jeśli spojrzysz na listę parametrów szablonów (przydałoby się mieć http://rtfm.modx.com/display/ADDON/Wayfinder otwarty przed sobą lub wydrukować go i trzymać blisko ekranu), to zobaczę, że nazwałem moje fragmenty podobne do odpowiednich parametrów wywołania fragmentów. Zrobiłem to dla wygody, pomaga mi to śledzić, co jest co, kiedy zaczynam konstruować moje wywołanie. Dodajmy parametry i wywołajmy nasze porcje. Wywołanie Wayfinder będzie teraz wyglądać następująco:
[[!Wayfinder? &startId=`0` &outerTpl=`7in1menuOuter` &rowTpl=`7in1menuRow` &innerTpl=`7in1menuInner` &innerRowTpl=`7in1InnerRow` &hereClass=`bieżący_element_strony` &firstClass=`` &lastClass =`` ]]
Wartość parametru jest umieszczana w apostrofach (`), a nie w pojedyncze cudzysłowy (’).
Świetnie, przyjrzyjmy się temu wyzwaniu. Możesz zobaczyć, że używamy opcji szablonów do wywoływania naszych fragmentów, dzięki czemu Wayfinder generuje potrzebny kod HTML z właściwymi klasami. Zdefiniowałem wywoływanego tutajKlasa parametr i nadał mu wartość bieżący_element_strony tak, aby pasował do statycznego szablonu HTML. Możesz zauważyć, że zostawiłem parametry pierwsza klasa I ostatniaklasa pusty. Powodem tego jest to, że mój szablon HTML nie ustawia klasy dla pierwszej i ostatniej pozycji menu, więc aby uniknąć nakładania się, nadpisałem w nich puste ciągi znaków.
Widać, że nasze menu wygląda dokładnie tak jak chcieliśmy. W menu rozwijanym używane są prawidłowe style. Jeśli spojrzysz na kod źródłowy, zobaczysz, że wygenerowany Znalezisko„om kod HTML zmienił się nie do poznania:
Kod ten pasuje do oryginalnego kodu statycznego naszego szablonu, ale został wygenerowany przez wywołanie Znalezisko.
Istnieje wiele innych opcji, z których możesz skorzystać Znalezisko do tworzenia menu. W kolejnych lekcjach przyjrzymy się złożonym menu i sposobom ich integracji z Wayfinderem. Podsumowując: nasza strona internetowa nabrała już pewnego kształtu, mamy funkcjonalne i dynamiczne menu.
Fragment generowania menu. Może zastąpić Wayfindera i zapewnia większą elastyczność w określaniu parametrów.
Może na przykład zbudować menu od kilku rodziców jednocześnie, wyświetlając ich zarówno razem, jak i w oddzielnych gałęziach.
Daje znaczny wzrost prędkości dopiero przy pierwszym uruchomieniu; wtedy Wayfinder nie jest dużo gorszy, dzięki odpowiedniemu buforowaniu.
Opcje
Domyślnie pdoMenu akceptuje typowe parametry pdoTools i niektóre własne:
Nazwa | Domyślny | Opis |
---|---|---|
&rodzice | Aktualny zasób | Lista rodziców do wyszukiwania wyników, oddzielona przecinkami. Jeśli umieścisz &rodzice=`0`- próbka nie jest ograniczona. Jeśli identyfikator rodzica zaczyna się od łącznika, on i jego elementy podrzędne są wykluczone z wyboru. |
&poziom | 0 (nieograniczony) | Poziom wygenerowanego menu. |
&zasoby | Lista zasobów, które mają być wyświetlone w wynikach, oddzielona przecinkami. Jeśli identyfikator zasobu zaczyna się od łącznika, zasób ten jest wykluczony z wyboru. | |
&szablony | Lista szablonów do filtrowania wyników oddzielona przecinkami. Jeśli identyfikator szablonu zaczyna się od łącznika, zasoby z nim są wykluczone z wyboru. | |
&Gdzie | Szyk dodatkowe parametry próbki zakodowane w JSON. | |
&wyświetlacz | 0 | Włącz wyświetlanie węzłów menu startowego. Przydatne przy określaniu więcej niż jednego „rodzica”. |
&kontekst | Ograniczanie próbki według kontekstu zasobów. | |
&pokażUkryte | 0 | Pokaż zasoby ukryte w menu. |
&pokażNiepublikowane | 0 | Pokaż niepublikowane zasoby. |
&podglądNiepublikowane | 0 | Włącz wyświetlanie niepublikowanych zasobów, jeśli użytkownik ma do tego uprawnienia. |
&ukryjPodmenu | 0 | Ukryj nieaktywne gałęzie menu. |
&wybierać | Lista pól do wyboru, oddzielona przecinkami. Można na przykład określić ciąg JSON za pomocą tablicy &select=`("modResource":"id,tytuł strony,treść")` | |
&sortuj | indeks menu | Dowolne pole zasobu do posortowania, w tym parametr TV, jeśli jest określony w parametrze &obejmuje telewizory, Na przykład &sortby=`("nazwa telewizyjna":"ASC","tytuł strony":"DESC")`. Można określić ciąg JSON z tablicą kilku pól. W przypadku sortowania losowego określ &sortuj=`RANDA()` |
&katalog sortowania | ASC | Kierunek sortowania: malejący lub rosnący. Jeśli pozostawisz puste parametry &sortby i &sortdir, sortowanie będzie odbywać się w kolejności zasobów &zasoby. |
&limit | 0 | Ograniczenie liczby wyników próbek. |
&zrównoważyć | 0 | Pomijanie wyników od początku. Należy używać w połączeniu z wyraźnie określonym &limit |
&sprawdźUprawnienia | Określ, jakie uprawnienia mają być sprawdzane dla użytkownika, na przykład podczas wyświetlania zasobów &checkPermissions=`lista`. | |
&liczDzieci | 0 | Dokładne zliczanie liczby zasobów podrzędnych każdej kategorii i wyświetlanie ich w symbolu zastępczym [[+children]]. Wysyła dodatkowe żądania do bazy danych, więc jest domyślnie wyłączona. |
&do obiektu zastępczego | Jeśli nie jest pusty, fragment kodu zapisze wszystkie dane w symbolu zastępczym o tej nazwie, zamiast wyświetlać je na ekranie. | |
&plPrefiks | wf. | Prefiks dla odsłoniętych symboli zastępczych. |
&pokaż dziennik | 0 | Pokazywać dodatkowe informacje o tym, jak działa fragment. Tylko dla autoryzowanych użytkowników w kontekście „mgr”. |
&Tryb szybki | 0 | Tryb szybkiego przetwarzania porcji. Wszystkie nieprzetworzone tagi (warunki, fragmenty itp.) zostaną wycięte. |
&kryjówka | 0 | Buforowanie wyników fragmentów kodu. |
&Czas pamięci podręcznej | 3600 | Czas ważności pamięci podręcznej w sekundach. |
&schemat | -1 | Schemat tworzenia adresu URL jest przekazywany do modX::makeUrl(), więc możliwe opcje potrzebować . Specjalny typ uri zastępuje wartość uri zasobu bez uruchamiania funkcji. |
&użyjWeblinkUrl | 1 | Wygeneruj łącze na podstawie klasy zasobu. |
&rowIdPrefiks | Prefiks id="" do ustawiania identyfikatora w porcji. | |
&tutajId | identyfikator bieżącego zasobu dla wygenerowanego menu. Należy go podać tylko wtedy, gdy sam skrypt błędnie go definiuje, na przykład podczas wyświetlania menu z fragmentu innego fragmentu. | |
&obejmuje telewizory | Lista parametrów telewizora do wyboru, oddzielona przecinkami. Na przykład &includeTVs=`akcja, czas` da symbole zastępcze [[+akcja]] i [[+czas]] . | |
&przygotuj telewizory | Lista parametrów telewizora wraz z plikami ze źródeł multimediów, dla których należy wygenerować pełne ścieżki. Jeśli zainstalujesz &prepareTVs=`1`, wszystkie telewizory określone w &obejmuje telewizory. | |
&procesujtelewizory | Lista parametrów telewizora, które należy przetworzyć i wyświetlić zgodnie z ich ustawieniami w menedżerze systemu. Jeśli zainstalujesz &processTVs=`1`, wszystkie telewizory określone w &obejmuje telewizory. Spowalnia pracę. | |
&Prefiks telewizyjny | Prefiks parametrów telewizora. |
Opcje szablonu
Te parametry ustawiają fragmenty zawierające szablony do generowania menu.
Nazwa | Opis |
---|---|
&tplZewnętrzny | Fragment projektu całego bloku menu. Wartość domyślna: @INLINE
|
&tpl | Fragment projektu pozycji menu. Jeśli nie określono, zawartość pól zasobów zostanie wydrukowana na ekranie. Wartość domyślna: @INLINE |
&tplTutaj | Fragment projektu bieżącej pozycji menu. |
&tplRozpocznij | Fragment projektu elementu głównego, pod warunkiem, że jest włączony &wyświetlacz. Wartość domyślna: @INLINE [[+tytuł menu]][[+opakowanie]] |
&tplWiersz nadrzędny | Fragment projektu elementu nadrzędnego z dziećmi, który nie podlega warunkom &tplCategoryFolder. Na przykład: @INLINE |
&tplParentRowHere | Fragment projektu bieżącego dokumentu, jeśli zawiera elementy potomne. |
&tplParentRowActive | Fragment projektu rodziców z potomkami w aktywnej gałęzi menu. |
&tplFolder kategorii | Fragment projektu kategorii specjalnej. Za kategorię uważa się rodzica z dziećmi, którego pusty szablon lub rel="kategoria" w polu link_attributes. |
&tplInner | Fragment projektu całego bloku podpozycji menu. Jeśli pusty, użyje &tplZewnętrzny. Na przykład: @INLINE |
&tplInnerRow | Fragment projektu podpozycji menu. Na przykład: @INLINE |
&tplInnerHere | Kawałek do zaprojektowania aktywnego podpunktu menu. |
Opcje klas CSS
Te parametry ustawiają wartość symboli zastępczych [[+classes]] i [[+classes]] dla różnych elementów menu. Symbol zastępczy [[+classnames]] wyświetla tylko nazwę klasy bez atrybutu klasa="", w przeciwieństwie do symbolu zastępczego [[+classes]].
Przykłady
Zwykłe wyjście menu z katalogu głównego witryny na jeden poziom:
[]
Dane wyjściowe wykluczające niektórych rodziców i sprawdzające uprawnienia użytkownika:
[]
Wyświetlanie menu od dwóch rodziców jednocześnie, pokazujące punkty główne:
[]
Wyświetlanie dwóch poziomów zasobów wraz z zliczeniem ilości zagnieżdżonych:
[]` &tplParentRow=`@INLINE
Do stworzenia dynamicznego menu użyjemy gotowego fragmentu Znalezisko. Fragment, jak mamy nadzieję, że pamiętacie z poprzednich lekcji, to fragment kodu PHP, który możemy umieścić w naszym szablonie. Różnica od fragmentów polega jedynie na kodzie i metodzie wywoływania. Jeśli wywołamy fragment za pomocą podwójnych nawiasów klamrowych, fragmenty kodu wywoływane są w następujący sposób [!Nazwa_fragmentu!]- wywołanie niebuforowane lub coś w tym stylu [[Nazwa fragmentu]]- połączenie w pamięci podręcznej. Każdy fragment kodu musi zaczynać się od i koniec ?> . Ponadto każdy fragment można przekazać specjalne znaczenia parametry, które będzie przetwarzał. MODx ma już kilka gotowych fragmentów, które wykorzystamy w przyszłości.
Skrawek Znalezisko służy do organizowania list linków do MODx. Menu naszej witryny to lista takich linków. Znajdźmy najpierw fragment kodu odpowiedzialny za wyświetlenie naszego menu. Menu jest w kawałku CHODNIKOWIEC, oto on:
Wytnijmy ten kod i zamiast tego napiszmy:
((MENU))
Wkleimy kod do nowego fragmentu MENU, w opisie fragmentu napiszemy Menu witryny. Przeanalizujmy teraz ten kod.
Menu naszej witryny to prosta, nienumerowana lista znajdująca się w kontenerze z id="templatemo_menu". Wytnijmy tę listę z kontenera i zamiast tego wstawmy wywołanie naszego fragmentu:
&startId=`0` to parametr o wartości 0, który wskazuje fragmentowi identyfikator folderu, w którym znajdują się przetwarzane dokumenty. Wszystkie nasze dokumenty, które wyświetlimy w menu, znajdują się w folderze głównym, identyfikator folderu głównego wynosi zero. Zobaczmy, co mamy.
Nasze menu działa, tylko aktywny element nie jest już podświetlony na biało:
Aby zrozumieć, dlaczego tak się stało, musimy przyjrzeć się kodowi źródłowemu strony. W Mozilla Firefox robi się to w ten sposób: Zobacz >> Kod źródłowy strony lub po prostu naciskając skrót klawiaturowy Ctrl+U. Znajdź kod naszego menu:
Należy pamiętać, że w kod źródłowy punkt aktywny miał klasa="bieżący", a nasz fragment automatycznie przypisuje się do aktywnego elementu klasa="aktywna". Zauważamy również, że w kodzie źródłowym do tagu została zastosowana klasa
, a teraz do tagu
Znajdź plik w folderze C:/xampp/htdocs/site/www/assets/templates/ szablonmo_style.css i otwórz go za pomocą Notepad++. Szukamy opisu bieżącej klasy w tym pliku, w którym się ona znajduje 198 linia:
#templatemo_menu li .current(
dopełnienie po lewej stronie: 40px;
kolor: #ffffff;
}
zastąpić klasę aktualny NA aktywny, nie zapominając o ponownym przypisaniu go do tagu :
#templatemo_menu li.active a (
dopełnienie po lewej stronie: 40px;
kolor: #ffffff;
}
Zapisz plik. Zobaczmy, co się stało.
Nasze menu sprawdziło się dokładnie tak, jak zamierzyli to projektanci. Teraz możemy poruszać się po stronach naszej witryny za pomocą naszego menu głównego. Gdy dodasz inne dokumenty do folderu głównego, automatycznie pojawią się one w naszym menu. Aby zapobiec wyświetlaniu w menu niechcianych dokumentów, należy je odznaczyć Pokaż w menu. Za pomocą parametru możesz wymusić wykluczenie niechcianego elementu &excludeDocs=`lista identyfikatorów wykluczonych dokumentów oddzielonych przecinkami`.
Aby zapobiec wyświetlaniu w menu dokumentów podrzędnych, które utworzymy na kolejnych lekcjach, dodajmy parametr do wywołania fragmentu poziom, który określa ilość poziomów w menu, domyślnie będą wyświetlane wszystkie poziomy, ograniczymy to tylko do jednego poziomu:
Znalezisko służy do organizowania list linków do MODX. Dzięki obsłudze szablonów umożliwia wyświetlanie list w dowolnej formie:
&rowTpl=`rowTpl`
&zewnętrznyTpl=`zewnętrznyTpl`
&hereClass=`aktywny`
&rowClass=`eNav_li`]]
Parametry fragmentu:
&startId- identyfikator strony nadrzędnej, jeśli podasz 0, będzie on pochodził z katalogu głównego witryny. Wartość domyślna to identyfikator aktywnej strony
&wyświetlacz - pokaż dokument z identyfikatorem startowym w tytule menu, domyślnie false
&poziom- głębokość zagnieżdżenia, domyślnie 0 - wszystkie poziomy
&limit- ogranicz liczbę stron na wyjściu (domyślnie 0 - brak ograniczeń)
&ignorujUkryte- zignoruj checkbox na stronie "Pokaż w menu", tj. jeśli podasz 1, zostaną wyświetlone wszystkie strony. Wartość domyślna to 0. Wyświetlane są tylko te strony, które mają zaznaczone pole wyboru „Pokaż w menu”.
&tel - nazwa substytutu, który zastępuje bezpośrednio wydrukowane wyniki. Wartość domyślna to 0.
&odpluskwić- tryb debugowania (domyślnie 0)
&ukryjPodmenu - rozwiń tylko aktywne podmenu (domyślnie 0)
&usuńNoweLinie- usuwa znak końca linii podczas wyprowadzania (domyślnie 0)
&tekstLinków- dla nazwy łącza menu. Możliwe opcje:tytuł menu, identyfikator, tytuł strony, opis, element nadrzędny, alias, długi tytuł, introtekst . Domyślny tytuł menu
&tytułLinków- dla tytułu linku menu Opcje:tytuł menu, identyfikator, tytuł strony, opis, element nadrzędny, alias, długi tytuł, introtekst. Domyślny tytuł strony
&rowIdPrefiks- ustawia identyfikator (rowIdPrefix + docId) dla każdego elementu. Domyślnie 0
&uwzględnijDokumenty- identyfikator dokumentów oddzielonych przecinkami, które znajdą się w menu (domyślnie nie jest określony)
&wykluczDokumenty - id dokumentów oddzielonych przecinkami, które zostaną wykluczone z menu (domyślnie 0)
&konteksty- kontekst generowania menu. Wartość domyślna jest bieżąca.
&startIdKontekst - Identyfikator kontekstu, z którego pobierane są dokumenty w celu wygenerowania wyniku.
&konfiguracja - Zewnętrzny plik PHP do przechowywania konfiguracji Wayfindera (przykład: core/components/wayfinder/configs).
&schemat - Format generowania adresów URL. Możliwe wartości (na podstawie wywołania API makeURL):
1: (domyślny) adres URL względem adresu witryny;
0: zobacz http;
1: patrz https;
pełny: bezwzględny adres URL zaczynający się od site_url;
abs: bezwzględny adres URL zaczynający się od base_url;
http: bezwzględny adres URL, wymuszony w schemacie http;
https: bezwzględny adres URL, wymuszony w schemacie https.
&sortujWedług - Pole, według którego następuje sortowanie. (domyślny indeks menu)
Opcje:
id, tytuł menu, tytuł strony, introtekst, indeks menu, opublikowany, ukryj menu, element nadrzędny, isfolder, opis, alias, długi tytuł, typ, szablon&sortujZamówienie- Kolejność sortowania.„ASC” lub „DESC”. Domyślny ASC
&Gdzie - Styl JSON parametrów filtrowania (Odpowiada gdzie w MySQL). Na przykład, gdy chcesz ukryć blog lub wiadomości przed dodatkiem Artykuły: &where=`[("class_key:!=": "Artykuł")]`
Przykłady:
tylko foldery wyjściowe: & gdzie = `isfolder = 1
&tutajId - Określ bieżący identyfikator, który ma zostać użyty we fragmencie. Użyj wartości [[*id]], jeśli szablon został określony za pomocą parametru hereTpl i activeRowParentTpl nie został poprawnie zastosowany w pozycji menu. Wartość domyślna to bieżący identyfikator.
Należy go podać tylko wtedy, gdy sam skrypt błędnie go definiuje, na przykład podczas wyświetlania menu z fragmentu innego fragmentu.
&tutajTpl - Szablon hereTpl jest używany, gdy w menu wyświetlana jest aktualna pozycja.
Możliwe symbole zastępcze:
[[+wf.classes]] - miejsce na określenie klasy CSS, która ma zostać użyta (zawiera klasę=" ")
[[+wf.classnames]] - zawiera tylko nazwę klasy CSS (nie zawiera class=" ")
[[+wf.link]] - adres (href) dla linku
[[+wf.title]] - tekst tytułu linku
[[+wf.linktext]] - tekst tytułu linku
[[+wf.wrapper]] - miejsce do wyświetlenia podmenu
[[+wf.id]] - wyjście unikalnego identyfikatora (id)
[[+wf.attributes]] - wyświetla dodatkowe atrybuty linku
[[+wf.docid]] - identyfikator dokumentu dla bieżącego elementu
[[+wf.subitemcount]] - liczba elementów w folderze
[[+wf.description]] – wyświetla wartości pola opisu
[[+wf.introtext]] – wyświetla wartości pola introtekstu
Przykładowy szablon:
Opcje szablonu
Te parametry określają fragmenty zawierające wzorce, które wygenerują dane wyjściowe Wayfindera.
W aktualnej wersji Wayfindera dla MODX Revolution możesz uzyskać dostęp do własnych telewizorów za pomocą symboli zastępczych przedrostków wf. , na przykład [[+my_TV]]
W momencie pisania tego tekstu zostaną zwrócone tylko oryginalne wartości TV - nie będą one sformatowane. Na przykład, jeśli Twój telewizor jest obrazem – normalne użycie jest takie, że telewizor znajdujący się w Twoim szablonie zwróci tag pełnego pełnego obrazu, ale w szablonie Wayfindera – zwrócona zostanie tylko ścieżka do obrazu.
Jeśli chcesz obsługiwać telewizję, możesz to zrobić, wywołując fragment kodu w szablonie wiersza Wayfindera (&rowTpl . Na przykład obraz telewizyjny nazywa się ikona i zwykle szablon używa takiego kodu jako danych wyjściowych:
... ...
Ale ponieważ nie pozwoli to na przetwarzanie telewizji, musisz ją zastąpić:
... ...
A teraz wewnątrz fragmentu ProcessTV umieszczamy następujący kod PHP:
getObject("modResource", $myId); zwróć $doc->getTVValue($myTV);
W rezultacie zwracany jest w pełni przetworzony obraz telewizyjny.
&zewnętrznyTpl
Nazwa porcji zawierającej szablon kontenera zewnętrznego.
Dostępne symbole zastępcze:
Parametr &innerTpl zawiera ten sam zestaw symboli zastępczych co parametr &outerTpl .
&rowTpl
Nazwa fragmentu zawierającego szablon elementów wiersza menu.
Dostępne symbole zastępcze:
Przykład użycia:
Inna opcja:
Przykłady
Pierwszy poziom
[[!Wayfinder? &startId=`0` &poziom=`1`
&rowTpl=`rowTpl`
&zewnętrznyTpl=`zewnętrznyTpl`
&hereClass=`aktywny`
&rowClass=`eNav_li`]]
Kod fragmentu externalTpl
[[+wf.wrapper]]
Kod fragmentu RowTpl
[[+wf.wrapper]]
Drugi poziom (w tym przykładzie elementy menu i podmenu były wizualnie na tym samym poziomie
[[!Wayfinder? &startId=`0` &poziom=`2`
&rowTpl=`rowTplFooterMenu`
&outerTpl=`zewnętrzneTplFooterMenu`
&innerTpl=`innerTplFooterMenu`
&innerRowTpl=`innerRowTplFooterMenu`
&hereClass=`aktywny`]]
Kawałek kodu externalTplFooterMenu
[[+wf.wrapper]]
wiersz kodu fragmentuTplFooterMenu
[[+wf.wrapper]]
fragment kodu internalTplFooterMenu
[[+wf.wrapper]]
kod fragmentu internalRowTplFooterMenu