Zmena horného menu. PdoMenu - vytvorenie menu v MODX Ako nastaviť vertikálne menu v modx evo

Útržok generovania ponuky. Môže nahradiť Wayfinder a umožňuje väčšiu flexibilitu pri špecifikovaní možností.

Dokáže napríklad zostaviť jedálny lístok z niekoľkých rodičov naraz, pričom ich zobrazí spoločne aj ako samostatné vetvy.

Výrazné zvýšenie rýchlosti poskytuje iba pri prvom spustení, potom nie je Wayfinder vďaka kompetentnému ukladania do vyrovnávacej pamäte obzvlášť horší.

možnosti

V predvolenom nastavení pdoMenu akceptuje bežné možnosti pdoTools a niektoré svoje vlastné:

názov Predvolené Popis
&rodičia Aktuálny zdroj Zoznam rodičov pre výsledky vyhľadávania oddelené čiarkami. Ak je položený &rodičia=`0`- vzorka nie je obmedzená. Ak sa ID rodiča začína spojovníkom, rodič a jeho potomkovia sú z výberu vylúčené.
&úroveň 0 (neobmedzene) Vygenerovaná úroveň menu.
&zdroje Zoznam zdrojov, ktoré sa majú zobraziť vo výsledkoch, oddelené čiarkami. Ak ID zdroja začína spojovníkom, tento zdroj je vylúčený z výberu.
&šablóny Zoznam šablón na filtrovanie výsledkov oddelených čiarkami. Ak ID šablóny začína spojovníkom, zdroje s ním sú vylúčené z výberu.
&kde Množstvo ďalších možností výberu kódovaných v JSON.
&zobraziť Štart 0 Povoliť zobrazenie uzlov úvodnej ponuky. Užitočné pri zadávaní viacerých „rodičov“.
&kontext Obmedzenie výberu podľa kontextu zdroja.
&zobraziťSkryté 0 Zobraziť zdroje skryté v ponuke.
&zobraziť nezverejnené 0 Zobraziť nezverejnené zdroje.
&náhľadNezverejnené 0 Povoliť zobrazovanie nezverejnených zdrojov, ak má používateľ na to povolenie.
&skryť Podponuku 0 Skryť neaktívne vetvy ponuky.
&vybrať Zoznam polí na výber oddelených čiarkami. Môžete zadať reťazec JSON napríklad pomocou poľa &select=`("modResource":"id,pagetitle,content")`
&triediť podľa menuindex Akékoľvek pole zdroja, ktorý sa má zoradiť, vrátane parametra TV, ak je špecifikovaný v parametri &zahŕňa televízory, napríklad &sortby=`("tvname":"ASC","pagetitle":"DESC")`. Môžete zadať reťazec JSON s poľom viacerých polí. Pre náhodné triedenie špecifikujte &sortby=`RAND()`
&sortdir ASC Smer triedenia: zostupne alebo vzostupne. Ak necháte parametre &sortby a &sortdir prázdne, triedenie bude prebiehať v poradí zdrojov v &zdroje.
&limit 0 Obmedzenie počtu výsledkov vzoriek.
&posun 0 Preskočiť výsledky od začiatku. Musí sa použiť v spojení s výslovne špecifikovaným &limit
&skontrolovať povolenia Zadajte, ktoré povolenia sa majú pre používateľa kontrolovať, napríklad pri zobrazovaní zdrojov &checkPermissions=`zoznam`.
&počítajDeti 0 Presné počítanie počtu podriadených zdrojov každej kategórie a ich zobrazenie v zástupnom symbole [[+children]]. Vytvára dodatočné dotazy do databázy, takže je predvolene vypnutá.
&toPlaceholder Ak nie je prázdny, úryvok uloží všetky údaje do zástupného symbolu s týmto názvom, namiesto toho, aby sa zobrazil.
&plPrefix wf. Predpona pre exponované zástupné symboly.
&zobraziť denník 0 Zobraziť ďalšie informácie o práci úryvku. Len pre tých, ktorí sú autorizovaní v kontexte „mgr“.
&rýchly režim 0 Režim rýchleho spracovania kúskov. Všetky nespracované značky (podmienky, úryvky atď.) budú odstránené.
&vyrovnávacia pamäť 0 Uloženie výsledkov úryvku do vyrovnávacej pamäte.
&cacheTime 3600 Čas vypršania platnosti vyrovnávacej pamäte v sekundách.
&schéma -1 Schéma generovania adresy URL sa odovzdá modX::makeUrl(), takže možné možnosti potrebovať . Špeciálny typ uri nahrádza hodnotu uri zdroja bez spustenia funkcie.
&použiťWeblinkUrl 1 Vygenerujte odkaz podľa triedy zdroja.
&rowIdPrefix Prefix id="" pre nastavenie identifikátora v bloku.
&tuId ID aktuálneho zdroja pre vygenerovanú ponuku. Musíte ho zadať iba vtedy, ak ho samotný skript nesprávne určí, napríklad pri zobrazení ponuky z časti iného úryvku.
&zahŕňa televízory Zoznam parametrov TV na výber, oddelené čiarkami. Napríklad &includeTVs=`akcia,čas` dá zástupné symboly [[+akcia]] a [[+čas]] .
&pripraviť televízory Zoznam možností TV so súbormi zo zdrojov médií, pre ktoré chcete vygenerovať úplné cesty. Ak je nastavený &prepareTVs=`1`, všetky televízory uvedené v &zahŕňa televízory.
&processTV Zoznam parametrov TV, ktoré sa majú spracovať a zobraziť podľa ich nastavení v správcovi systému. Ak je nastavený &processTVs=`1`, všetky televízory uvedené v &zahŕňa televízory. Spomaľuje prácu.
&tvPrefix Predpona pre nastavenia TV.

Možnosti šablóny

Tieto voľby nastavujú bloky, ktoré obsahujú šablóny na generovanie ponúk.

názov Popis
&tplOuter Chunk dizajn celého bloku menu. Predvolená hodnota: @INLINE
    [[+wrapper]]
&tpl Kus dizajnu položky menu. Ak nie je zadané, obsah polí zdrojov sa vytlačí na obrazovku. Predvolená hodnota: @INLINE
  • [[+menutitle]][[+wrapper]]
  • &tplTu Kus dekorácie aktuálnej položky menu.
    &tplŠtart Časť dizajnu koreňovej položky za predpokladu, že je povolená &zobraziť Štart. Predvolená hodnota: @INLINE

    [[+menutitle]]

    [[+wrapper]]
    &tplParentRow Kus zdobenia rodiča s deťmi, ktorý nezodpovedá podmienkam &tplCategoryFolder . Napríklad: @INLINE
    &tplParentRowHere Kus aktuálneho štýlu dokumentu, ak obsahuje potomkov.
    &tplParentRowActive Kus zdobenia rodičov s deťmi v aktívnej vetve menu.
    &tplCategoryFolder Dizajnový kus špeciálnej kategórie. Kategória je rodič s deťmi, ktorý má v poli link_attributes prázdnu šablónu alebo rel="category".
    &tplInner Chunk pre návrh celého bloku podpoložiek menu. Ak je prázdny - použije sa &tplOuter. Napríklad: @INLINE
    &tplInnerRow Chunk pre návrh podpoložky ponuky. Napríklad: @INLINE
    &tplInnerHere Blok pre aktívnu podpoložku ponuky.

    Možnosti triedy CSS

    Tieto parametre nastavujú hodnotu zástupných symbolov [[+classnames]] a [[+classes]] pre rôzne položky ponuky. Zástupný symbol [[+classnames]] zobrazuje iba názov triedy bez atribútu class="", na rozdiel od zástupného symbolu [[+classes]].

    Príklady

    Zvyčajný výstup ponuky z koreňového adresára webu na jednu úroveň:

    []

    Výstup s vylúčením konkrétnych rodičov a skontrolovanými povoleniami používateľa:

    []

    Zobrazenie ponuky od dvoch rodičov naraz so zobrazením koreňových bodov:

    []

    Zobrazenie dvoch úrovní zdrojov, počítanie počtu vnorených:

    []` &tplParentRow=`@INLINE

  • [[+menutitle]] ([[+children]])
  • [[+wrapper]]` &countChildren=`1` ]]

    Dátum zverejnenia: 02.07.2011

    V tomto jednoduchom návode vám ukážem, ako si prispôsobiť menu.

    Raz som bol požiadaný, aby som opravil chybu v ponuke na jednej stránke – niektoré položky sa tvrdohlavo nechceli zoradiť, ale namiesto toho sa pri prejdení kurzorom vyhrabali na neočakávané miesta na stránke. Chyba nebola v pokrivenom css, ako som pôvodne predpokladal, ale v krivom volaní Wayfinder.

    Čo je Wayfinder- ide o úryvok, ktorý sa používa, keď je potrebné vypísať dokumenty sekcie/sekcií. V dôsledku útržku sa vygeneruje neusporiadaný zoznam. Pomocou rôznych parametrov môžete s týmto zoznamom robiť čokoľvek :) Viac sa dočítate v dokumentácii, alebo zadaním do Google - “wayfinder modx wiki”.

    Dôležité poznámky:

    1. O tom, čo je MODx, ako nainštalovať MODx, ako usporiadať štruktúru dokumentov, ako urobiť šablónu z html, čo je chunk atď. V tejto lekcii neberiem do úvahy otázky pre začiatočníkov.

    2. Zástupné symboly, ktoré použijem v návode, sú vo formáte, ktorému „rozumie“ verzia Evo. Aký je rozdiel, pozri príklad:

    Poďme sa teda pozrieť na vytváranie menu krok za krokom.

    Krok 1

    Pre lekciu som načrtol nasledujúce menu:

    Tu som pre prehľadnosť použil rôzne štýly do rôzne úrovne Ponuka. Na stránke, kde bola opravená chyba s menu, to bolo približne rovnaké – každá úroveň menu má svoj štýl.

    Sadzba - podrobnosti o rozložení nie sú zahrnuté v rozsahu tejto lekcie, takže som dostal tento kód:

    Po obdivovaní kódu sami určíme, ktorá trieda v našej ponuke je za čo zodpovedná (ak sa hrabete v cudzom kóde, malo by to byť jasné aj vo vašom vlastnom):

    ul class="menu" - trieda celého menu
    li class="top" - trieda položky ponuky špičková úroveň
    a class="top_link" - trieda pre odkazy v položkách najvyššej úrovne
    ul class="sub" - trieda podmenu
    dobre, span class="down" na zdobenie predmetov najvyššej úrovne

    Krok 2. Vytvorte tri dokumenty

    Produkty
    - Doručenie
    - Dodávatelia
    V dokumente "Produkty" vytvárame podradené dokumenty: "Sérum pravdy", "Makropulos Remedy", "Universal Remedies".

    Krok 3. Presuňte ponuku na samostatný blok

    V šablóne, na mieste, kde by ste mali mať menu, odstráňte všetok nepotrebný kód (samotný html kód menu), namiesto toho píšeme

    ((Ponuka))

    Preto menu vyberieme v samostatnom bloku. Potom vytvoríme nový kus a nazveme ho Ponuka. Zatiaľ môžete skopírovať kód ponuky, ktorý ste vytvorili, do obsahu časti. Pre prehľadnosť.

    Prejdite na panel správcu v časti „Stránka“ -> „Zobraziť“ - skontrolujte, či je všetko v poriadku s cestami k súboru štýlu a obrázkami.

    Stalo? Dobre, ale ešte to nie je menu. Vdýchnime mu život pomocou Wayfinder.

    Krok 4

    Odstráňte celý obsah časti ponuky a namiesto toho zavolajte úryvok Wayfinder.
    Pokiaľ píšeme:

    [[Wayfinder? &startId=`0`]]

    parameter startId- označuje, z ktorého dokumentu sa má začať vytvárať zoznam. Máme 0 - to znamená, že zoznam je vytvorený z koreňa stromu dokumentov.

    Pozrime sa, čo sa stalo:

    Toto je pracovné a živé menu. Premenovať dokumenty, odstrániť, pridať - ponuka sa vytvorí v súlade so stromom dokumentov.

    Krok 5

    5.1. Teraz vrátime vzhľad menu do normálu

    Wayfinder štandardne generuje jednoduchý kód () , všetky triedy zoznamov a položiek majú pri volaní špeciálne parametre.

    Na začiatku hodiny sme určili, ktoré css triedy v našom menu sú za čo zodpovedné. Wayfinder má možnosti, ktoré potrebujeme: vonkajšia trieda- trieda pre nádobu na menu. Pri porovnaní s naším rozložením dostaneme nasledujúce volanie Wayfinder:

    [[Wayfinder? &startId=`0` &level=`2` &outerClass=`menu`]]

    okrem parametrov s triedami špecifikujte úroveň vnorenia - &level=`2`.

    Zaznamenali sme nedostatky - žiadne triedy pre položky ponuky najvyššej úrovne, žiadne značky a trieda pre podmenu.
    Všetky tieto nedostatky sú opravené pridaním vhodných parametrov do volania Wayfinder.

    5.2. Pridávanie tried do položiek a značiek najvyššej úrovne

    Na to existuje premenná rowTpl, ktorý popisuje šablónu pre položku menu, urobíme takúto šablónu, na to vytvoríme chunk tzv rodič:

  • [+wf.linktext+][+wf.wrapper+]
  • Vo výzve Wayfinderu pridajte &rowTpl=`rodič` .
    Nezabudnite skontrolovať zdrojový kód - takmer všetko je v poriadku, podmenu zostáva.

    Na nastavenie podmenu používame premennú innerRowTpl.

    Vytvorte kus vnútorné:

  • [ +wf.linktext+][ +wf.wrapper+]
  • Pridanie premennej k volaniu Wayfinder innerRowTpl=`vnútorné` a premenná, ktorá určuje triedu pre kontajner podponuky &innerClass=`sub` .

    Posledný hovor do Wayfinder vyzerá takto:

    [ ]

    To je všetko, naše menu je pripravené. Veľa štastia!

    Začnime lekciou 8 MODx Revolution pre začiatočníkov. Pripomínam vám, že robíme stránku na učenie sa MODx Revolution. V minulej lekcii sme sa zaoberali konceptom úryvkov, čo sú kúsky PHP kódu, ktoré nám umožňujú pridať funkcionalitu na náš web. V tomto návode sa pozrieme na špeciálny úryvok – Wayfinder a použijeme ho na vytvorenie dynamického menu pre našu stránku.

    Čo je Wayfinder?

    Wayfinder je úryvok, ktorý zobrazuje netriedený zoznam odkazov na zdroje v strome vašej lokality, typ výstupu zoznamu závisí od volania úryvku a parametrov tohto volania. Vo všeobecnosti to znamená, že keď vo svojej šablóne zavoláte Wayfinder, začne hľadať zdroje, ktoré zodpovedajú parametrom uvedeným v nej a vráti zoznam odkazov na tieto zdroje vo formáte netriedeného zoznamu alebo vo formáte určíte.

    Prečo používať Wayfinder?

    Wayfinder zvyčajne používam na vytvorenie dynamickej navigácie na stránke, teda menu. Od väčšiny HTML šablóna Ak na vytváranie ponúk používate neusporiadané zoznamy, Wayfinder je na to ideálny nástroj. Pri vytváraní lokality môžete svoje adresy URL pracne vkladať do navigačnej ponuky, rovnako ako predtým na statickej lokalite HTML. Zároveň vždy, keď potrebujete odstrániť alebo vytvoriť stránku, musíte vykonať príslušné zmeny vo svojom menu, zmeniť adresy URL. Použitím úryvku Wayfinder na dynamické generovanie ponúk sa vyhnete týmto bolestiam hlavy, pretože automaticky rozpozná zmeny a podľa toho zmení vašu ponuku.

    Wayfinder je pomerne flexibilný a umožňuje vám definovať, aké zdroje zahrnúť alebo vylúčiť z ponuky, aká je šablóna ponuky, ako hlboko je ponuka vašej stránky. Vaše limity sú určené vaším HTML/CSS kódom.

    Ako používať Wayfinder?

    Ako sme spomenuli v predchádzajúcej lekcii, syntax volania úryvkov vyzerá takto: [[!somesnippet]]

    Toto je len základné volanie a nestačí, okrem toho musíme definovať niektoré vlastnosti tohto volania. V prípade Wayfinderu je minimum, ktoré je potrebné definovať vo vlastnostiach, kde v strome zdrojov by mal Wayfinder začať vytvárať zoznam zdrojov. Vo volaní úryvku Wayfinder teda musí byť špecifikovaný aspoň jeden parameter – počiatočné ID. Základné volanie úryvku Wayfinder by v tomto prípade vyzeralo takto:

    Toto volanie povie Wayfinderu, aby začal v koreni stromu ( ID 0 znamená koreňový adresár lokality) a zobrazuje všetky zdroje, ktoré sú zverejnené a ktoré nemajú začiarknuté políčko Skryť z ponúk (Skryť z ponuky).

    Ak sa pozrieme na šablónu, ktorú používame, môžeme vidieť hornú ponuku s niekoľkými položkami a rozbaľovacími zoznamami.

    Poďme sa pozrieť na šablónu a výstupný kód toto menu:

    Ako vidíte, toto je vnorený neusporiadaný zoznam. Nahraďte tento kód základným volaním Wayfinder a uvidíme, čo sa stane. Vymažte vyššie uvedený kód a vložte ho na jeho miesto:

    [[!Wayfinder? &startId=`0` ]]

    Ak používate rovnakú šablónu ako ja, váš kód bude vyzerať asi takto:

    Uložte šablónu a pozrite sa domovskej stránke, malo by to vyzerať takto:

    Výmysel! Môžete vidieť, že naše predchádzajúce menu, ktoré malo niekoľko položiek, bolo teraz nahradené jednoduchým menu s jedinou položkou – Domov. To nám hovorí, že Wayfinder funguje podľa očakávania a berie jednu stránku z našej lokality a zobrazuje jej názov ako položku ponuky.

    Poďme vytvoriť niekoľko ďalších zdrojov. Chystám sa pridať stránku About s 3 podradenými stránkami (MODx, Tutorials, Contact a FAQ). Pre svoju lokalitu môžete vytvoriť ľubovoľné zdroje alebo stránky. Účelom tohto cvičenia je vytvoriť nejaké zdroje, aby mal Wayfinder čo zobrazovať.

    S vytváraním stránok som skončil a strom zdrojov mojej lokality vyzerá takto:

    Teraz máme niekoľko stránok, pozrime sa, ako volanie Wayfinder vygeneruje menu pre našu stránku:

    Dobrou správou je, že všetky naše stránky sa objavili v menu a kliknutím na každú položku menu sa dostaneme na príslušnú stránku. (Ak chcete otestovať tento prvok, pridajte nejaký text na každú stránku, napríklad na stránke O aplikácii môžete pridať „Toto je stránka O aplikácii“ a táto správa sa zobrazí po otvorení stránky. Nezabudnite, že musíme definovať šablónu pre každú stranu, ale momentálne sa tým nebudem zaoberať).

    Zlou správou je, že formátovanie ponuky je poškodené, ale môžeme to opraviť. Kliknite kliknite pravým tlačidlom myši kliknite na webovú stránku a pozrite sa na zdrojový kód (alebo na to použite firebug), teraz to uvidíte Wayfinder vygeneruje HTML takto:

    • Domov
    • O
      • MODX CMS
      • Kódovacia podložka
        • Blog
        • Služby
    • Kontaktuj nás
    • Návody
    • FAQ

    Ako môžete vidieť, vyzerá to veľmi podobne ako náš pôvodný statický kód s niekoľkými výnimkami. Najprv vygeneroval Wayfinder

      položka bez triedy sf-menu ktorý bol použitý v našom statickom kóde. Šablóna potrebuje túto triedu na prácu s CSS. Je to tiež vidieť
    • položky majú parameter rozpätie, ktorý odkazuje na prvky textu odkazu v pôvodnom statickom kóde a nenachádza sa vo vygenerovanom kóde Wayfinder. Náš statický HTML kód má navyše triedu acurrent-page-item, ktorý sa nenachádza v našom útržkovom kóde Wayfinder. Všetky tieto chýbajúce kúsky spôsobujú, že naše menu vyzerá nevzhľadne.

      Ako prispôsobiť štýl výstupu úryvku vo vyhľadávači cesty

      Keď sa pozrieme na to, ako Wayfinder generuje kód, máme úplne prirodzenú otázku: „Ako pridáme chýbajúce časti kódu, aby sme chceli zobraziť ponuku vo forme, ktorú potrebujeme? Odpoveď je veľmi jednoduchá, na formátovanie výstupu úryvku Wayfinder používame kúsky šablón.

      Wayfinder je flexibilný nástroj a pomocou parametrov môžete definovať vzhľad výkon. Niektorí Spoločné parametre umožňujú určiť, na akej úrovni začať zostavovať menu, ktoré položky do menu nezaradiť atď. Ďalšími možnosťami sú možnosti šablóny, ktoré vám umožňujú nastaviť html kód šablóny pre vašu ponuku atď. Popis druhej možnosti nájdete v oficiálnej dokumentácii – http://rtfm.modx.com/display/ADDON/Wayfinder.

      Zaznamenať si: niektoré možnosti Wayfinder majú predvolenú hodnotu.

      To vysvetľuje napríklad, prečo v menu vygenerovanom Wayfinderom má položka Domovská stránka názov triedy “ prvý aktívny". Toto je predvolená trieda, ale môžeme ju prepísať definovaním vlastných tried v kúskoch šablón.

      V tomto návode použijeme niekoľko možností Wayfindera, ale odporúčam vám, aby ste sa všetky naučili a precvičili si ich čo najviac, aby ste pochopili ich plný potenciál. Keďže predvolené parametre Wayfindera sú jasne zdokumentované na oficiálnej stránke, bolo by hlúpe tu o nich hovoriť. Pri práci s rôznymi ponukami ich budeme používať čoraz viac.

      Ak chcete začať so šablónou ponuky, vytvorte niekoľko mini šablón a uložte ich po častiach. Uvidíte, že v týchto častiach používame kód HTML, ale nahrádzame dynamické prvky zástupné symboly(alebo zástupné symboly ako sa tiež nazývajú), ktorých syntax vyzerá takto: [[+placeholder]]. Zástupné symboly, ktoré používame, sú špecifické pre úryvok Wayfinder a ich definícia je zrejmá z názvu, ale vždy si môžete pozrieť dokumentáciu MODx, kde nájdete kompletnejšiu pomoc.

      Tu sú kúsky, ktoré použijem na vytvorenie našej šablóny:

      Menu 7v1Vonkajšie- bude obsahovať kód HTML pre náš vonkajší kontajner ul.

        [[+wf.wrapper]]

      Vidíte, že som pridal triedu na vonkajšiu ul. Alternatívny spôsob na to použite zástupný symbol wf.classes a potom pridajte názov triedy do aktuálneho volania wayfinder pomocou parametra vonkajšia trieda. Ale pre jednoduchosť použijeme prvý spôsob, ale oba budú fungovať dobre...

      Riadok ponuky 7v1– bude obsahovať HTML kód položiek ponuky prvej úrovne

    • [[+wf.linktext]][[+wf.wrapper]]
    • Hlavnou myšlienkou je, že som pridal značku na text odkazu ponuky ako v pôvodnom statickom HTML kóde. Zahrnul som aj zástupný symbol wf.classes a to mi umožní definovať triedu pre aktuálnu stránku, ktorá prepíše predvolenú „aktívnu“ triedu, ktorú máme.

      Menu 7v1Vnútorné– bude obsahovať HTML kód vnútorných ul kontajnerov

        [[+wf.wrapper]]

      Menu 7v1VnútornýRow– bude obsahovať HTML kód pre reťazce položiek vnútorné úrovne

    • [[+wf.linktext]][[+wf.wrapper]]
    • To je všetko, teraz sú naše kúsky šablón na mieste, ako môžete vidieť (pre poriadok som ich zaradil do samostatnej kategórie):

      Teraz môžeme upraviť volanie Wayfinder, aby sme mohli použiť tieto mini šablóny pre výstup Wayfinder. Ak sa pozriete na zoznam možností šablón (bolo by užitočné mať http://rtfm.modx.com/display/ADDON/Wayfinder otvorený pred vašimi očami alebo vytlačiť a podržať blízko obrazovky), uvidíte, že Nazval som svoje kúsky podobne ako zodpovedajúce parametre volania úryvkov. Urobil som to pre pohodlie, pomáha mi to sledovať, čo sa deje, keď začínam zostavovať hovor. Pridajme parametre a zavolajme naše kúsky. Hovor na Wayfinder bude teraz vyzerať takto:

      [[!Wayfinder? &startId=`0` &outerTpl=`7in1menuVonkajšia` &rowTpl=`7in1menuRow` &innerTpl=`7in1menuVnútorný` &innerRowTpl=`7in1VnútornýRow` &hereClass=`aktuálna_položka_stránky` &firstClass=`` &posledná trieda]

      Hodnota parametra je uzavretá v apostrofoch (`), nie v jednoduchých úvodzovkách (').

      Dobre, poďme sa pozrieť na túto výzvu. Môžete vidieť, že na volanie našich kúskov používame možnosti šablón, aby Wayfinder vytvoril požadovaný HTML so správnymi triedami. Definoval som callable tuClass parameter a dal mu hodnotu aktuálna_položka_stránky aby sa zhodovali so statickou šablónou HTML. Vidíte, že som nechal parametre prvá trieda a posledná trieda prázdny. Dôvodom je, že moja šablóna HTML nenastavuje triedu pre prvú a poslednú položku ponuky, takže aby som sa vyhol prekrývaniu, prepísal som v nich prázdne riadky.

      Je vidieť, že náš jedálny lístok vyzerá presne tak, ako sme chceli. V rozbaľovacej ponuke sa používajú správne štýly. Ak sa pozriete na zdrojový kód, uvidíte, že vygenerovaný Wayfinder‘om HTML kód sa zmenil na nepoznanie:

      • Domov
      • O
        • MODX CMS
        • Kódovacia podložka
          • Blog
          • Služby
      • Kontaktuj nás
      • Návody
      • FAQ

      Tento kód sa zhoduje s pôvodným statickým kódom našej šablóny, bol však vygenerovaný volaním Wayfinder.

      Existuje mnoho ďalších možností, ktoré môžete použiť Wayfinder zostaviť svoje menu. V nasledujúcich tutoriáloch sa pozrieme na zložité ponuky a na to, ako ich integrovať do Wayfinder. Aby som to zhrnul: naša stránka teraz nadobudla určitú formu a máme funkčné a dynamické menu.

      Horné menu ovládacieho panela MODX môžete zmeniť buď zmenou poradia položiek, alebo skrytím niektorých z nich pred určitými používateľmi. Môžete tiež pridať nové položky do existujúcich alebo vlastných aktivít, ktoré vytvoríte. Ďalej sa najprv pozrieme na metódy používané na úpravu horné menu a potom pár praktických príkladov.

      Hlavné koncepty menu

      Systém menu v Revolution má úplne novú architektúru. So systémom menu Evolution to nemá takmer nič spoločné okrem názvov niektorých položiek. Na nastavenie menu nemusíte rozumieť nový systém menu, ale toto pochopenie pomáha pri práci, najmä ak sa chystáte tvoriť Osobné stránky ovládacie panely, ku ktorým sa dostanete cez menu.

      Horný strom menu

      Prejdite do hornej časti ponuky Systém -> Akcie a uvidíte základy systému menu. Strom na pravej strane (Horné menu) obsahuje aktuálne položky menu a podmenu. Ak rozbalíte rôzne sekcie, uvidíte, že ide o presnú kópiu horného menu. Položky najvyššej úrovne sú tie, ktoré vidíte v hornej časti ovládacieho panela. Takmer vždy ide o kontajnery pre podmenu. Každá podponuka v strome zodpovedá akcii na ovládacom paneli. Keď kliknete na podponuku, v ovládacom paneli sa vykoná akcia (napríklad vymazanie vyrovnávacej pamäte lokality alebo prechod na ovládací panel prístupu). Položky horného menu môžu byť v skutočnosti aj akcie, ale žiadna z položiek horného menu nie je takto nakonfigurovaná.

      Tu je v skutočnosti definované, čo sa stane, keď kliknete na položku ponuky. Ako uvidíte, môžete jednoducho prepísať, čo sa stane po kliknutí na položku ponuky, a môžete tiež premenovať, skryť alebo odstrániť položky zoznamu ponuky. Môžete tiež pridať položky do ponuky a nastaviť, čo sa stane, keď na ne kliknete. V skutočnosti môžete vytvoriť úplne nový systém ponúk pre ovládací panel, ktorý nahradí existujúci systém a rôzni používatelia môžu vidieť rôzne ponuky. To všetko je možné vykonať bez výmeny jadra MODX.

      Tu sa nastavuje aj fyzické zobrazenie menu. Nie je náhoda, že všetky položky menu sú v rovnakom poradí ako v hornom menu. Ak ich presuniete v strome, pri opätovnom načítaní stránky sa zmení aj horná ponuka.

      Pozrime sa na niektoré akcie ovládacieho panela, ale dávajte pozor, aby ste ich nemenili – po ich zobrazení kliknite na tlačidlo „Zrušiť“.

      V strome vpravo (Horné menu) kliknite pravým tlačidlom myši na položku „Stránka“ a z rozbaľovacej ponuky vyberte „Upraviť“. Zobrazí sa dialógové okno Upraviť s poľami, ktoré definujú akciu ponuky:

      názov- názov položky menu

      Popis- popis položky menu

      Akcia- špecifikácia súboru PHP, ktorý sa má spustiť

      Ikona- dodatočná ikona pre položku ponuky

      možnosti- voliteľné parametre $_GET pre adresu URL

      Handler- Kód JS, ktorý sa má vykonať

      Prístupové práva- čiarkami oddelený zoznam požadovaných povolení

      Všimnite si, že väčšina polí v položke „Stránka“ je prázdna. Je to preto, že ide o kontajner pre podponuky, ktoré obsahuje. Ak kliknete na ponuku „Stránka“ v hornom menu, nič sa nestane.

      Pozrime sa na podsekciu ponuky, ktorá niečo robí. Kliknutím na „Zrušiť“ ukončite dialógové okno, rozbaľte sekciu stromu „Stránka“ v pravom paneli, kliknite pravým tlačidlom myši na podponuku „Aktualizovať lokalitu“ a vyberte „Upraviť“.

      Všimnite si, že dialógové okno, ktoré sa otvorí, obsahuje obsah polí "Handler" a "Permissions". Pole „Oprávnenia“ nám hovorí, že používateľ nemôže vykonať akciu tejto podpoložky ponuky, ak nemá prístupové právo empty_cache. Pole „Handler“ obsahuje skutočný kód JS, ktorý sa spustí, keď vyberiete túto podpoložku. Všetky položky, v ktorých sa skutočne vykonávajú nejaké akcie, majú vyplnené buď pole „Action“ alebo „Handler“. Ak je pole „handler“ vyplnené, vykoná sa kód nachádzajúci sa v tomto poli a pole „Action“ sa ignoruje. Ak je pole „Handler“ prázdne, vykoná sa akcia z poľa „Akcia“. Pole "Akcia" je zvyčajne ukazovateľ buď na súbor ovládača alebo na jednu z akcií v strome "Akcie" vľavo (ktoré v skutočnosti ukazujú na zodpovedajúce súbory ovládača). Zatvorte dialógové okno kliknutím na tlačidlo "Zrušiť".

      Pozrime sa na možnosť položky ponuky s akciou. Stiahnite si a nainštalujte doplnok Batcher cez správu balíkov, znova načítajte stránku a znova prejdite do sekcie Systém -> Akcie. V sekcii „Komponenty“ v pravom strome (v prípade potreby ju rozbaľte) kliknite pravým tlačidlom myši na Dávkovač a vyberte „Upraviť“. Teraz vidíme dokončené pole „Akcia, nie „Handler“: dávkovač – index. Dialógové okno úprav ukončite kliknutím na tlačidlo „Zrušiť“.

      Na ľavej table sú všetky položky najvyššej úrovne priestormi názvov. V strome akcií naľavo rozbaľte priestor názvov „dávky“. Mali by ste vidieť index akcií. Toto je akcia, na ktorú poukazuje ponuka Batcher, ktorú sme videli na pravej table.

      Pozrime sa, čo môžeme urobiť so stromom Top Menu. Položky v strome hornej ponuky je možné zmeniť ich presunutím. Ak zmeníte umiestnenie položky ponuky v strome, zmení sa aj skutočná horná ponuka, aj keď budete musieť znova načítať stránku ovládacieho panela, aby ste to videli.

      Ak chcete pridať položku do hornej ponuky, môžete kliknúť pravým tlačidlom myši kdekoľvek v oblasti stromu a vybrať možnosť „Pridať položku ponuky“. Môžete tiež kliknúť na tlačidlo "Pridať položku" a pridať položku do ponuky najvyššej úrovne.

      Položky ponuky je možné odstrániť kliknutím pravým tlačidlom myši na ne a výberom položky "Odstrániť". Ak odstránite položku ponuky, obsah jej polí sa stratí a všetky podradené prvky sa odstránia. Táto akcia je nezvratná.

      Ak chcete odstrániť položku ponuky bez toho, aby ste ju skutočne odstránili (čo je takmer vždy najlepší postup), môžete ju skryť vložením niečoho do poľa „Povolenia“. Ak sa v tomto poli už niečo nachádza, pridajte čiarku a názov nového prístupového práva. Pokiaľ je toto prístupové právo prístupovým právom, ktoré nemá nikto iný, položka menu bude neviditeľná. Môžete ho znova zviditeľniť odstránením pridaného povolenia. Ak chcete zobraziť konkrétnu položku ponuky konkrétnym používateľom (ale nie všetkým), jednoducho vytvorte novú šablónu politiky obsahujúcu iba prístupové práva používateľa, vytvorte novú politiku založenú na tejto šablóne a vytvorte položku kontextového zoznamu prístupových práv, ktorá platí. týmto používateľom a priradiť túto politiku.

      Ak chcete zmeniť názov horného menu, zadajte jeho popis. Potom prejdite do časti ponuky Systém-> Správa slovníkov. Vyberte menný priestor "core" a tému "topmenu". Rozbaľovací zoznam tém obsahuje viac ako jednu stránku, takže možno budete musieť prejsť na druhú stránku, aby ste našli tému „topmenu“. Nájdite reťazec jazyka pre požadovanú položku ponuky, dvakrát kliknite na jej hodnotu a zmeňte ju. Akékoľvek zmeny, ktoré tu vykonáte, zostanú v platnosti po aktualizácii verzie MODX a po aktualizácii ktoréhokoľvek z komponentov. vývojárov tretích strán.

      Vyššie opísaná metóda bude fungovať len pre položky ponuky zabudované do jadra. Pre položky ponuky tretích strán budete musieť vybrať vhodný priestor názvov. Napríklad, ak chcete zmeniť príslušnú položku ponuky pre dávkovač, budete musieť zmeniť hodnotu riadku slovníka pre menný priestor dávkovača.

      Strom "Akcie"

      Návrat do sekcie Systém -> Akcie ak si to nechal. V ľavom paneli kliknite na akciu „index“ pod názvom „dávkovač“ a z rozbaľovacieho zoznamu vyberte „Upraviť“. Pripomeňme, že toto je akcia, na ktorú ukazuje položka ponuky Batcher v pravej časti okna. Uvidíte, že radičom pre túto akciu je index a menný priestor je dávkový. Ak teraz prejdeme do sekcie Systém->Priestor názvov, uvidíme, že cesta k mennému priestoru dávkovača je:

      (core_path)components/batcher

      Keď je MODX naviazaný na ovládač, ktorý sa spustí po kliknutí na túto položku ponuky, vygeneruje úplnú cestu, ako je táto:

      cesta_názvov + názov_radiča +.php

      Inými slovami, za predpokladu, že jadro je vo svojom predvolenom umiestnení, MODX spustí spustenie súboru radiča na:

      core/components/batcher/index.php

      Ak sa pozriete na tento súbor, uvidíte, že obsahuje iba súbor index.php v adresári core/components/batcher/controllers, ktorý načíta triedu Batcher a inicializuje ju spustením Batcher v ovládacom paneli. Novú položku ponuky v časti „Komponenty“ vytvoríme o niečo neskôr, keď vytvárame vlastné stránky dashboardu.

      Mnoho položiek ponuky na pravej table nemá aktívne akcie zobrazené na ľavej table. Je to preto, že cesty k ich súborom radiča sú uložené v databáze MODX a nemali by byť upravované (aspoň ťažšie). Tieto cesty sú uložené v tabuľke modx_actions. Každá akcia má svoj vlastný identifikátor (ID) a cestu k svojmu ovládaču. Akcia má tiež pomocnú adresu URL pre kontextovú pomoc, keď je ovládač aktívny, a niekoľko ďalších polí. Pri akciách zobrazených na paneli Akcie vľavo môžete vidieť ID v zátvorkách vedľa názvu akcie.

      Pridanie položky ponuky do stromu pre akúkoľvek akciu v ovládacom paneli sa teda vykonáva vytvorením položky ponuky v pravom paneli a buď vytvorením zodpovedajúcej akcie (ovládača) alebo pridaním obsluhy. Ak ovládač už existuje, môžete ho jednoducho vybrať z rozbaľovacej ponuky „Akcie“. Ak nie, musíte v ľavom paneli vytvoriť akciu, ktorá ukazuje na ovládač. Neexistuje napríklad žiadna položka ponuky na vytvorenie nového používateľa, ale keďže na to existuje ovládač súborov, možno túto položku jednoducho pridať do hornej ponuky. V tomto prípade stačí vytvoriť položku menu napravo a nastaviť „core“ namespace na akciu bezpečnosť/používateľ/vytvoriť. Ako viete, horná položka ponuky, ktorá má obslužný program, ale žiadnu zodpovedajúcu akciu (podobne ako položka ponuky „aktualizovať lokalitu“) v strome „Akcie“. Nepotrebuje klauzulu "Akcia", pretože handler obsahuje kód na to. Namiesto spustenia ovládača MODX jednoducho spustí kód v poli handler.

      Spracovanie kliknutí na ponuku

      Všimnite si akciu indexu priestoru názvov Batcher na ľavej table. Všimnite si jeho ID. Keď kliknete na hornú položku ponuky, MODX získa toto ID. Následne sa v ovládacom paneli vygeneruje URL tejto stránky a používateľ sa na ňu dostane. Na našej stránke je toto ID 79. Keď v hornom menu klikneme na Batcher, vidíme v adresný riadok prehliadač:

      http://website/manager/index.php?a=79

      Ak kliknete na položku ponuky Dávkovač, mali by ste vidieť podobnú adresu URL, kde uvidíte indexové ID vašej akcie Dávkovač. Keď obsluha požiadavky dostane túto adresu URL, skontroluje, či objekt ponuky existuje v databáze, či má používateľ oprávnenie na jeho vykonanie, nastaví adresu URL pre pomoc a spustí súbor kontroléra akcie (ak existuje obslužný program, JS obsluhy kód sa vykoná).

      Práca s horným menu

      Teraz, keď vieme, ako MODX zaobchádza s položkami ponuky a ich pridruženými akciami, upravme skutočnú hornú ponuku na ovládacom paneli. Použité metódy sú pomerne jednoduché a na ich použitie nepotrebujete rozumieť vnútorným mechanizmom práce. Systémy MODX menu/akcia.

      Buďte opatrní, pretože všetky vaše zmeny budú stále platné, keď aktualizujete stránku, a nie ľahká cesta návrat do predvoleného menu. Väčšinu krokov, ktoré tu vykonáme, možno ľahko vrátiť späť, ale pred vykonaním akýchkoľvek zmien by bolo lepšie zapísať si pôvodnú štruktúru ponuky. Najlepšie je najskôr precvičiť inštaláciu MODX, ktorá sa nebude používať na skutočnom mieste.

      Zmena poradia položiek menu

      Môžete zmeniť poradie položiek hornej ponuky na ovládacom paneli alebo ktorejkoľvek položky v ich podponukách. Prejdite do sekcie Systém->Akcie a rozbaľte strom menu na pravej strane (pod nadpisom "Horné menu").

      Ako sme už skôr zistili, tento strom je základom horného menu ovládacieho panela. Poradie položiek hornej ponuky môžete zmeniť ich potiahnutím. Jednoducho kliknite na položku ponuky, ktorú chcete presunúť, a podržte stlačené tlačidlo myši, presuňte ju na požadované miesto a uvoľnite tlačidlo myši. Takto môžete zmeniť poradie položiek v hornom menu alebo ľubovoľnom podmenu. Položky môžete presúvať z jednej podponuky do druhej. Položky podponuky môžete presunúť aj do hornej ponuky ich presunutím do priečinka hornej ponuky. Ak chcete vidieť zmeny, musíte znova načítať stránku ovládacieho panela.

      Pridávanie a odstraňovanie položiek ponuky

      Pridanie novej položky menu je dosť jednoduché. Prejdite do sekcie Systém->Akcie a rozbaľte strom menu na pravej strane (pod nadpisom "Horné menu"). Vyberte časť ponuky, do ktorej chcete pridať položku, a kliknite na tlačidlo „Pridať ponuku“ (alebo kliknite pravým tlačidlom myši a vyberte možnosť „Pridať položku ponuky“). Zadajte názov požadovanej položky ponuky a kliknite na tlačidlo „Uložiť“. Používatelia MODX zvyčajne zadávajú nové položky v ponuke "Komponenty", ale môžete ich pridať kdekoľvek. Ak chcete odstrániť položku ponuky, kliknite na ňu pravým tlačidlom myši a vyberte možnosť „Odstrániť položku ponuky“.

      Ak pridáte novú položku ponuky a potom znova načítate stránku v prehliadači, možno novú položku neuvidíte v hornej ponuke. Položky hornej ponuky bez podradených prvkov a bez určenia akcie alebo obsluhy sa v ponuke nezobrazia. To je dôvod, prečo sa ponuka "Komponenty", ktorú vidíte v strome, nezobrazí v ponuke pri prvej inštalácii MODX revolúcia- zatiaľ nie sú nainštalované žiadne komponenty.

      Ako jednoduchý príklad si vytvoríme novú vlastnú ponuku, ktorá vás zavedie do najčastejšie používaných sekcií ovládacieho panela. Predpokladajme, že vaša úloha vyžaduje časté návštevy systémových nastavení, vytváranie/úpravu dokumentov a riadenie prístupu. Vytvoríme položku horného menu s názvom „Moje menu“, do ktorej umiestnime položky, ktoré sme určili. Všimnite si, že budeme robiť všetku prácu v pravom paneli (Horné menu).

      Prejsť na sekciu Systém->Akcie a (v strome hornej ponuky) kliknite na tlačidlo „Pridať ponuku“. Do poľa "Názov" zadajte názov "Moje menu" a kliknite na tlačidlo "Uložiť".

      názov - nový dokument

      Akcia-core-resource/create

      názov- Systémové nastavenia

      Akcia-core-system/nastavenia

      názov- Riadenie prístupu

      Akcia- jadro-bezpečnosť/povolenie

      Uistite sa, že vaše tri nové položky ponuky sú podpoložkami v ponuke „Moja ponuka“. Ak nie, presuňte ich myšou na požadované miesto. Môžete tiež zmeniť poradie ponúk a podmenu.

      Po dosiahnutí požadovaného umiestnenia ponuky znova načítajte stránku ovládacieho panela v prehliadači. V hornom menu by ste mali vidieť novú položku „Moje menu“ obsahujúcu tri podponuky, ktoré by mali viesť do príslušných sekcií ovládacieho panela.

      Ak chcete odstrániť akúkoľvek položku ponuky, ktorú ste vytvorili, prejdite do sekcie Systém->Akcie, kliknite na ne pravým tlačidlom myši a vyberte možnosť „Odstrániť“. Pred odstránením položky hlavného menu je dobré vymazať všetky podponuky, aby nezostali v databáze.

      Ako skryť položky ponuky

      Okrem zmeny poradia položiek ponuky ich môžete tiež skryť pomocou povolení pripojených k položke ponuky. Prejsť na sekciu Systém->Akcie a rozbaľte strom menu na pravej strane (pod nadpisom "Horné menu").

      Kliknite pravým tlačidlom myši na ľubovoľnú položku ponuky alebo podpoložku a vyberte možnosť „Upraviť“. Zobrazí sa dialógové okno so spodným poľom „Povolenia“. Dávajte pozor, aby ste nezmenili žiadne iné pole.

      Ak sa pokúšate skryť existujúce položky ponuky, uvidíte, že pole „Povolenia“ je pre niektoré z nich vyplnené a pre iné nie. Aké akcie musíte vykonať na skrytie poľa, závisí od toho, či je pole vyplnené alebo nie.

      Ak pole „Oprávnenia“ obsahuje zoznam prístupových práv, môžete vytvoriť novú politiku prístupu (alebo upraviť existujúcu), aby ste zablokovali toto prístupové právo a položka ponuky sa skryje. Táto operácia môže mať vedľajšie účinky, pretože ostatné položky ponuky na ovládacom paneli môžu podliehať rovnakým prístupovým právam. Lepšou metódou môže byť pridanie ďalších špecifikácií povolení používateľa do tohto poľa.

      Pole „Povolenia“ môže obsahovať zoznam prístupových práv oddelených čiarkami. Táto položka ponuky bude viditeľná iba pre používateľov, ktorí majú všetky uvedené prístupové práva.

      Pozrime sa na príklad. Predpokladajme, že chcete skryť podmenu „Správa používateľov“ v ponuke „Zabezpečenie“ pred všetkými používateľmi, okrem používateľa s neobmedzenými právami hlavného používateľa.

      Prejsť na sekciu Systém->Akcie a rozbaľte strom ponuky a potom kliknite pravým tlačidlom myši na podpoložku „Správa používateľov“ a vyberte položku „Upraviť“. Pole „Povolenia“ musí obsahovať view_user. Chystáme sa pridať ďalšie povolenia s názvom my_view_user_menu. Ak to chcete urobiť, upravte toto pole tak, aby obsahovalo view_user,my_view_user_menu. Uistite sa, že v zadaných údajoch nie sú žiadne medzery. Teraz musia mať používatelia obe tieto oprávnenia, aby mohli vidieť podpoložku „Správa používateľov“ a keďže nikto nemá druhé prístupové právo (lebo sme si ho práve vymysleli), nikto túto podpoložku neuvidí.

      Pri položkách ponuky, ktoré nemajú prístupové práva, je postup podobný. Do prázdneho poľa „Povolenia“ jednoducho pridáte nové používateľské oprávnenia.

      Upozorňujeme, že po pridaní našich používateľských oprávnení sa superpoužívateľovi s neobmedzenými právami tiež nezobrazí podponuka Správa používateľov. Aby ste to napravili, musíte mu udeliť tieto prístupové práva. Ak plánujete vykonávať tieto operácie na živej lokalite, pred vytvorením vlastných povolení vždy najprv udeľte tieto povolenia správcovi s neobmedzenými právami.

      Keďže predvolená skupina správcov v ovládacom paneli je chránená, musíte vytvoriť novú šablónu politiky prístupu obsahujúcu prístupové práva používateľa a na nich založenú novú politiku prístupu. Do tejto šablóny politiky prístupu môžete vložiť všetky svoje používateľské povolenia. V kapitole Zabezpečenie->Ovládanie prístupu kliknite na „Vytvoriť šablónu politiky prístupu“. Na dialógové použitie nasledujúce možnosti:

      názov : CustomPermissionTemplate

      Skupina šablón : Admin

      Popis :

      Potom kliknite pravým tlačidlom myši na tlačidlo „Pridať povolenie“. V dialógovom okne použite nasledujúce možnosti:

      názov : my_view_user_menu

      Popis : Prístupové práva užívateľského menu

      Potom kliknite na kartu „Zásady prístupu“ a potom na tlačidlo „Vytvoriť politiku prístupu“. V dialógovom okne použite nasledujúce možnosti:

      názov : Vlastné povolenia

      Šablóna zásad prístupu : CustomPermissionTemplate

      Popis : Moje používateľské povolenia

      Kliknite na politiku prístupu „Vlastné povolenia“ a vyberte „Upraviť“. Prejdite nadol v zozname na prístupové právo my_view_user_menu a začiarknite políčko vedľa neho. Kliknite na tlačidlo "Uložiť" vpravo hore.

      Teraz musíme superužívateľovi udeliť toto prístupové právo vytvorením novej položky ACL. Prejdite do sekcie Zabezpečenie->Ovládanie prístupu->Skupiny používateľov Kliknite pravým tlačidlom myši na skupinu používateľov „Správca“ a vyberte „Upraviť skupinu používateľov“, kliknite na kartu „Kontextový prístup“ a potom na tlačidlo „Pridať kontext“. V dialógovom okne použite nasledujúce možnosti:

      Kontext : Mgr

      Minimálna rola : Super užívateľ - 0

      Zásady prístupu : Vlastné povolenia

      Z horného menu vyberte Zabezpečenie->Ovládanie prístupu. Nikto nebude môcť vidieť túto položku ponuky okrem používateľa s neobmedzenými právami hlavného používateľa (a iných používateľov s touto politikou prístupu). Ak vstúpite do ovládacieho panela ako jeden z editorov stránok, podpoložka „Správa používateľov“ by nemala chýbať.

      späť Vpred

      Ale to nie je pre nás ;)

      Všetko urobíme od začiatku. Prečo sme to (ja) potrebovali, pretože už existujú hotové možnosti? Pretože sa mi to páči viac. Pretože si myslím, že tento prístup je najsprávnejší. Pretože vďaka tomu, že dokážeme vyvinúť svoj vlastný, môžeme ľahko pochopiť cudzí kód, zmeniť, opraviť chyby alebo ho doplniť funkcionalitou potrebnou v konkrétnom prípade. A nakoniec, robiť si svoje je často také pekné!

      Ďalšie rozprávanie bude znamenať, že čitateľ má minimálne znalosti PHP programovanie. Teoreticky tí ľudia, ktorí vôbec nerozumejú kódu, budú môcť kód skopírovať a reprodukovať všetky akcie, o ktorých sa bude diskutovať nižšie. Môže však byť pre nich lepšie použiť hotové úryvky a la Ditto, pretože poskytujú veľa príležitostí na externú konfiguráciu bez toho, aby sa dostali do hlavného kódu.

      Nechcem rozoberať, čo je pre užívateľa lepšie - vziať si hotové alebo si vyvinúť vlastné... Obe má svoje plusy aj mínusy. Pre mňa osobne je viac výhod v druhej možnosti. Tiež sa každý z čitateľov rozhodne sám.

      Poďme sa teda opäť pozrieť na tie naše. Keďže na našej stránke je pomerne veľa rôznych softvérových častí, ale musíte s niečím začať, tak poďme naprogramovať ...

      Horné menu

      Pod pojmom „horné menu“ rozumiem súbor odkazov na stránky v hornej časti webu (pozri obrázok nižšie):

      Prvú ukážku tvorby úryvku popíšem veľmi podrobne, v budúcnosti sa zameriam najmä na najvýraznejšie detaily.

      Porovnajte s naším stromom stránok v systéme správy, ktorý sme vytvorili v predchádzajúcom článku:

      Ako je zrejmé z obrázku, v strome stránky sú zvýraznené štyri dokumenty (konkrétne „Blog“, „O autoroch“, „Fotografie“ a „Spätná väzba“), ktoré následne vytvoria odkazy v hornom menu.

      Dovoľte mi tiež pripomenúť, že predtým sme skryli dokumenty, ktoré nechceme zobrazovať v ponuke. Napríklad v nastaveniach dokumentu s názvom „Hľadať na stránke“ bolo odstránené začiarkavacie políčko „Zobraziť v ponuke“ a zvyšné dva dokumenty „Odkazy“ a „Kategórie“ na stránke sme skryli zrušením začiarknutia políčka „Zverejniť“ nastavenia dokumentu (záložka "Nastavenia stránky" nastavenia dokumentu).

      V predchádzajúcom článku sme si teda pripravili horné menu v ovládacom systéme.

      Teraz prejdime k problematike zobrazovania našich akcií priamo na stránke.

      Väčšinu programov na stránke vykonávajú tzv. "", t.j. samostatné časti kódu (možno ich chápať aj ako samostatné funkcie alebo podprogramy) v PHP. Preto, aby sme implementovali zobrazenie horného menu v MODx, musíme vytvoriť aj nový snippet, naprogramovať ho a v šablóne na správnom mieste pridať volanie tohto snippetu.

      Prejdeme do systému správy, otvoríme kartu „Zdroje“ -> „Správa zdrojov“ -> kartu „Úryvky“ a klikneme na odkaz „Nový úryvok“. Do poľa „Názov úryvku“ zadajte „TopMenu“ bez úvodzoviek a zatiaľ len uložte prázdny úryvok bez kódu. Po uložení uvidíme názov nášho úryvku na karte „Úryvky“.

      Pripomínam, že v našej šablóne sme presunuli hornú ponuku do časti „TOPMENU“. Prepnite na kartu "Chunks" a otvorte "" kus. V obsahu tohto bloku uvidíme nasledujúci kód:


      • Blog

      • O autoroch

      • Fotografia

      • Spätná väzba

      Tento kód len vytvára naše menu. Poďme to okomentovať a pridať volanie do úryvku „TopMenu“ v časti:


      []

      Tu musíme opäť trochu odbočiť, aby sme vysvetlili význam tejto konštrukcie []. Faktom je, že pomocou konštrukcií formulára [] alebo [!SnippetName!] môžeme volať úryvky kdekoľvek v našich šablónach, blokoch a dokonca aj na ľubovoľnej jednotlivej stránke lokality.

      V tomto prípade konštrukcia [] označuje hovor cacheovateľnéúryvok, t.j. volanie dynamického podprogramu, ktorého výsledok sa vypočíta a vykoná raz a následne pri načítaní stránky, kde sa volá tento úryvok, bude výsledok nezmenený, pretože úryvok sa znova nevolá. Šetríme tak zdroje nášho webového servera (a to je vždy veľmi dôležité, keď je zdroj veľmi navštevovaný).

      Existujú však situácie, keď musíte útržkový kód stále znova spúšťať a výsledky nemôžete uložiť do vyrovnávacej pamäte. V takýchto prípadoch sa používa konštrukcia [!SnippetName!], ktorá vždy prinúti vykonať úryvok bez ukladania do vyrovnávacej pamäte. Analogicky sa táto konštrukcia nazýva volanie neuložené do vyrovnávacej pamäteúryvok.

      Uložme teda časť „TOPMENU“ a aktualizujme stránku lokality. Hmm, napodiv, ale horné menu zmizlo. Ale je to naozaj také úžasné? Zakomentovaním HTML kódu ponuky v kúsku sme skryli jej zobrazenie v prehliadači (overte si to pohľadom na zdrojový kód HTML stránky). A náš úryvok „TopMenu“ nerobí nič, pretože doň ešte nič nebolo pridané. Poďme tento nedostatok napraviť :).

      Vráťme sa na záložku „Úryvky“, otvorme vytvorený úryvok „TopMenu“ a skúsme otestovať jeho možnosti... Trpezlivosť, moji pokročilí čitatelia, nie každému sú tieto detaily známe.

      Najprv napíšme najjednoduchší kód (normálny kód PHP):

      echo "Testovanie...";
      ?>

      Pred uložením zvoľte "Pokračovať v úpravách", pretože. budeme musieť zmeniť obsah nášho úryvku viackrát a potom úryvok uložíme. Obnovme stránku webu a pozrime sa na miesto horného menu ... no, pravdupovediac, na prvý pohľad neuvidíme takmer žiadne zmeny, okrem mierne rozšíreného modrého pozadia menu. Stlačíme "CRTL+A" na výber celého textu na stránke lokality a uvidíme, že náš úryvok stále zobrazuje text "Testovanie..." namiesto ponuky, len farba textu zodpovedá pozadiu farba.

      Zmeňte kód útržku na nasledujúci:

      ozvena" Testuje sa...";
      ?>

      Teraz jasne vidíme, že náš úryvok funguje a dokonca (!) zobrazuje nejaký text. No, to je skvelé, ale pre našu úlohu to nestačí, pretože musíme zabezpečiť, aby náš úryvok vypisoval odkazy z riadiaceho systému a presne v tom istom kóde HTML, ktorý sme komentovali v časti „TOPMENU“.

      A opäť trochu rozptýlenia...

      Celý systém vzťahov medzi dokumentmi v MODx je postavený na princípe, že každý „nadradený dokument“ obsahuje od nuly po veľa „podriadených dokumentov“ („nadradený“ -> „deti“).

      Každý dokument v databáze MODx má svoj jedinečný identifikátor „ID“ – toto je číslo, ktoré vidíme v zátvorke v strome stránok vedľa každého z dokumentov.

      Mimochodom, tento jedinečný identifikátor nesie iba jednu jedinú hodnotu – jednoznačne identifikuje konkrétny dokument v systéme riadenia a nič viac! Osobitne zdôrazňujem túto skutočnosť, pretože som videl opakované pokusy o zmenu týchto identifikátorov na rôzne účely ... Musíte si hneď zapamätať, že to jednoducho nemá zmysel, takže sa nepokúšajte tieto čísla meniť. Nemali by ste im venovať veľkú pozornosť, zvyčajne sa tieto čísla používajú iba na generovanie odkazov na určité dokumenty.

      Databáza MODx má pre každý dokument aj špeciálne pole „rodič“. Hodnota tohto poľa je číslo označujúce buď jedinečný identifikátor nadradeného dokumentu, alebo, ak je dokument v koreni stromu, nulu. Vždy je teda možné jednoznačne určiť, ktorý doklad je pre daný doklad nadradený doklad.

      Ak chcete vizuálne vidieť, o čom sme práve hovorili, otvorte phpMyAdmin, vyberte svoju databázu a nájdite tabuľku (PREFIX)site_content, kde (PREFIX) je vaša predpona, ktorú ste zadali počas inštalácie. Uvidíte mnoho polí, v ktorých sú uložené určité údaje dokumentu, vrátane "ID" - jedinečný identifikátor, "rodič" - číslo nadradeného dokumentu, "názov stránky" - názov stránky a iné.

      Takže pomocou táto informácia o princípe ukladania a prepájania dokumentov v MODX môžeme pochopiť, ako získať potrebné údaje na zobrazenie odkazov v hornom menu: potrebujeme nájsť v databáze všetky dokumenty, ktoré sa nachádzajú v koreni stromu lokality, t.j. majú v poli „rodič“ hodnotu nula.

      Pomocou jazyka SQL, podobná žiadosť je popísaná asi takto (Tento dotaz môžete skúsiť zadať do vstupného poľa SQL v phpMyAdmin, po nahradení „modx_“ vašou predponou):

      VYBRAŤ*
      Z `modx_site_content`
      WHERE "rodič" = 0;

      Takáto žiadosť nám však vráti úplne všetky dokumenty z koreňa stránky, čo nie je úplne správne, na základe hlavnej úlohy - zobraziť odkazy iba na tie dokumenty, ktoré majú:

      • zverejnený stav (v databáze je za túto položku zodpovedné pole "zverejnené", kde hodnota = 1 znamená, že dokument je zverejnený, a hodnota = 0 - nepublikovaný).
      • nevymazané (pole "vymazané", kde 1 - vymazané a 0 - nevymazané),
      • a ktoré majú nastavenú možnosť "Zobraziť v menu" (pole "skryť menu", kde 1 - skryť a 0 - zobraziť v menu).

      Navyše, pri pohľade trochu dopredu, dokumenty hneď zoradíme podľa parametra „Pozícia v menu“, ktorý určí pozíciu každého odkazu v našej ponuke.

      No, z pohľadu SQL je to veľmi jednoduchá úloha a rieši sa takto:

      VYBRAŤ*
      Z `modx_site_content`
      KDE „zverejnené“ = 1
      A „rodič“ = 0
      A „odstránené“ = 0
      AND "skryť menu" = 0
      ORDER BY `menuindex` ASC;

      Teoreticky je možné všetky SQL dotazy vykonávať priamo v úryvkoch pomocou PHP skripty, pripájať databázu zakaždým nanovo a robiť mnoho ďalších rutinných operácií, opakovať ich znova a znova... MODx okrem iných výhod poskytuje hotovú sadu nástrojov programového rozhrania (API, Application Programming Interface). API sú softvérové ​​funkcie, ktoré zjednocujú a uľahčujú mnohé procesy spracovania údajov.

      Využime jednu zo spomínaných funkcií API „getDocumentChildren“ v našom úryvku. Funkcia „getDocumentChildren“ prijíma nasledujúce údaje ako parametre:

      • $id – číslo nadradeného dokumentu,
      • $active - vybrať iba zverejnené alebo nezverejnené dokumenty (1 alebo 0),
      • $deleted - vybrať iba vymazané alebo nevymazané dokumenty (1 | 0),
      • $fields - polia, ktoré sú vybrané z databázy,
      • $kde - osobitné podmienky, t.j. podmienka WHERE v dotaze SQL,
      • $triediť – pole, podľa ktorého sa majú zoradiť výsledky
      • $direction - smer triedenia, môže byť ASC alebo DESC, t.j. triedenie od najmenšej po najväčšiu hodnotu alebo naopak
      • $limit - limit žiadosti, t.j. LIMIT podmienka v dotaze SQL

      $results = $modx->getDocumentChildren(
      $id = 0
      $aktívny = 1
      $vymazané = 0
      $where="hidemenu=0",
      $sort="index ponuky",
      $dir="ASC",
      $limit
      );

      Tlač ("

      Foreach($results as $key => $value) (
      print_r($hodnota);
      }

      Tlač ("");
      ?>

      Uložte úryvok a obnovte stránku. V dôsledku vykonania aktualizovaného úryvku „TopMenu“ uvidíte zoznam polí a ich hodnôt zoradených podľa hodnôt poľa „menuindex“ od najmenšej hodnoty po najväčšiu. Skúste zmeniť parameter $dir="ASC" na $dir="DESC" - výsledkom bude, že polia budú prebudované a dokument s najvyššia hodnota polia "menuindex".

      Skúsení programátori pravdepodobne chápu, že získaný výsledok už dáva všetko, čo potrebujete na zostavenie hotového menu s odkazmi. No skoro všetko. V každom prípade budem pokračovať: prepíšeme PHP kód, aby sme sa čo najviac priblížili želanému výsledku.

      $results = $modx->getDocumentChildren(
      $id = 0
      $aktívny = 1
      $vymazané = 0
      "id, názov stránky, zverejnené, index ponuky, odstránené, skryť menu, názov ponuky",
      $where="hidemenu=0",
      $sort="index ponuky",
      $dir="ASC",
      $limit
      );

      $items = "";
      $výstup = "";

      Foreach($results as $key => $value) (
      $items .="


    • ".$value["pagetitle"]."
    • \n";
      }

      Ak ($items != "") (
      $output = "

        \n";
        $výstup .= $položky;
        $output .="
      \n";
      }

      Return $output;

      Kód nebudeme podrobne rozoberať, keďže ide o najbežnejší PHP kód, nič viac. Ak niekto nerozumie významu akýchkoľvek konštrukcií, pýtam sa v komentároch alebo lepšie - na príslušných fórach podpory.

      Uložte nový útržkový kód a obnovte stránku. V dôsledku vykonania kódu uvidíme takmer to, čo sme chceli získať:

      Tie. ide už o automaticky generované odkazy, ktorých štruktúra úplne opakuje štruktúru dokumentov v MODx strome. Ak to chcete otestovať, skúste vytvoriť testovací dokument v koreňovom adresári lokality a obnovte stránku.

      To však nie je všetko. Mnohí si už všimli, že existujú odkazy, ale žiadne odkazy ... Paradox :). Mám na mysli, že názvy dokumentov v menu sú zobrazené, ale odkazy na ne nefungujú. Je to logické, pretože zatiaľ sa v kóde odkazu namiesto skutočných ciest zobrazuje „#“.

      Na vyriešenie tohto problému sa musíte dozvedieť o ďalšej mimoriadne užitočnej funkcii MODx: adrese ľubovoľného vnútorná strana stránky možno získať pomocou nasledujúcej konštrukcie [~id~], kde id je jedinečné číslo požadovaného dokumentu, t.j. rovnaké číslo uvedené v zátvorkách vedľa názvu každého dokumentu v strome lokality. Takže pridaním takejto konštrukcie [~1~] do obsahu šablóny/kúsku/stránky

        • index – alias dokumentu „Blog“, ak sme ako alias dokumentu zadali „index“, príp
        • 1.html, ak sme do poľa „Alias“ dokumentu „Blog“ nič nezadali
      • ak sú priateľské odkazy zakázané, uvidíme text index.php?id=1

      Prepíšme úryvok pomocou týchto informácií:

      $results = $modx->getDocumentChildren(
      $id = 0
      $aktívny = 1
      $vymazané = 0
      "id, názov stránky, zverejnené, index ponuky, odstránené, skryť menu, názov ponuky",
      $where="hidemenu=0",
      $sort="index ponuky",
      $dir="ASC",
      $limit
      );

      $items = "";
      $výstup = "";

      Foreach($results as $key => $value) (
      $items .="


    • ".$value["pagetitle"]."
    • \n";
      }

      Ak ($items != "") (
      $output = "

        \n";
        $výstup .= $položky;
        $output .="
      \n";
      }

      Return $output;

      Zmenili sme teda # na [~".$value["id"]."~], t.j. v skutočnosti je pre každý dokument z poľa jeho jedinečné ID nahradené vnútri konštruktu [~id~]. V dôsledku toho dostaneme ponuku s pracovnými odkazmi.

      Ideál sme už takmer dosiahli... Avšak aj teraz je tu ešte jeden detail, ktorý treba vziať do úvahy: dizajnér určil, že náš aktívny odkaz by mal byť zvýraznený bielym pozadím a farba odkazu by mala byť zmenená na oranžovú. podľa toho.

      Aby sme to dosiahli, opäť odhalíme tajomstvá MODx CMS :). V API je ukrytá funkcia $modx->documentIdentifier, ktorá vracia hodnotu jedinečného ID aktuálnej stránky. Budeme ho potrebovať na určenie aktívnej stránky a jej výber v ponuke:

      $results = $modx-> getDocumentChildren(
      $id = 0
      $aktívny = 1
      $vymazané = 0
      "id, názov stránky, zverejnené, index ponuky, odstránené, skryť menu, názov ponuky",
      $where="hidemenu=0",
      $sort="index ponuky",
      $dir="ASC",
      $limit
      );

      $cid = $modx->identifikator dokumentu;

      $items = "";
      $výstup = "";

      Foreach($results as $key => $value) (
      if ($value["id"] == $cid) (
      $aktívny = " id=\"aktívny\"";
      }
      inak(
      $aktívny = "";
      }
      $items .="
      ".$value["pagetitle"]."
      \n";
      }

      Ak ($items != "") (
      $output = "

        \n";
        $výstup .= $položky;
        $output .="
      \n";
      }

      Return $output;

      No a ako to fungovalo? Stalo!

      Ale nemysleli ste si, že týmto to skončí, však? A je to tak správne. Nastavili sme si najvyššiu latku, chceme využiť maximálne možnosti MODx. A tak ďalší malý detail, ktorý nám ušiel.

      Pozrime sa bližšie na názvy polí, ktoré požadujeme pomocou funkcie getDocumentChildren: „id, pagetitle, publishing, menuindex, delete, hidemenu, menutitle“. Medzi nimi je také pole ako "menutitle". Ako už názov napovedá, toto pole môže ukladať názov menu. Ovládací prvok má tiež vstupné pole "Položka menu". Toto pole je voliteľné. Logika je však taká, že ak je toto pole vyplnené, tak text odkazu v menu by sme mali nahradiť textom zadaným používateľom. No, urobme toto:

      /********************************
      Názov: horné menu
      Účel: Zobrazenie hornej ponuky
      Projekt: MODx demosite
      ********************************/

      $results = $modx->getDocumentChildren(
      $id = 0, // ID nadradeného dokumentu
      $active = 1, // Vyberte iba publikované dokumenty
      $deleted = 0, // Vyberte iba nevymazané dokumenty
      "id, pagetitle, publishing, menuindex, delete, hidemenu, menutitle", // Výber polí z databázy
      $where = "hidemenu = 0", // Vyberte len tie dokumenty, ktoré je potrebné zverejniť v menu
      $sort="menuindex", // Usporiadanie dokumentov podľa poľa index ponuky
      $dir="ASC", // Usporiadanie dokumentov vo vzostupnom poradí
      $limit = "" // Limity neurčujeme (parameter LIMIT v SQL dotaze)
      );

      $cid = $modx->identifikator dokumentu; //získať aktuálne ID stránky

      $items = "";
      $výstup = "";

      Foreach($results as $key => $value) (
      if ($value["id"] == $cid) (
      $aktívny = " id=\"aktívny\"";
      }
      inak(
      $aktívny = "";
      }
      if ($value["menutitle"] != "") (
      $title = $value["menutitle"];
      }
      inak(
      $title = $value["názov stránky"];
      }
      $items .="
      ".$title."
      \n"; //zbiera položky ponuky
      }

      // Ak bola nájdená aspoň jedna položka ponuky,
      // vytvorenie kódu ponuky HTML
      if ($items != "") (
      $output = "

        \n";
        $výstup .= $položky;
        $output .="
      \n";
      }

      // Vráti výsledok úryvku
      návrat $výstup;

      Teraz skúste zadať nejaký text do vstupného poľa "Položka menu" akéhokoľvek dokumentu... Funguje to? úžasné!

      P.S.: Možno niektorých čitateľov prekvapí, že po kliknutí na odkazy v našej ponuke sa obsah stránok nemení, aj keď sa zdá, že podľa cesty v adrese prehliadača prechádzame na nové stránky.. Verte mi, je to úplne normálne, pretože. absolútne všetky stránky momentálne používajú rovnakú šablónu. V tejto šablóne sme v skutočnosti zatiaľ urobili dynamickú iba hornú ponuku, všetky ostatné detaily zostávajú nezmenené. Určite sa tým budeme zaoberať neskôr, ale zatiaľ - neprepadajte panike;).

      Záver:

      Takže ďalší článok dospel k logickému záveru.

      Výsledky vzdelávania:

      • Snažili sme sa pochopiť účel niektorých vstupných polí v dokumentoch MODX a pozreli sme sa na ukladanie týchto informácií do databázy;
      • Dozvedeli sme sa o nových špeciálnych MODx konštrukciách: [], [!SnippetName!], [~id~];
      • Dozvedeli sme sa o dostupnosti špeciálneho API a využili niektoré funkcie API;
      • A na základe týchto poznatkov sme vytvorili náš nový úryvok v MODx!