Meniu MODX pe mai multe niveluri folosind Bootstrap. PdoMenu - creând un meniu în MODX Wayfinder, numele dintre intervale nu sunt afișate
Dar asta nu este pentru noi ;).
Vom face totul de la zero. De ce am avut (eu) nevoie de asta, deoarece există deja opțiuni gata făcute? Pentru că îmi place mai mult așa. Pentru că cred că această abordare este cea mai corectă. Pentru că, știind cum să-l dezvoltăm pe al nostru, putem înțelege cu ușurință codul altcuiva, îl putem schimba, remedia erori sau îl putem completa cu funcționalitatea necesară într-un anumit caz. Și, în cele din urmă, să-ți faci singur este adesea atât de drăguț!
Următoarea narațiune va presupune că cititorul are cunoștințe minime despre programarea PHP. Teoretic, acele persoane care nu înțeleg deloc codul vor putea să copieze codul și să reproducă toate acțiunile care vor fi discutate mai jos. Cu toate acestea, ar putea fi mai bine pentru ei să folosească fragmente gata făcute la fel, deoarece oferă o mulțime de opțiuni pentru configurarea externă fără a intra în codul principal.
Nu vreau să dezbat ce este mai bine pentru utilizator - să ia unul gata făcut sau să dezvolte propriul tău... Ambele cazuri au avantajele și dezavantajele lor. Pentru mine personal, există mai multe avantaje în a doua variantă. De asemenea, fiecare cititor va decide singur.
Așadar, să ne uităm din nou la al nostru. Întrucât există destul de multe părți diferite de software pe site-ul nostru web și trebuie să începem de undeva, așa că hai să programăm...
Meniul de sus
Prin termenul „meniu de sus” mă refer la un set de link-uri către pagini din partea de sus a site-ului (vezi imaginea de mai jos):
Voi descrie primul exemplu de creare a unui fragment în detaliu, în viitor, mă voi concentra în principal pe cele mai semnificative detalii.
Să-l comparăm cu arborele site-ului nostru din sistemul de management, pe care l-am construit în articolul anterior:
După cum se poate observa din figură, în arborele site-ului sunt evidențiate patru documente (și anume „Blog”, „Despre autori”, „Fotografii” și „ Feedback"), care va crea ulterior link-uri în meniul de sus.
Permiteți-mi să vă reamintesc că anterior am ascuns documente pe care nu dorim să le arătăm în meniu. De exemplu, în setările unui document numit „Căutare pe site” am eliminat caseta de selectare „Afișare în meniu” și am ascuns celelalte două documente „Linkuri” și „Categorii” de pe site, debifând caseta de selectare „Publicare” din setările documentului (fila „Setări pagină”) în setările documentului).
Astfel, în articolul precedent am pregătit meniul de sus în sistemul de control.
Să trecem acum la problema afișării acțiunilor noastre direct pe site.
Majoritatea programelor de pe site sunt realizate de așa-numitele. " ", adică bucăți individuale de cod (pot fi înțelese și ca funcții sau subrutine individuale) în PHP. Prin urmare, pentru a implementa o afișare a meniului de sus în MODx, trebuie să creăm și un nou snippet, să-l programăm și să adăugăm un apel la acest fragment în șablon în locul potrivit.
Să mergem la sistemul de management, deschidem fila „Resurse” -> „Gestionarea resurselor” -> fila „Fragmente” și faceți clic pe linkul „Fragment nou”. În câmpul „Numele fragmentului”, introduceți „TopMenu” fără ghilimele și pentru moment doar salvați fragmentul gol fără cod. După salvare, vom vedea numele fragmentului nostru în fila „Fragmente”.
Permiteți-mi să vă reamintesc că în șablonul nostru am plasat meniul de sus în porțiunea „TOPMENU”. Să comutăm la fila „Bucăți” și să deschidem porțiunea „ ”. În conținutul acestei bucăți vom vedea următorul cod:
- Blog
- Despre autori
- Fotografii
- Feedback
Acest cod este cel care creează meniul nostru. Să-l comentăm și să adăugăm un apel la fragmentul „TopMenu” în fragment:
[]
Aici, din nou, va trebui să divagăm puțin pentru a explica sensul acestei construcții []. Faptul este că cu ajutorul unor construcții precum [] sau [!SnippetName!] putem face apeluri către fragmente oriunde în șabloanele noastre, bucăți și chiar pe orice pagină individuală a site-ului.
În acest caz, construcția [] denotă un apel stocabil în cache fragment, adică apelarea unei subrutine dinamice, al cărei rezultat va fi calculat și executat o dată, iar ulterior la încărcarea paginii unde este apelat acest fragment, rezultatul va fi neschimbat, deoarece fragmentul nu mai este apelat din nou. În acest fel, economisim resurse pe serverul nostru web (și acest lucru este întotdeauna foarte important atunci când există trafic mare către resursă).
Cu toate acestea, există situații în care trebuie să reexecuți codul fragmentului tot timpul și nu poți stoca rezultatele în cache. În astfel de cazuri, se folosește constructul [!SnippetName!], care va forța întotdeauna executarea fragmentului fără cache. Prin analogie, această construcție se numește apel necacheabil fragment.
Deci, să salvăm fragmentul „TOPMENU” și să actualizăm pagina site-ului. Hmm, destul de ciudat, meniul de sus a dispărut. Dar este chiar atât de surprinzător? Comentând codul HTML al meniului în fragment, am ascuns afișarea acestuia în browser (verificați acest lucru uitându-ne la codul sursă Pagini HTML). Dar fragmentul nostru „TopMenu” nu face nimic, deoarece încă nu a fost adăugat nimic la el. Să corectăm acest neajuns :).
Să revenim la fila „Fragmente”, să deschidem fragmentul „TopMenu” creat și să încercăm să-i testăm capacitățile... Răbdare, cititorii mei avansați, nu toată lumea este familiarizată cu aceste detalii.
Mai întâi, să scriem cel mai simplu cod (cod PHP obișnuit):
ecou „Testare...”;
?>
Înainte de a salva, selectați „Continuați editarea”, deoarece va trebui să schimbăm conținutul fragmentului nostru de mai multe ori, iar după aceea vom salva fragmentul. Să reîmprospătăm pagina site-ului și să vedem în locul meniului de sus... ei bine, să fiu sincer, la prima vedere nu vom vedea aproape nicio modificare, cu excepția fundalului albastru ușor extins al meniului. Să apăsăm „CRTL+A” pentru a selecta tot textul de pe pagina site-ului și vom vedea că fragmentul nostru afișează totuși textul „Testing...” în locul meniului, doar culoarea textului se potrivește cu culoarea de fundal. .
Să schimbăm codul fragmentului în următorul:
ecou" Testare...";
?>
Acum putem vedea clar că fragmentul nostru funcționează și chiar (!) afișează ceva text. Ei bine, acest lucru este grozav, dar nu suficient pentru sarcina noastră, deoarece trebuie să ne asigurăm că fragmentul nostru afișează linkuri din sistemul de control și exact în același cod HTML pe care l-am comentat în partea „TOPMENU”.
Și din nou puțină distragere a atenției...
Întregul sistem de relații de documente din MODx este construit pe principiul: fiecare „document părinte” conține de la zero la multe „documente copil” („părinte” -> „copii”).
Fiecare document din baza de date MODx are propriul său identificator unic „ID” - acesta este numărul pe care îl vedem între paranteze în arborele site-ului de lângă fiecare document.
Apropo, acest identificator unic are o singură semnificație - identifică în mod unic un anumit document în sistemul de management si nimic mai mult! Subliniez în mod special acest fapt, deoarece am întâlnit încercări repetate de a schimba acești identificatori pentru o mare varietate de scopuri... Trebuie să vă amintiți imediat că acest lucru este pur și simplu inutil, așa că nu încercați să schimbați aceste numere. Nu ar trebui să le acordați prea multă atenție, de obicei, aceste numere sunt folosite pur și simplu pentru a genera link-uri către anumite documente.
Baza de date MODx creează, de asemenea, un câmp „părinte” special pentru fiecare document. Valoarea acestui câmp este un număr care indică fie identificatorul unic al documentului părinte, fie, dacă documentul se află la rădăcina arborelui, zero. Astfel, puteți determina întotdeauna fără ambiguitate care document este documentul părinte pentru un anumit document.
Pentru a vedea clar despre ce tocmai am vorbit, deschideți phpMyAdmin, selectați baza de date și găsiți tabelul (PREFIX)site_content, unde (PREFIX) este prefixul pe care l-ați introdus în timpul instalării. Veți vedea multe câmpuri care stochează date specifice ale documentului, inclusiv „ID” - un identificator unic, „părinte” - numărul documentului părinte, „pagetitle” - titlul paginii și altele.
Deci, folosind aceste informații despre principiul stocării și conectării documentelor în MODx, putem înțelege cum să obținem datele necesare pentru a afișa link-urile din meniul de sus: trebuie să găsim în baza de date toate documentele care se află la rădăcina site-ului copac, adică au valoarea zero în câmpul „părinte”.
Folosind Limbajul SQL, o solicitare similară este descrisă cam așa (Puteți încerca să introduceți această cerereîn câmpul de intrare SQL din phpMyAdmin, după înlocuirea „modx_” cu prefixul dvs.):
SELECTAȚI *
DIN `modx_site_content`
UNDE `părinte` = 0;
Cu toate acestea, o astfel de solicitare ne va returna absolut toate documentele de la rădăcina site-ului, ceea ce nu este în întregime corect, pe baza sarcinii principale - să afișam link-uri numai către acele documente care au:
- stare publicată (în baza de date, acest articol este reprezentat de câmpul „publicat”, unde valoarea = 1 înseamnă că documentul este publicat, iar valoarea = 0 înseamnă nepublicat).
- anulat (câmpul „șters”, unde 1 este șters și 0 nu este șters),
- și care au setată opțiunea „Afișare în meniu” (câmpul „ascunde meniu”, unde 1 înseamnă ascunde și 0 înseamnă afișare în meniu).
În plus, privind puțin înainte, vom sorta imediat documentele după parametrul „Poziție în meniu”, care va determina poziția fiecărui link în meniul nostru.
Ei bine, din punct de vedere SQL, aceasta este o sarcină complet simplă și poate fi rezolvată astfel:
SELECTAȚI *
DIN `modx_site_content`
UNDE `publicat` = 1
ȘI „părinte” = 0
ȘI „șters” = 0
ȘI `hidemenu` = 0
COMANDA PENTRU `menuindex` ASC;
Teoretic, toate interogările SQL pot fi executate în fragmente direct folosind Scripturi PHP, conectând baza de date din nou și făcând multe alte operațiuni de rutină, repetându-le iar și iar... Dar, vezi, asta ar anula sensul folosirii unui cadru, ceea ce este cu siguranță sistemul nostru de management, deoarece MODx, printre celelalte avantaje ale sale, oferă gata setat fonduri interfata software(API, Interfață de programare a aplicațiilor). API-urile sunt funcții software care unifică și facilitează multe procese de prelucrare a datelor.
Să folosim una dintre funcțiile API menționate „getDocumentChildren” în fragmentul nostru. Funcția „getDocumentChildren” primește următoarele date ca parametri:
- $id - numărul documentului părinte,
- $activ - selectați doar documentele publicate sau nepublicate (1 sau respectiv 0),
- $deleted - selectați doar documentele șterse sau neșterse (1 | 0),
- $fields - câmpuri care sunt selectate din baza de date,
- $unde - conditii speciale, i.e. WHERE starea in interogare SQL,
- $sort - câmp după care rezultatele ar trebui să fie sortate
- $direcție - direcția de sortare, poate lua valori ASC sau DESC, adică sortați de la cea mai mică la cea mai mare valoare sau invers
- $limit - limită de solicitare, adică Condiție LIMIT în interogarea SQL
$rezultate = $modx->getDocumentChildren(
$id = 0,
$activ = 1,
$deleted = 0,
$unde = "hidemeniu = 0",
$sort="menuindex",
$dir="ASC",
$limită
);
Imprimare("
Foreach($rezultate ca $key => $value) (
print_r($valoare);
}
Imprimare("");
?>
Salvați fragmentul și reîmprospătați pagina. Ca urmare a executării fragmentului actualizat „TopMenu”, veți vedea o listă de matrice și valorile acestora, sortate după valorile câmpului „menuindex” de la cel mai mic la cel mai mare. Încercați să schimbați parametrul $dir="ASC" în $dir="DESC" - ca rezultat, matricele vor fi reconstruite și documentul cu cea mai mare valoare a câmpului „menuindex” va fi afișat ca prim document.
Programatorii cu experiență înțeleg probabil că rezultatul obținut oferă deja tot ce aveți nevoie pentru a construi un meniu gata făcut cu link-uri. Ei bine, aproape totul. În orice caz, voi continua: să rescriem codul PHP pentru a ne apropia cât mai mult de rezultatul dorit.
$rezultate = $modx->getDocumentChildren(
$id = 0,
$activ = 1,
$deleted = 0,
„id, pagetitle, published, menuindex, deleted, hidemenu, menutitle”,
$unde = "hidemeniu = 0",
$sort="menuindex",
$dir="ASC",
$limită
);
$items = "";
$ieșire = "";
Foreach($rezultate ca $key => $value) (
$articole .="
„.$value[„pagetitle”].”
}
Dacă ($articole != "") (
$ieșire = "
- \n";
$ieșire .= $articole;
$ieșire .="
}
Returnează $ieșire;
Nu vom analiza codul în detaliu, deoarece acesta este cel mai obișnuit cod PHP, nimic mai mult. Dacă cineva nu înțelege semnificația vreunei construcții, vă rugăm să lăsați un comentariu sau, mai bine, accesați forumurile de asistență relevante.
Să salvăm noul cod de fragment și să reîmprospătăm pagina. Ca rezultat al executării codului, vom vedea aproape ceea ce am vrut să obținem:
Aceste. Acestea sunt deja link-uri generate automat, a căror structură repetă complet structura documentelor din arborele MODx. Pentru a testa acest lucru, încercați să creați un document de testare în rădăcina site-ului și reîmprospătați pagina.
Cu toate acestea, asta nu este tot. Mulți probabil au observat deja că există link-uri, dar nu există link-uri... Paradox :). Adică numele documentelor sunt afișate în meniu, dar linkurile către ele nu funcționează. Acest lucru este logic, deoarece deocamdată codul de legătură afișează „#” în loc de căi reale.
Pentru a rezolva această problemă, trebuie să aflați despre o altă caracteristică extrem de utilă a MODx: adresa oricărei pagini interne a site-ului poate fi obținută folosind următoarea construcție [~id~], unde id este număr unic documentul solicitat, adică același număr indicat între paranteze lângă numele fiecărui document din arborele site-ului. Astfel, prin adăugarea unei astfel de construcții [~1~] în conținutul șablonului/bucății/paginii,
-
- index – alias al documentului „Blog”, dacă am introdus „index” ca alias al documentului, sau
- 1.html, dacă nu am introdus nimic în câmpul „Nickname” pentru documentul „Blog”.
- dacă linkurile prietenoase sunt dezactivate, vom vedea textul index.php?id=1
Să rescriem fragmentul folosind aceste informații:
$rezultate = $modx->getDocumentChildren(
$id = 0,
$activ = 1,
$deleted = 0,
„id, pagetitle, published, menuindex, deleted, hidemenu, menutitle”,
$unde = "hidemeniu = 0",
$sort="menuindex",
$dir="ASC",
$limită
);
$items = "";
$ieșire = "";
Foreach($rezultate ca $key => $value) (
$articole .="
„.$value[„pagetitle”].”
}
Dacă ($articole != "") (
$ieșire = "
- \n";
$ieșire .= $articole;
$ieșire .="
}
Returnează $ieșire;
Deci am schimbat # în [~".$value["id"].."~], adică. de fapt, pentru fiecare document din matrice, ID-ul său unic este înlocuit în interiorul construcției [~id~]. Ca rezultat, obținem un meniu cu link-uri de lucru.
Aproape am atins idealul... Cu toate acestea, chiar și acum mai există un detaliu care trebuie luat în considerare: designerul a stabilit ca legătura noastră activă să fie evidențiată cu un fundal alb și, în consecință, culoarea linkului să fie schimbată în portocaliu.
Pentru a realiza acest lucru, vom dezvălui din nou secretele MODx CMS :). Ascunsă în API este funcția $modx->documentIdentifier, care returnează valoarea identificatorului unic al paginii curente. Vom avea nevoie de el pentru a determina pagina activă și pentru a o evidenția în meniu:
$rezultate = $modx->getDocumentChildren (
$id = 0,
$activ = 1,
$deleted = 0,
„id, pagetitle, published, menuindex, deleted, hidemenu, menutitle”,
$unde = "hidemeniu = 0",
$sort="menuindex",
$dir="ASC",
$limită
);
$cid = $modx->documentIdentifier;
$items = "";
$ieșire = "";
Foreach($rezultate ca $key => $value) (
dacă ($valoare[„id”] == $cid) (
$activ = " id=\"activ\"";
}
altfel(
$activ = "";
}
$articole .="
„.$value[„pagetitle”].”
}
Dacă ($articole != "") (
$ieșire = "
- \n";
$ieșire .= $articole;
$ieșire .="
}
Returnează $ieșire;
Ei bine, cum a ieșit? A funcționat!
Dar nu credeai că toate astea se vor termina aici, nu-i așa? Și pe bună dreptate. Ne-am stabilit cel mai înalt standard, vrem să folosim capacitățile maxime ale MODx. Și, prin urmare, mai există un mic detaliu pe care l-am omis.
Să ne uităm îndeaproape la numele câmpurilor pe care le solicităm folosind funcția getDocumentChildren: „id, pagetitle, published, menuindex, deleted, hidemenu, menutitle”. Printre acestea există un câmp precum „menutitle”. După cum sugerează și numele, acest câmp poate stoca titlul meniului. Sistemul de control are, de asemenea, un câmp de introducere „Articol de meniu”. Acest câmp este opțional. Totuși, logica este că dacă acest câmp este completat, atunci trebuie să înlocuim textul linkului din meniu cu cel introdus de utilizator. Ei bine, hai să facem asta:
/********************************
Nume: Meniul de sus
Scop: Afișează meniul de sus
Proiect: MODx Demosite
********************************/
$rezultate = $modx->getDocumentChildren(
$id = 0, // ID-ul documentului părinte
$activ = 1, // Selectați doar documentele publicate
$deleted = 0, // Selectați doar documentele neșterse
„id, pagetitle, published, menuindex, deleted, hidemenu, menutitle”, // Selectați câmpuri din baza de date
$where = "hidemenu = 0", // Selectați doar acele documente care trebuie publicate în meniu
$sort="menuindex", // Sortați documentele după câmpul menuindex
$dir="ASC", // Sortează documentele în ordine crescătoare
$limit = "" // Nu setăm restricții (parametru LIMIT în interogarea SQL)
);
$cid = $modx->documentIdentifier; //obține ID-ul paginii curente
$items = "";
$ieșire = "";
Foreach($rezultate ca $key => $value) (
dacă ($valoare[„id”] == $cid) (
$activ = " id=\"activ\"";
}
altfel(
$activ = "";
}
dacă ($value["menutitle"] != "") (
$titlu = $valoare["menutitle"];
}
altfel(
$title = $value["pagetitle"];
}
$articole .="
„.$titlu”.
}
// Dacă am reuși să găsim măcar unul element de meniu,
// creează codul de meniu HTML
dacă ($articole != "") (
$ieșire = "
- \n";
$ieșire .= $articole;
$ieșire .="
}
// Returnează rezultatul fragmentului
returnează $ieșire;
Acum încercați să introduceți ceva text în câmpul de introducere „Element de meniu” al oricărui document... Funcționează totul? Uimitor!
P.S.: Unii cititori ar putea fi surprinși că atunci când urmați linkurile din meniul nostru, conținutul paginilor nu se modifică, deși se pare că, judecând după calea din adresa browserului, trecem la pagini noi... Credeți eu, acest lucru este absolut normal, pentru că Absolut toate paginile folosesc în prezent același șablon. În acest șablon, de fapt, am făcut doar meniul de sus dinamic, toate celelalte detalii rămân neschimbate. Cu siguranță vom intra în asta mai târziu, dar deocamdată - nu vă panicați ;).
Concluzie:
Deci, un alt articol a ajuns la concluzia sa logică.
Rezultatele antrenamentului:
- Am încercat să înțelegem scopul unora dintre câmpurile de intrare din documentele MODx și am analizat stocarea acestor informații într-o bază de date;
- Am aflat despre noi modele speciale MODx: [], [!SnippetName!], [~id~];
- Am aflat despre disponibilitatea unui API special și am profitat de unele funcții API;
- Și pe baza acestor cunoștințe, am creat noul nostru fragment în MODx!
Să începem lecția 8 din MODx Revolution pentru începători. Permiteți-mi să vă reamintesc că facem un site web pentru studiul MODx Revolution. În ultima lecție, ne-am uitat la conceptul de fragmente, care sunt bucăți de cod PHP care ne permit să adăugăm funcționalități site-ului nostru. În această lecție ne vom uita la un fragment special - Wayfinder și îl vom folosi pentru a crea un meniu dinamic pentru site-ul nostru.
Ce este Wayfinder?
Wayfinder este un fragment care afișează o listă nesortată de legături către resurse în arborele site-ului dvs. tipul de ieșire a listei depinde de apelul de fragment și de parametrii acestui apel. În termeni generali, aceasta înseamnă că atunci când plasați un apel Wayfinder în șablonul dvs., acesta începe să caute resurse care îndeplinesc parametrii specificați în acesta și returnează o listă de link-uri către acele resurse într-un format de listă nesortat sau într-un format definit de dvs.
De ce să folosiți Wayfinder?
De obicei folosesc Wayfinder pentru a crea navigare dinamică pe site, adică meniuri. Din moment ce majoritatea șablon HTML Folosiți liste neordonate pentru a crea meniuri, atunci Wayfinder este instrumentul perfectîn aceste scopuri. Când creați un site, puteți introduce cu grijă adresele URL în meniul de navigare, așa cum ați făcut înainte într-un site HTML static. În același timp, de fiecare dată când trebuie să ștergeți sau să creați o pagină, trebuie să faceți modificările corespunzătoare în meniul dvs., să schimbați adresele URL. Utilizarea fragmentului Wayfinder pentru a vă genera dinamic meniurile evită această durere de cap, deoarece detectează automat modificările și vă modifică meniul în consecință.
Wayfinder este un instrument destul de flexibil și vă permite să determinați ce resurse să includeți sau să excludeți din meniu, care este șablonul de meniu, cât de profund este meniul site-ului dvs. Limita capacităților dvs. este determinată de codul dvs. HTML/CSS.
Cum se utilizează Wayfinder?
După cum am menționat deja în lecția anterioară, sintaxa pentru apelarea fragmentelor arată astfel: [[!somesnippet]]
Acesta este doar un apel de bază și nu este suficient, pe lângă acesta trebuie să definim câteva proprietăți ale acestui apel. În cazul Wayfinder, minimul care trebuie definit în proprietăți este locul în care Wayfinder ar trebui să înceapă să construiască o listă de resurse în arborele de resurse. Astfel, la apelarea fragmentului Wayfinder, trebuie să specificați cel puțin un parametru - ID-ul inițial. Apelul de bază către fragmentul Wayfinder în acest caz va arăta astfel:
Acest apel îi spune Wayfinder-ului să înceapă de la rădăcina arborelui ( ID 0 înseamnă rădăcina site-ului) și arată toate resursele care sunt publicate și care nu au o bifă în caseta de selectare Ascundeți din meniuri.
Dacă ne uităm la șablonul pe care îl folosim, putem vedea un meniu de sus cu mai multe opțiuni și liste derulante.
Să aruncăm o privire la șablonul și codul care iese acest meniu:
După cum puteți vedea, aceasta este o listă neordonată imbricată. Să înlocuim acest cod cu un apel de bază Wayfinder și să vedem ce obținem. Ștergeți codul de mai sus și inserați în locul lui:
[[!Wayfinder? &startId=`0` ]]
Dacă utilizați același șablon ca și mine, codul dvs. va arăta cam așa:
Salvați șablonul și uitați-vă la pagina de start, ar trebui să arate așa:
Fantastic! Puteți vedea că meniul nostru anterior, care avea mai multe opțiuni, a fost acum înlocuit cu un meniu simplu cu un singur element - Acasă. Acest lucru ne spune că Wayfinder funcționează așa cum ar trebui și ia o pagină de pe site-ul nostru și își afișează titlul ca element de meniu.
Să mai creăm câteva resurse. Voi adăuga o pagină Despre cu 3 pagini copil (PAgini MODx, Tutoriale, Contact și Întrebări frecvente). Puteți crea orice resurse sau pagini pentru site-ul dvs. Scopul acestui exercițiu este de a crea mai multe resurse, astfel încât Wayfinder să aibă ceva de afișat.
Am terminat de creat pagini și arborele de resurse ale site-ului meu arată astfel:
Acum avem mai multe pagini, să vedem cum apelarea Wayfinder va genera un meniu pentru site-ul nostru:
Vestea bună este că toate paginile noastre au apărut în meniu și făcând clic pe fiecare element de meniu suntem duși la pagina corespunzătoare. (Pentru a testa acest element, adăugați ceva text în fiecare pagină, de exemplu pe pagina Despre puteți adăuga „Aceasta este o pagină Despre” și acest mesaj va apărea când pagina este deschisă. Rețineți că trebuie să definim un șablon pentru fiecare pagina, dar în în acest moment nu am de gând să-mi fac griji).
Vestea proastă este că formatarea meniului este întreruptă, dar o putem remedia. Clic clic dreapta mouse-ul pe pagina web și uită-te la codul sursă (sau folosește firebug pentru asta), vei vedea asta acum Wayfinder generează HTML astfel:
- Acasă
- Despre
- MODx CMS
- Padul de codare
- Blogul
- Serviciile
- Contactaţi-ne
- Tutoriale
- FAQ
După cum puteți vedea, acesta arată foarte asemănător cu codul nostru static inițial, cu câteva excepții. În primul rând, Wayfinder a generat
- articol fără clasă sf-meniu care a fost folosit în codul nostru static. Șablonul are nevoie de această clasă pentru a funcționa cu CSS. De asemenea, este clar că
- articolele au un parametru span, care se referă la elementele textului linkului din codul static original și nu este prezent în codul Wayfinder generat. În plus, codul nostru HTML static are o clasă element-pagină-curent, care nu este reprezentat în codul fragmentului nostru Wayfinder. Toate aceste piese lipsă fac meniul nostru să arate inestetic.
Cum să personalizați stilul de ieșire al unui fragment Wayfinder
Privind modul în care Wayfinder generează codul, apare o întrebare foarte firească: „Cum putem adăuga bucățile de cod lipsă, astfel încât să dorim să afișăm meniul în forma de care avem nevoie?” Răspunsul este foarte ușor, folosim bucăți de șablon pentru a formata ieșirea fragmentului Wayfinder.
Wayfinder este un instrument flexibil și cu ajutorul parametrilor puteți defini aspect ieșire. Unii parametri generali vă permit să determinați la ce nivel să începeți construirea unui meniu, ce elemente să nu includeți în meniu etc. Alți parametri sunt parametrii șablonului, care vă permit să setați codul șablonului HTML pentru meniul dvs. etc. Descrierile acestuia din urmă pot fi găsite în documentația oficială - http://rtfm.modx.com/display/ADDON/Wayfinder.
Ia notă: Unii parametri Wayfinder au valori implicite.
Aceasta explică, de exemplu, de ce în meniul generat de Wayfinder, elementul din pagina de pornire are numele clasei „ primul activ" Aceasta este clasa implicită, dar o putem suprascrie definindu-ne propriile clase în bucăți de șablon.
Vom folosi mai multe opțiuni Wayfinder în acest tutorial, dar vă încurajez să le explorați pe toate și să exersați să le folosiți cât mai mult posibil pentru a înțelege toate capacitățile lor. Deoarece setările implicite ale Wayfinder sunt documentate clar pe site-ul oficial, ar fi o prostie să vorbim despre ele aici. Vom folosi din ce în ce mai multe dintre acestea pe măsură ce lucrăm prin diferite meniuri.
Pentru a începe să lucrați la șablonul de meniu, să creăm mai multe mini-șabloane și să le salvăm în bucăți. Veți vedea că în aceste bucăți folosim cod HTML, dar înlocuim elemente dinamice umpluturi(sau substituenți cum sunt numite și) a căror sintaxă arată astfel: [[+substituent]]. Substituenții pe care îi folosim sunt specifici fragmentului Wayfinder și definiția lor este evidentă din nume, dar puteți oricând să consultați documentația MODx pentru ajutor mai complet.
Iată bucățile pe care le voi folosi pentru a crea șablonul nostru:
7in1meniuExterior– va conține codul HTML pentru containerul nostru extern ul.
Puteți vedea că am adăugat o clasă pentru ul exterior. Mod alternativ pentru a face acest lucru este să utilizați substituentul wf.classes și apoi să adăugați numele clasei la apelul curent al wayfinder folosind parametrul outerClass. Dar pentru simplitate, să folosim prima metodă, dar ambele vor funcționa bine...
7în1rând de meniu– va conține codul HTML al elementelor de meniu de primul nivel
- [[+wf.linktext][[+wf.wrapper]]
- [[+wf.linktext][[+wf.wrapper]]
- [[+menutitle]][[+wrapper]]
- [[+menutitle]] ([[+copii]]) [[+wrapper]]` &countChildren=`1` ]]
- . Nu vom rescrie fragmentul, dar schimbarea clasei în stiluri nu este o problemă.
- Meniu sub forma unei liste, tabel, imagini, pictograme etc.
- Meniuri statice
- Meniu cu diverse efecte (menu derulant, derulant etc.)
- Harta site-ului
- [[+wf.linktext][[+wf.wrapper]]
- wf.classes - afișează clasele preluate din setul de parametri Wayfinder (inclusiv atributul class="")
- wf.classnames - afișați numele claselor (fără class="")
- wf.wrapper - ieșire de conținut intern (rând).
- wf.classes - ieșirea clasei (inclusiv atributul class="")
- wf.classnames - ieșirea claselor corespunzătoare (fără class="")
- wf.link - href="" valoarea atributului pentru linkul meniu
- wf.title - numele textului titlului pentru link din câmpul specificat în parametrul &titleOfLinks
- wf.linktext - text pentru linkul activ specificat în câmpul transmis în parametrul &textOfLinks
- wf.wrapper - afișează conținut intern, cum ar fi submeniul
- wf.id - afișează ID-ul unic al atributului. Trebuie să specificați parametrul &rowIdPrefix pentru ca acest substituent să primească o valoare. Valoarea este prefixul + docId.
- wf.attributes - afișează linkul de atribute pentru elementul curent
- wf.docid - identificatorul de document al elementului curent
- wf.description - descriere pentru elementul curent
- wf.level - nivelul de imbricare curent
- [[+wf.linktext][[+wf.wrapper]]
- [[+wf.linktext]] - [[+wf.description]] [[+wf.wrapper]]
[[+wf.title]]
[[+wf.title]]
Ideea principală aici este că am adăugat eticheta la textul link-ului meniu ca în codul HTML static original. Am inclus și substituentul wf.classes și acest lucru îmi va permite să definesc o clasă pentru pagina curentă care va suprascrie clasa „activă” implicită.
7in1meniu Interior– va conține codul HTML al containerelor interne ul
- [[+wf.wrapper]]
7in1menuInnerRow– va conține cod HTML pentru liniile de elemente de nivel intern
Asta este, acum bucățile noastre de șablon sunt la locul lor, după cum puteți vedea (de dragul comenzii, le-am plasat într-o categorie separată):
Acum putem schimba apelul Wayfinder, astfel încât să putem folosi aceste mini șabloane pentru a scoate Wayfinder-ul. Dacă te uiți la lista de parametri de șabloane (ar fi util să ai http://rtfm.modx.com/display/ADDON/Wayfinder deschis în fața ta sau să o tipărești și să o păstrezi lângă ecran), va vedea că mi-am apelat bucățile similare cu parametrii de apel pentru fragmente corespunzătoare. Am făcut acest lucru pentru comoditate, mă ajută să țin evidența ceea ce este atunci când încep să-mi construiesc apelul. Să adăugăm parametri și să ne apelăm bucățile. Apelul Wayfinder va arăta acum astfel:
[[!Wayfinder? &startId=`0` &outerTpl=`7in1menuOuter` &rowTpl=`7in1menuRow` &innerTpl=`7in1menuInner` &innerRowTpl=`7in1InnerRow` &hereClass=`current_page_item` &firstClass=Class=]``
Valoarea parametrului este plasată în apostrofe (`) și nu în ghilimele simple (’).
Grozav, haideți să aruncăm o privire la această provocare. Puteți vedea că folosim opțiunile de șablon pentru a apela bucățile noastre, astfel încât Wayfinder să scoată HTML-ul de care avem nevoie cu clasele corecte. Am definit apelatul aiciClasa parametru și i-a dat o valoare element_pagină_actuală astfel încât să se potrivească cu șablonul HTML static. Poate observați că am lăsat parametrii clasa întâiŞi ultima clasă gol. Motivul pentru aceasta este că șablonul meu HTML nu setează o clasă pentru primul și ultimul element de meniu, așa că pentru a evita suprapunerea am suprascris șirurile goale în ele.
Se vede că meniul nostru arată exact așa cum ne-am dorit. Stilurile corecte sunt folosite în meniul drop-down. Dacă te uiți la codul sursă, vei vedea că este generat Wayfinder Codul HTML s-a schimbat dincolo de recunoaștere:
Acest cod se potrivește cu codul static original al șablonului nostru, dar a fost generat prin apelare Wayfinder.
Există multe alte opțiuni pe care le puteți utiliza împreună Wayfinder pentru construirea meniurilor dvs. În lecțiile următoare ne vom uita la meniuri complexe și la modul de integrare a acestora în Wayfinder. Pentru a rezuma: site-ul nostru a luat acum o anumită formă și avem un meniu funcțional și dinamic.
Fragment de generare a meniului. Poate înlocui Wayfinder și permite mai multă flexibilitate în specificarea parametrilor.
De exemplu, poate construi un meniu din mai mulți părinți deodată, afișându-i atât împreună, cât și în ramuri separate.
Oferă o creștere semnificativă a vitezei doar la prima lansare, apoi Wayfinder nu este cu mult inferior, datorită memorării în cache corespunzătoare;
Opțiuni
În mod implicit, pdoMenu acceptă parametri comuni pdoTools și unii dintre ei:
Nume | Implicit | Descriere |
---|---|---|
&părinţi | Resursa curenta | Lista de părinți pentru a căuta rezultate, separate prin virgule. Daca pui &parinti=`0`- proba nu este limitată. Dacă id-ul unui părinte începe cu o cratimă, acesta și copiii săi sunt excluși din selecție. |
&nivel | 0 (nelimitat) | Nivelul meniului generat. |
&resurse | Lista resurselor care vor fi afișate în rezultate, separate prin virgule. Dacă id-ul unei resurse începe cu o cratimă, resursa respectivă este exclusă din selecție. | |
&şabloane | Listă de șabloane pentru filtrarea rezultatelor, separate prin virgule. Dacă ID-ul șablonului începe cu o cratimă, resursele cu acesta sunt excluse din selecție. | |
&unde | Matrice parametri suplimentari mostre, codificate în JSON. | |
&displayStart | 0 | Activați afișarea nodurilor de meniu de pornire. Util atunci când specificați mai mult de un „părinți”. |
&context | Limitarea eșantionului în funcție de contextul resursei. | |
&showHidden | 0 | Afișați resursele ascunse în meniu. |
&showNepublicat | 0 | Afișați resurse nepublicate. |
&previzualizareNepublicat | 0 | Activați afișarea resurselor nepublicate dacă utilizatorul are permisiunea de a face acest lucru. |
&hideSubMeniuri | 0 | Ascundeți ramurile de meniu inactive. |
&selecta | Lista câmpurilor de selectat, separate prin virgule. Puteți specifica un șir JSON cu o matrice, de exemplu &select=`("modResource":"id,titul paginii,conținut")` | |
&filtrează după | index de meniu | Orice câmp de resursă de sortat, inclusiv parametrul TV dacă este specificat în parametru &include televizoare, De exemplu &sortby=`("tvname":"ASC","pagetitle":"DESC")`. Puteți specifica un șir JSON cu o matrice de mai multe câmpuri. Pentru sortarea aleatorie, specificați &sortby=`RAND()` |
&sortdir | A.S.C. | Direcția de sortare: descendent sau ascendent. Dacă lăsați goli parametrii &sortby și &sortdir, sortarea va fi în ordinea resurselor din &resurse. |
&limită | 0 | Limitarea numărului de rezultate ale probei. |
&offset | 0 | Omiterea rezultatelor de la început. Trebuie utilizat împreună cu un specificat explicit &limită |
&checkPermisiuni | Specificați ce permisiuni trebuie verificate pentru utilizator la afișarea resurselor, de exemplu &checkPermissions=`listă`. | |
&countCopii | 0 | Numărarea cu precizie a numărului de resurse copil din fiecare categorie și afișarea lor în substituentul [[+copii]]. Face cereri suplimentare la baza de date, deci este dezactivată implicit. |
&laPlaceholder | Dacă nu este gol, fragmentul va salva toate datele într-un substituent cu acest nume, în loc să îl afișeze pe ecran. | |
&plPrefix | wf. | Prefix pentru substituenții expuși. |
&showLog | 0 | Spectacol Informații suplimentare despre cum funcționează fragmentul. Doar pentru utilizatorii autorizați în contextul „mgr”. |
&fastMode | 0 | Mod rapid de procesare a bucăților. Toate etichetele neprocesate (condiții, fragmente etc.) vor fi tăiate. |
&cache | 0 | Memorarea în cache a rezultatelor fragmentelor. |
&cacheTime | 3600 | Durata de valabilitate a memoriei cache, în secunde. |
&sistem | -1 | Schema de formare a URL-ului este transmisă la modX::makeUrl(), deci opțiuni posibile trebuie să . Tipul uri special înlocuiește valoarea uri a resursei fără a rula funcția. |
&utilizațiWeblinkUrl | 1 | Generați un link pe baza clasei de resurse. |
&rowIdPrefix | Prefix id="" pentru setarea identificatorului în fragment. | |
&aiciId | id-ul resursei curente pentru meniul generat. Trebuie specificat doar dacă scriptul în sine îl definește incorect, de exemplu, când se afișează un meniu dintr-o bucată dintr-un alt fragment. | |
&include televizoare | Lista parametrilor TV de selectat, separați prin virgule. De exemplu &includeTVs=`acțiune, timp` va oferi substituenți [[+action]] și [[+time]] . | |
&pregătiți televizoare | Lista parametrilor TV, cu fișiere din surse media pentru care trebuie generate căi complete. Daca instalezi &prepareTVs=`1`, toate TV specificate în &include televizoare. | |
&processTV-uri | O listă de parametri TV care trebuie procesați și afișați în funcție de setările lor în managerul de sistem. Daca instalezi &processTVs=`1`, toate televizoarele specificate în &include televizoare. Încetinește munca. | |
&tvPrefix | Prefix pentru parametrii TV. |
Opțiuni de șablon
Acești parametri setează bucățile care conțin șabloane pentru generarea meniului.
Nume | Descriere |
---|---|
&tplExterior | O bucată din designul întregului bloc de meniu. Implicit: @INLINE
|
&tpl | Bucățiune de proiectare a elementelor de meniu. Dacă nu este specificat, conținutul câmpurilor de resurse va fi tipărit pe ecran. Implicit: @INLINE |
&tplAici | O bucată din designul elementului curent de meniu. |
&tplStart | O bucată din designul elementului rădăcină, cu condiția ca acesta să fie activat &displayStart. Implicit: @INLINE [[+titlu meniu]][[+wrapper]] |
&tplParentRow | O parte din designul unui părinte cu copii care nu se încadrează în condițiile &tplCategoryFolder. De exemplu: @INLINE |
&tplParentRowHere | Partea de proiectare a documentului curent, dacă conține descendenți. |
&tplParentRowActive | O bucată din designul părinților cu descendenți în ramura meniului activ. |
&tplCategoryFolder | Piesă de design de categorie specială. O categorie este considerată a fi un părinte cu copii ai căror șablon gol sau rel="category" în câmpul link_attributes. |
&tplInner | O bucată din designul întregului bloc de sub-articole din meniu. Dacă este gol, va folosi &tplExterior. De exemplu: @INLINE |
&tplInnerRow | Bucățiune de design al sub-articolului din meniu. De exemplu: @INLINE |
&tplInnerAici | Bucățiune pentru designul subelementului activ din meniu. |
Opțiuni de clasă CSS
Acești parametri setează valoarea substituenților [[+classnames]] și [[+classes]] pentru diferite elemente de meniu. Substituentul [[+classnames]] afișează numai numele clasei fără atributul clasa="", spre deosebire de substituentul [[+clases]].
Exemple
Ieșirea obișnuită a meniului de la rădăcina site-ului la un nivel:
[]
Ieșire excluzând anumiți părinți și verificarea permisiunilor utilizatorului:
[]
Afișarea unui meniu de la doi părinți simultan, afișând punctele rădăcină:
[]
Afișarea a două niveluri de resurse cu numărarea numărului de resurse imbricate:
[]` &tplParentRow=`@INLINE
Pentru a crea un meniu dinamic vom folosi un fragment gata făcut Wayfinder. Un fragment, așa cum sperăm să vă amintiți din lecțiile anterioare, este o bucată de cod PHP pe care o putem include în șablonul nostru. Diferența față de bucăți este doar în codul și metoda de apelare. Dacă numim o bucată folosind acolade duble, atunci fragmentele sunt numite folosind următoarele [!Nume_fragment!]- apel non-cache sau așa [[SnippetName]]- apel în cache. Codul pentru fiecare fragment trebuie să înceapă cu si sfarsitul ?> . În plus, fiecare fragment poate fi transmis sensuri speciale parametrii pe care îi va procesa. MODx are deja câteva fragmente gata făcute pe care le vom folosi în viitor.
Fragment Wayfinder servește la organizarea listelor de link-uri pentru MODx. Meniul site-ului nostru este o listă cu astfel de link-uri. Să găsim mai întâi o bucată de cod responsabilă pentru afișarea meniului nostru. Meniul este pe bucată HEADER, iată-l:
Să decupăm acest cod și să scriem în schimb:
((MENIU))
Și vom lipi codul într-o nouă bucată MENIU, in descrierea bucatii vom scrie Meniul site-ului. Acum să studiem acest cod.
Meniul site-ului nostru este o listă simplă, nenumerată, situată într-un container cu id="templatemo_menu". Să tăiem această listă din container și să introducem în schimb un apel la fragmentul nostru:
&startId=`0` este un parametru cu valoarea 0, care indică fragmentului ID-ul folderului în care se află documentele procesate. Toate documentele noastre pe care le vom afișa în meniu se află în folderul rădăcină, ID-ul folderului rădăcină este zero. Să vedem ce avem.
Meniul nostru funcționează, doar elementul activ nu mai este evidențiat în alb:
Pentru a înțelege de ce s-a întâmplat acest lucru, trebuie să ne uităm la codul sursă al paginii. ÎN Mozilla Firefox se face astfel: Vizualizare >> Codul sursă al paginii sau pur și simplu apăsând comanda rapidă de la tastatură Ctrl+U. Găsiți codul pentru meniul nostru:
Vă rugăm să rețineți că în cod sursă punctul activ avea class="current", iar fragmentul nostru se alocă automat articolului activ class="activ". De asemenea, observăm că în codul sursă clasa a fost aplicată etichetei
, iar acum la etichetă
Găsiți fișierul în folderul C:/xampp/htdocs/site/www/assets/templates/ templatemo_style.cssși deschideți-l folosind Notepad++. Căutăm o descriere a clasei curente din acest fișier, acesta se află în 198 linia:
#templatemo_menu li .current(
padding-stânga: 40px;
culoare: #ffffff;
}
înlocuiți clasa actual pe activ, fără a uita să-l reatribuiți etichetei :
#templatemo_menu li.active a (
padding-stânga: 40px;
culoare: #ffffff;
}
Salvați fișierul. Să vedem ce s-a întâmplat.
Meniul nostru a funcționat exact așa cum intenționau designerii. Acum putem naviga prin paginile site-ului nostru folosind meniul nostru principal. Când adăugați alte documente în folderul rădăcină, acestea vor apărea automat în meniul nostru. Pentru a preveni afișarea documentelor nedorite în meniu, ar trebui să le debifați Afișați în meniu. Puteți exclude forțat un element nedorit folosind parametrul &excludeDocs=`lista de ID-uri ale documentelor excluse, separate prin virgule`.
Pentru a împiedica meniul să afișeze documente copil pe care le vom crea în lecțiile următoare, să adăugăm un parametru la apelul fragment nivel, care determină numărul de niveluri din meniu, implicit toate nivelurile vor fi afișate, îl vom limita la un singur nivel:
Wayfinder servește la organizarea listelor de link-uri pentru MODX. Datorită suportului de șabloane, vă permite să afișați liste în orice formă dorită:
&rowTpl=`rowTpl`
&outerTpl=`outerTpl`
&hereClass=`activ`
&rowClass=`eNav_li`]]
Parametrii snipet:
&startId- id-ul paginii părinte, dacă specificați 0 va fi de la rădăcina site-ului. Valoarea implicită este id-ul paginii active
&displayStart - arată documentul cu startId în titlul meniului, implicit false
&nivel- adâncimea de cuibărit, implicit 0 - toate nivelurile
&limită- limitați numărul de pagini din ieșire (implicit 0 - fără restricții)
&ignoreHidden- ignorați caseta de selectare a paginii „Afișați în meniu”, adică dacă specificați 1, va afișa toate paginile. Implicit este 0. Sunt afișate doar acele pagini care au bifată caseta de selectare „Afișare în meniu”.
&ph - numele înlocuitorului care înlocuiește rezultatele direct tipărite. Implicit este 0.
&depanare- modul de depanare (implicit 0)
&hideSubMeniuri - extinde doar submeniul activ (implicit 0)
&removeNewLines- elimină caracterul de întrerupere de linie în timpul ieșirii (implicit 0)
&textOfLinks- pentru numele link-ului meniu. Opțiuni posibile:menutitle, id, pagetitle, descriere, părinte, alias, longtitle, introtext . Implicit titlul meniului
&titleOfLinks- pentru titlul link-ului meniu Opțiuni:menutitle, id, pagetitle, descriere, părinte, alias, longtitle, introtext. Implicit titlul paginii
&rowIdPrefix- setează id (rowIdPrefix + docId) pentru fiecare element. Implicit 0
&includeDocs- id-ul documentelor separate prin virgule care vor fi incluse in meniu (nespecificat implicit)
&excludeDocs - id-ul documentelor separate prin virgule care vor fi excluse din meniu (implicit 0)
&contexte- context pentru generarea meniului. Implicit este curent.
&startIdContext - Identificator al contextului din care sunt luate documentele pentru a genera rezultatul.
&config - Fișier PHP extern pentru a stoca configurația Wayfinder (exemplu: core/components/wayfinder/configs).
&sistem - Format pentru generarea URL-urilor. Valori posibile (pe baza apelului API makeURL):
1: (implicit) URL relativ la site_url;
0: vezi http;
1: vezi https;
full: URL absolută care începe cu site_url;
abs: URL absolută care începe cu base_url;
http: URL absolut, forțat în schema http;
https: URL absolut, forțat în schema https.
&filtrează după - Câmpul după care are loc sortarea. (implicit index meniu)
Opțiuni:
id, menutitle, pagetitle, introtext, menuindex, published, hidemenu, parent, isfolder, description, alias, longtitle, type, template&sortare- Ordinea de sortare.„ASC” sau „DESC”. ASC implicit
&unde - Stilul JSON al parametrilor de filtrare (Corespunde cu locul în MySQL). De exemplu, când trebuie să ascundeți un blog sau o știre din suplimentul Articole: &where=`[("class_key:!=": "Articol")]`
Exemple:
Doar folderele de ieșire: & unde = `isfolder = 1
&aiciId - Determinați ID-ul curent de utilizat în fragment. Utilizați valoarea [[*id]] dacă șablonul este specificat folosind parametrul hereTpl și activeRowParentTpl nu este aplicat corect în elementul de meniu. Valoarea implicită este ID-ul curent.
Trebuie specificat doar dacă scriptul în sine îl definește incorect, de exemplu, când se afișează un meniu dintr-o bucată dintr-un alt fragment.
&aiciTpl - Șablonul hereTpl este utilizat când elementul curent este afișat în meniu.
Substituenți posibili:
[[+wf.classes]] - loc pentru a specifica clasa CSS de utilizat (include class=" ")
[[+wf.classnames]] - conține doar numele clasei CSS (nu include class=" ")
[[+wf.link]] - adresa (href) pentru link
[[+wf.title]] - text pentru titlul linkului
[[+wf.linktext]] - textul titlului linkului
[[+wf.wrapper]] - loc pentru afișarea submeniului
[[+wf.id]] - ieșirea unui identificator unic (id)
[[+wf.attributes]] - afișează atribute de link suplimentare
[[+wf.docid]] - identificatorul documentului pentru elementul curent
[[+wf.subitemcount]] - numărul de articole din dosar
[[+wf.description]] - afișează valorile câmpului de descriere
[[+wf.introtext]] - afișează valorile câmpului introtext
Exemplu de șablon:
Opțiuni de șablon
Acești parametri specifică bucățile care conțin modelele care vor genera ieșirea Wayfinder.
În versiunea actuală a Wayfinder pentru MODX Revolution, vă puteți accesa televizoarele personalizate folosind substituenți de prefix wf. , de exemplu [[+my_TV]]
În momentul scrierii, vor fi returnate doar valorile TV originale - nu vor fi formatate. De exemplu, dacă televizorul dvs. este o imagine - utilizarea normală este că un televizor din șablonul dvs. va returna eticheta completă a imaginii, dar în interiorul unui șablon Wayfinder - va fi returnată doar calea către imagine.
Dacă doriți să gestionați televizorul, puteți face acest lucru apelând un fragment din șablonul rând Wayfinder (&rowTpl . De exemplu, imaginea dvs. TV se numește pictogramași, de obicei, șablonul folosește cod ca acesta pentru ieșire:
... ...
Dar, deoarece acest lucru nu vă va permite să procesați televizorul, trebuie să îl înlocuiți cu:
... ...
Și acum în fragmentul processTV plasăm următorul cod PHP:
getObject("modResource", $myId); return $doc->getTVValue($myTV);
Ca rezultat, este returnată o imagine TV complet procesată.
&exteriorTpl
Numele fragmentului care conține șablonul containerului extern.
Substituenți disponibili:
Parametrul &innerTpl conține același set de substituenți ca și &outerTpl .
&rowTpl
Numele fragmentului care conține șablonul pentru elementele rândului de meniu.
Substituenți disponibili:
Exemplu de utilizare:
O alta varianta:
Exemple
Primul nivel
[[!Wayfinder? &startId=`0` &level=`1`
&rowTpl=`rowTpl`
&outerTpl=`outerTpl`
&hereClass=`activ`
&rowClass=`eNav_li`]]
Cod de bucată OuterTpl
[[+wf.wrapper]]
Cod fragment RowTpl
[[+wf.wrapper]]
Al doilea nivel (în acest exemplu, elementele din meniu și submeniu au fost vizual la același nivel
[[!Wayfinder? &startId=`0` &level=`2`
&rowTpl=`rowTplFooterMenu`
&outerTpl=`outerTplFooterMenu`
&innerTpl=`innerTplFooterMenu`
&innerRowTpl=`innerRowTplFooterMenu`
&hereClass=`activ`]]
Cod fragment exteriorTplFooterMenu
[[+wf.wrapper]]
rowTplFooterMenu cod de bucată
[[+wf.wrapper]]
cod de bucată innerTplFooterMenu
[[+wf.wrapper]]
cod fragment innerRowTplFooterMenu