Astăzi este un articol util despre filtrele phx și modificatorii lor MODX Revo cu care puteți manipula valoarea diferitelor etichete chiar în interiorul șabloanelor.
Pentru ce sunt necesare?
modificatorii phx fac viața mai ușoară dezvoltatorilor modx. Să presupunem că avem un site cu un carusel de imagini (sau cu un banner) de care aveți nevoie afiseaza doar pe pagina principala... Pentru a face acest lucru, este suficient să îl puneți într-o bucată separată și apoi să îl afișați în șablon folosind această construcție
Unde: 1
- id-ul paginii principale,
$ carusel- bucată cu codul carusel (banner).
Doar ceainicele complete creează un șablon nou, de dragul câtorva rânduri de cod carusel. Asa am fost si eu, in general nu disperam si introducem phx in dezvoltare.
Să analizăm mai detaliat construcția de mai sus:
[[* id: is = `1`: then =` [[$ carusel]] `]]
* id- afișează id-ul paginii curente;
: este = `1`: atunci =
- verifică dacă este egală * id == 1? iar dacă este egal, atunci conținutul este afișat atunci;
$ carusel- scoate fragmentul de carusel.
În loc de * id, puteți utiliza alte câmpuri, de exemplu * șablon - va afișa șablonul utilizat în prezent. Fie puteți verifica dacă câmpul TV este plin sau nu (fie * cuvinte cheie) și dacă este plin, apoi afișați-l. Să examinăm acest caz mai detaliat. Având în vedere marcajul standard:
Sarcină: nu afișați această linie dacă cuvintele cheie TV sunt goale.
Soluţie.
[[* cuvinte cheie:! gol = ` `]]
Încărcături
Este necesar să se monitorizeze procesarea modificatorilor, utilizarea lor necugetă va provoca încărcări inutile. Să revenim la carusel, această înregistrare se citește de la stânga la dreapta și MODH-ul îndeplinește toate condițiile imbricate, indiferent dacă condiția este adevărată sau nu, dacă conținutul va fi afișat pe pagina curentă [[$ carusel]], în orice caz, conținutul acestuia va fi prelucrat. În acest sens, este mai oportun să rescrieți intrarea:
[[$ caru [[* id: is = `1`: then =` sel`]]]]
În acest caz, conținutul bucății $ carusel, vor fi procesate dacă condiția este îndeplinită
* id: este = `1`
de cand efectuat
[[* id: is = `1`: then =` sel`]]
iar dacă id-ul paginii curente este 1, ultimul lucru care trebuie procesat este [[$ carusel]] dacă id nu este egal cu 1 atunci - [[$ caru]]... Și dacă bucata $ caru- nu în elemente, atunci nu va fi încărcare.
În general, rezultatul ideal ar arăta astfel.
[[$ [[* id: is = `1`: then =` carusel`]]]]
Vă recomand să citiți despre cum să integrați corect aspectul în modx revo aici.
Notă! Puteți combina cât mai mulți modificatori doriți pentru a se potrivi cu logica componentelor site-ului, dar cel mai important, amintiți-vă, esența lor principală este facilitează dezvoltarea, și să nu complice sarcinile deja complexe. De obicei, cel mai eficient și mai eficient mod este cel mai simplu, deoarece cu cât designul este mai simplu și mai clar, cu atât va fi mai ușor să lucrați cu el în viitor. Mai jos sunt principalii modificatori pe care îi puteți folosi pentru orice etichetă MODH Revo.
Lanțuri modificatoare
Un bun exemplu de înlănțuire ar fi formatarea unui șir de dată într-un format diferit, astfel:
[[+ mydate: strtotime: date = `% Y-% m-% d`]]
Accesul direct la tabelul „modx_user_attributes” din baza de date folosind modificatori de ieșire în loc de un fragment se poate face pur și simplu folosind modificatorul info utilizator... Selectați coloana corespunzătoare din tabel și specificați-o ca proprietate a modificatorului de ieșire, de exemplu, astfel:
Cheie de utilizator intern: [[! + Modx.user.id: userinfo = `internalKey`]] Conectare: [[! + Modx.user.id: userinfo =` username`]] Nume complet: [[! + Modx.user .id: userinfo = `fullname`]] Rol: [[! + modx.user.id: userinfo =` rol`]] E-mail: [[! + modx.user.id: userinfo = `email`]] Telefon: [[! + Modx.user.id: userinfo = `telefon`]] Telefon mobil: [[! + Modx.user.id: userinfo =` mobil`]] Fax: [[! + Modx.user.id : userinfo = `fax`]] Ziua de naștere: [[! + modx.user.id: userinfo =` dob`: data = `% Y-% m-% d`]] Sex: [[! + modx.user . id: userinfo = `gen`]] Țara: [[! + modx.user.id: userinfo =` country`]] Stat: [[! + modx.user.id: userinfo = `state`]] Cod poștal: [[! + modx.user.id: userinfo = `zip`]] Fotografie: [[! + modx.user.id: userinfo =` photo`]] Comentariu: [[! + modx.user.id: userinfo = `comment`]] Data ultimei autentificări: [[! + modx.user.id: userinfo =` lastlogin`: data = `% Y-% m-% d`]] Număr de autentificare: [[! + modx.user . id: userinfo = `logincount`]]
Acordați o atenție deosebită semnului exclamării [[ ! + modx.user.id]]... Permite NU păstrați în cache conţinutul ieşirii. De ce nu memorează cache? Să ne imaginăm așa: pe site sunt 5 utilizatori. Primul utilizator a vizitat pagina cu un apel:
Bun venit [[! + Modx.user.id: userinfo = `nume utilizator`]]!
Așa cum este prevăzut pe această pagină, utilizatorului i se afișează un mesaj de bun venit. Deci, dacă rezultatul este stocat în cache, atunci când intrați pentru prima dată pe această pagină, numele utilizatorului care tocmai a intrat va fi salvat - și tuturor celorlalți li se va afișa nu numele, ci numele utilizatorului care a intrat mai întâi pe această pagină. . Pentru a evita acest lucru - pur și simplu nu memorați această etichetă, folosind un semn de exclamare înainte de a apela [[ ! + modx...
P.s.: Nu uita Deconectat memorarea etichetelor acolo unde este nevoie! Pentru a face acest lucru, aveți nevoie SCAPA DE din semnele exclamării ( ! ). Rezultatele majorității fragmentelor pot funcționa din cache. În lecția următoare, vom analiza.
Filtrele din Revolution vă permit să manipulați modul în care sunt procesate anumite etichete. Ele vă permit să schimbați valorile chiar în interiorul șabloanelor dvs.
Filtre de intrare
În prezent, filtrele de intrare sunt utilizate în pregătirea pentru procesarea filtrelor de ieșire. Ele sunt de obicei utilizate numai în interiorul motorului MODX.
Filtre de ieșire
În Revolution, filtrele de ieșire se comportă la fel ca PHx în Evolution, cu excepția faptului că filtrele sunt acum integrate chiar în motorul MODX. Sintaxa arată astfel:
[]
Filtrele pot fi aplicate secvenţial. Pentru a face acest lucru, scrieți-le într-un rând (de la stânga la dreapta):
[]
Filtrele pot fi folosite și pentru a modifica rezultatul fragmentelor. Filtrul trebuie scris înaintea tuturor parametrilor (înainte de semnul întrebării):
[]
Modificatori de ieșire
Tabelul prezintă câțiva modificatori și exemple de utilizare a acestora. În exemple, modificatorii sunt aplicați substituenților, dar trebuie să vă amintiți că aceștia pot fi aplicați oricăror etichete MODX. Asigurați-vă că eticheta pe care o utilizați scoate cel puțin ceva pe care modificatorul se va ocupa.
Modificatori de ieșire condiționate
Modificator | Descriere | Exemplu de utilizare |
---|---|---|
dacă, intrare | Trimite text arbitrar la intrare, pentru următorul modificator | [[* id: input = `[[+ substituent]]`: este = `1`: apoi =` Da`: else = `Nu`]] |
sau | SAU | [[+ numere: este = `5`: sau: este =` 6`: apoi = `Sunt 5 sau 6 cărți`: else =` Nu sunt sigur câte cărți`]] |
și | Conectarea mai multor modificatori împreună ȘI | [[+ numere: gt = `5`: și: lt =` 10`: apoi = `Există 5 până la 10 cărți`: else =` Cărți sau mai puțin de 5, sau mai mult de 10`]] |
este egal, este egal, egal, este egal, este, eq | Compară valoarea transmisă cu cea setată. Dacă valorile se potrivesc, este afișată valoarea „atunci”, dacă nu - „altfel” | [[+ numere: isequalto = `5`: apoi =` Există 5 cărți`: else = `Nu sunt sigur câte cărți`]] |
notequalto, notequals, isnt, isnot, neq, ne | Compară valoarea transmisă cu cea setată. Dacă valorile NU se potrivesc, este afișată valoarea „atunci”, dacă nu - „altfel” | [[+ numere: notequalto = `5`: apoi =` Nu sunt sigur câte cărți`: else = `Există 5 cărți`]] |
greatthanorequalto, equalorgreaterthen, ge, de exemplu, isgte, gte | La fel, doar condiția „Mai mare sau egal cu” | [[+ numere: gte = `5`: apoi =` Există 5 sau mai multe cărți aici`: else = `Sunt mai puțin de 5 cărți aici`]] |
este mai mare decât, mai mare decât, isgt, gt | La fel, doar condiția „Strict mai mult” | [[+ numere: gt = `5`: apoi =` Există mai mult de cinci cărți aici`: else = `Sunt 5 cărți sau mai puțin aici`]] |
equaltoorlessthan, lessthanorequalto, el, le, islte, lte | La fel, doar condiția „Mai puțin sau egal cu” | [[+ numere: lte = `5`: apoi =` Există 5 cărți sau mai puțin`: else = `Sunt mai mult de 5 cărți`]] |
islower than, isless than, below than, lessthan, islt, lt | La fel, doar condiția „Strict mai puțin” | [[+ numere: lte = `5`: apoi =` Există mai puțin de cinci cărți aici`: else = `Sunt 5 sau mai multe cărți aici`]] |
ascunde | Ascunde elementul dacă condiția este îndeplinită | [[+ numere: lt = `1`: ascunde]] |
spectacol | Afișează un articol dacă este îndeplinită o condiție | [[+ numere: gt = `0`: arată]] |
atunci | Folosit pentru a compune condiții | [[+ numere: gt = `0`: apoi =` Cărți disponibile! `]] |
altfel | Folosit pentru a formula condiții (împreună cu „atunci”) | [[+ numere: gt = `0`: apoi =` Cărți disponibile! `: else =` Ne pare rău, dar epuizat .`]] |
membru al, ismember, mo | Verifică dacă un utilizator este membru al grupului de utilizatori specificat | [[! + modx.user.id: memberof = `Administrator`]] |
Modificatori pentru lucrul cu șiruri
Modificator | Descriere | Exemplu de utilizare |
---|---|---|
pisică | Adaugă o valoare după etichetă | [[+ numere: cat = `carti`]] |
lcase, minuscule, strtolower | Convertește toate literele în minuscule | [[+ titlu: lcase]] |
ucase, majuscule, strtoupper | Convertește toate literele în majuscule | [[+ titlu: ucase]] |
ucwords | Scrie cu majuscule prima literă a cuvintelor | [[+ titlu: ucwords]] |
ucfirst | Scrie cu majuscule prima literă dintr-un șir | [[+ nume: ucfirst]] |
htmlent, htmlentities | Convertește toate caracterele în entități HTML care se potrivesc | [[+ e-mail: htmlent]] |
esc, evadare | Evadați în siguranță caracterele folosind expresii regulate și `str_replace ()`. De asemenea, scapă de etichetele MODX. | [[+ e-mail: escape]] |
bandă | Înlocuiește toate cratimele, filele și orice număr de spații cu un singur spațiu | [[+ document text: strip]] |
stripString | Taie subșirul specificat din șir | [[+ nume: stripString = `Mr.`]] |
a inlocui | Înlocuiește subșiruri | [[+ pagetitle: înlocuiți = `Mr. == Mrs.`]] |
striptags, stripTags, notags, strip_tags | Elimina toate etichetele (puteți specifica etichetele permise). Nu utilizați din motive de siguranță. | [[+ cod: strip_tags]] |
len, lungime, strlen | Imprimă lungimea liniei | [[+ șir lung: strlen]] |
invers, strrev | Inversați șirul caracter cu caracter | [[+ text în oglindă: invers]] |
împachetare | Inserează o întrerupere de linie după fiecare al n-lea caracter (cuvintele nu sunt întrerupte) | [[+ bodytext: wordwrap = `80`]] |
wordwrapcut | Inserează o întrerupere de linie după fiecare al n-lea caracter, chiar dacă acest caracter se află în interiorul unui cuvânt | [[+ bodytext: wordwrapcut = `80`]] |
limită | Afișează un număr specificat de caractere de la începutul liniei (implicit este 100) | [[+ descriere: limit = `50`]] |
elipsă | Adaugă puncte de suspensie și trunchiază șirul dacă este mai lung decât numărul specificat de caractere (implicit este 100) | [[+ descriere: puncte de suspensie = `50`]] |
etichetă | Ecranarea. Afișează elementul așa cum este, fără eticheta:. Pentru utilizare în documentare | [[+ showThis: tag]] |
adăugare, sporire, încr | Adaugă numărul specificat (implicit +1) | [[+ descărcări: incr]] [[+ blackjack: adăugare = `21`]] |
scădere, decrementare, decr | Scăde numărul specificat (implicit -1) | [[+ numărătoare inversă: decr]] [[+ bani: scădere = `100`]] |
înmulți, mpy | Se înmulțește cu numărul specificat (implicit * 2) | [[+ trifecta: mpy = `3`]] |
împărți, div | Împărțire la numărul specificat (implicit / 2) | [[+ rating: div = `4`]] |
modul, mod | Returnează modulul unui număr (implicit:% 2, returnează 0 sau 1) | [[+ număr: mod]] |
dacă gol, implicit, gol, este gol | Returnează valoarea modificatorului dacă valoarea etichetei este goală | [[+ nume: implicit = `anonim`]] |
neîndeplinire, gol, dacă lipsă, este neîndeplinire | Returnează valoarea modificatorului dacă valoarea etichetei nu gol | [[+ nume: notempty = `Bună ziua [[+ nume]]!`]] |
nl2br | Înlocuiește caracterele newline \ n cu eticheta HTML br | [[+ fișier text: nl2br]] |
Data | Convertește marcajul de timp în text conform formatului specificat (formatul de dată) | [[+ anul nașterii: data = `% Y`]] |
strtotime | Convertește data ca text în marcaj temporal UNIX | [[+ thetime: strtotime]] |
fuzzydate | Preia un marcaj de timp și returnează data ca „Azi la 16:20” | [[+ creat pe: fuzzydate]] |
în urmă | Returnează numărul de secunde, minute, săptămâni sau luni de la data specificată în etichetă. | [[+ creat pe: acum]] |
md5 | Creează un hash MD5 al valorii | [[+ parola: md5]] |
cdata | Încheie ieșirea cu etichete CDATA | [[+ conținut: cdata]] |
info utilizator | Returnează valoarea solicitată din profilul utilizatorului. Este necesar un ID de utilizator | [[! + modx.user.id: userinfo = `nume utilizator`]] |
isloggedin | Returnează 1 dacă utilizatorul este conectat în contextul curent | [[! + modx.user.id: isloggedin: is = `1`: apoi =` Da`: else = `Nu`]] |
nu este înregistrat | Returnează 1 dacă utilizator nu autorizate în contextul actual | [[! + modx.user.id: isnotloggedin: is = `1`: apoi =` Nu`: else = `Da`]] |
urlencode | Convertește valoarea ca URL, adică folosește funcția PHP urlencode () | [[+ mystring: urlencode]] |
urldecode | Convertește valoarea ca dintr-o adresă URL, adică folosește funcția PHP urldecode () | [[+ myparam: urldecode]] |
Modificatorii pentru lucrul cu utilizatorii trebuie să fie numiți necache, astfel încât fiecare utilizator să poată vedea datele reale.
Utilizarea modificatorilor de ieșire împreună cu parametrii
Dacă eticheta are parametri, atunci aceștia trebuie să fie scrisi imediat după modificator:
[[! getResources: default = `Ne pare rău, nu s-a găsit nimic`? & tplFirst = `blogTpl` & părinți =` 2,3,4,8` & tvFilters = `blog_tags ==% [[! tag: htmlent]]%` & includeTVs = `1`]]
Crearea unui modificator personalizat
Orice fragment poate fi folosit ca modificator de ieșire. Pentru a face acest lucru, trebuie doar să furnizați numele fragmentului în loc de modificator. De exemplu, să creăm un fragment [] care adaugă un anumit număr de semne de exclamare la rezultat:
[[* pagetitle: makeExciting = `4`]]
Un astfel de apel de etichetă va transmite următorii parametri fragmentului makeExciting pentru procesare:
Parametru | Sens | Valoarea din exemplu |
---|
Toate multa sanatate. În acest articol vă voi spune cum să faceți un filtru de document după parametrii tv pe un site alimentat de Modx Revolution. Vom folosi un fragment tagManager2 din Andchir... Acest fragment poate funcționa cu mai multe televizoare simultan, precum și cu date numerice (sub formă de preț) și o listă multiplă. Vom analiza în continuare fiecare dintre aceste exemple.
1. Mai întâi trebuie să instalați tagManager2
Pentru a face acest lucru, accesați Aplicații / Instalator /
apasa butonul „Descărcați suplimentul” iar în bara de căutare mergem tagManager2
De asemenea, trebuie să instalați fragmentul getPage și getProducts... Deci secțiunea Managementul pachetelor ar trebui să arate așa (fragmentul translit, apropo, este responsabil pentru transliterarea pseudonimelor în latină)
Descărcați, instalați pachete și accesați "Setarile sistemului"
2. Configurați fragmentul tagManager2
În Setări de sistem, selectați secțiunea tag_manager2
Vom vedea setările filtrului
Totul este destul de simplu și clar acolo, dar totuși:
- V „ID resursă al directorului de nivel superior” specificați id-ul șablonului sau categoriei de catalog în care vor fi filtrate produsele sau paginile
- V „Separator opțional de liste multiple” pune semnul #. Mai jos vei afla de ce ai nevoie.
- V „Numele TV sau câmpurile multiple din listă” prescriem tv cu o listă multiplă. Vă voi arăta mai jos cum să le creați.
- „Nume TV sau câmpuri cu valori numerice”- aici trebuie să specificați parametrii tv, care vor conține numere. Acesta este de obicei un parametru de preț. Acest filtru va fi afișat ca un glisor „de la și către”.
- V „ID șabloane de produs” prescriem id-ul paginilor care trebuie filtrate si la care sunt atasati parametrii tv specificati mai sus
- V „Numele setului de parametri utilizat pentru filtrare”înregistrare catalog_filters. Vom folosi acest șablon în șabloanele de parametri. getPageși getProducts
- Înregistrează-te „Fragment asociat cu un set de parametri” numele fragmentului care va afișa și pagina paginile sau produsele. De obicei asta getPage.
3. Creați un set de parametri catalog_filters în getPage
Accesați fragmentul getPage
Accesați fila "Parametrii"și faceți clic pe butonul „Adăugați un set de parametri”... Puteți, desigur, să îl editați pe cel existent, dar atunci există șansa de a suprascrie parametrii pe care îi vom crea acum la actualizarea getPage. Dacă nu aveți de gând să actualizați, puteți doar să editați.
Edităm parametrii existenți și atribuim valori:
Creați noi parametri și atribuiți valori
Parametrii editați vor fi afișați în verde, creați - în violet
4. Creați sau editați parametrii TV pentru filtru
Am creat 3 parametri tv de exemplu
Vreau să atrag o atenție deosebită asupra faptului că trebuie să specificați numele (Titlul) parametrului tv, altfel este posibil să nu fie afișat pur și simplu în modulul de control al filtrului
5.Creați fragmentul filtr_tpl
Această bucată este responsabilă pentru afișarea fiecărui rezultat individual în getProducts.
6. Creați o structură în arborele documentului
Mie mi se pare asa:
Pagina principală este cu ID-ul 1, iar produsele au un ID de șablon de 1 (asta îl avem în setările tag_manager2, dacă aveți alte valori, nu uitați să le schimbați în setări)
7. Editarea filters.js
Mergem la adresa /assets/components/tag_manager2/js/web/filters.js iar în loc de
Etichete multiple: [„etichete”], // Numele altor elemente. câmpuri cu valori multiple
introduceți codul cu valorile noastre înlocuite
Etichete multiple: ["filtr1", "filtr2"], // Nume suplimentare. câmpuri cu valori multiple
Totul aici este extrem de simplu și simplu. Am introdus propriile noastre câmpuri TV cu mai multe valori. În general, aceasta este o configurație a tuturor setărilor (dar este mai bine să nu le atingeți fără permisiunea băieților mari, mă refer la sfaturile creatorilor modulului)
8. Afișarea filtrului și a rezultatelor de filtrare
Filtrul în sine
[]Ieșirea rezultatelor cu paginare
- [[! + page.nav]]
Sortarea rezultatelor
9. Activați filtrul
Acum trebuie doar să ne activați filtrul. Pentru a face acest lucru, accesați Aplicații / Gestionarea filtrelor.
Aici trebuie să bifați casetele de lângă fiecare filtru și să faceți clic pe butonul"Salva" .
Dacă ați făcut totul corect, atunci filtrul ar trebui să funcționeze. Asta e tot. Dacă aveți întrebări - întrebați în comentarii, voi încerca să vă răspund. În general, aici este documentația pentru tagManager2. Succes în dezvoltare. V „Demo” unul dintre site-urile mele care a implementat un filtru folosind tagManager2
Filtrele din Revolution vă permit să procesați și să modificați valorile etichetelor în interiorul șabloanelor, fragmentelor, fragmentelor.
Filtre de intrare
În prezent, filtrele de intrare sunt utilizate în pregătirea pentru procesarea filtrelor de ieșire. Ele sunt de obicei utilizate numai intern în interiorul nucleului MODX.
Filtre de ieșire
În MODx Revolution, filtrele de ieșire sunt folosite ca unul sau mai mulți modificatori de ieșire, sunt similare cu apelurile PHx din MODx Evolution, dar diferă prin faptul că sunt deja încorporate în nucleu.
Sintaxa modificatorului:
[[+ element: modificator = `valoare`]]
Filtrele pot fi aplicate secvenţial (scrise de la stânga la dreapta):
[[+ element: modificator = `valoare`: anothermodifier =` value2`: andanothermodifier: yetanother = `valoare3`]]
De asemenea filtrele pot fi folosite pentru a modifica rezultatul fragmentelor... Filtrul trebuie scris înaintea tuturor parametrilor (înainte de semnul întrebării):
Modificatori de ieșire
Tabelul prezintă câțiva modificatori și exemple de utilizare a acestora. În exemple, acestea sunt aplicate substituenților, dar trebuie să vă amintiți asta modificatorii pot fi aplicați oricăror etichete MODX Revolution.
Modificator | Descriere | Exemplu de utilizare |
dacă, intrare | dacă - setează o condiție suplimentară, introducere - adaugă date procesate la etichetă | [[+ num: este = `10`: și: if =` [[+ num]] `: ne =` 15`: atunci = `Da, egal cu 10 și nu 15`]] |
sau și | Combinarea mai multor modificatori cu un link SAU și un link AND | [[+ numProducts: is = `10`: sau: is =` 11`: then = `Există 10 sau 11 produse`: else =` Nu sunt sigur câte produse`]] |
este egal, este egal, egal, este egal, este, eq | Compară valoarea transmisă cu cea setată. Dacă valorile se potrivesc, se iese valoarea „atunci”, dacă nu - „altfel” | [[+ numProducts: isequalto = `10`: then =` Există 10 produse`: else = `Nu sunt sigur câte produse`]] |
notequalto, notequals, isnt, isnot, neq, ne | Compară valoarea transmisă cu cea setată. Dacă valorile NU se potrivesc, se iese valoarea „atunci”, dacă nu - „altfel” | [[+ numProducts: notequalto = `10`: then =` Nu sunt sigur câte produse`: else = `Există 10 produse`]] |
greatthanorequalto, equalorgreaterthen, ge, de exemplu, isgte, gte | La fel, doar condiția „Mai mare sau egal cu” | [[+ numProducts: gte = `10`: then =` Există 10 sau mai multe produse aici`: else = `Sunt mai puțin de 10 produse aici`]] |
este mai mare decât, mai mare decât, isgt, gt | La fel, doar condiția „Strict mai mult” | [[+ numProducts: gt = `10`: then =` Există mai mult de 10 produse aici`: else = `Sunt 10 produse sau mai puțin aici`]] |
equaltoorlessthan, lessthanorequalto, el, le, islte, lte | La fel, doar condiția „Mai puțin sau egal cu” | [[+ numProducts: lte = `10`: then =` Există 10 produse sau mai puțin`: else = `Sunt mai mult de 10 produse aici`]] |
islower than, isless than, below than, lessthan, islt, lt | La fel, doar condiția „Strict mai puțin” | [[+ numProducts: lte = `10`: then =` Există mai puțin de 10 produse aici`: else = `Sunt 10 sau mai multe produse aici`]] |
ascunde | Ascunde elementul dacă condiția este îndeplinită | [[+ numProducts: lt = `1`: ascunde]] |
spectacol | Afișează un articol dacă este îndeplinită o condiție | [[+ numProducts: gt = `0`: show]] |
atunci | Folosit pentru a compune condiții | [[+ numProducts: gt = `0`: then =` Produse în stoc! `]] |
altfel | Folosit pentru a formula condiții (împreună cu „atunci”) | [[+ numProducts: gt = `0`: then =` Articole în stoc! `: else =` Ne pare rău, dar epuizat .`]] |
membru al, ismember, mo | Verifică dacă un utilizator este membru al grupului de utilizatori specificat | [[+ modx.user.id: memberof = `Administrator`]] |
Modificatori pentru lucrul cu șiruri
Modificator | Descriere | Exemplu de utilizare |
pisică | Adaugă o valoare după etichetă | [[+ numProducts: cat = `bunuri`]] |
lcase, minuscule, strtolower | Convertește toate literele în minuscule | [[+ titlu: lcase]] |
ucase, majuscule, strtoupper | Convertește toate literele în majuscule | [[+ titlu lung: ucase]] |
ucwords | Scrie cu majuscule prima literă a cuvintelor | [[+ titlu: ucwords]] |
ucfirst | Scrie cu majuscule prima literă dintr-un șir | [[+ nume: ucfirst]] |
htmlent, htmlentities | Convertește toate caracterele în entități HTML | [[+ e-mail: htmlent]] |
esc, evadare | Evadează în siguranță caracterele folosind expresii regulate și str_replace. De asemenea, scapă caracterele [,] și ` | [[+ e-mail: escape]] |
bandă | Înlocuiește toate cratimele, filele și orice număr de spații cu un singur spațiu | [[+ document text: strip]] |
stripString | Taie subșirul specificat din șir | [[+ nume: stripString = `Mr.`]] |
a inlocui | Înlocuiește subșiruri | [[+ pagetitle: înlocuiți = `Mr. == Mrs.`]] |
striptags, stripTags, notags, strip_tags | Elimina toate etichetele (puteți specifica etichetele permise). | [[+ cod: strip_tags = ` |
len, lungime, strlen | Imprimă lungimea liniei | [[+ șir lung: strlen]] |
invers, strrev | Inversați șirul caracter cu caracter | [[+ text în oglindă: invers]] |
împachetare | Inserează o întrerupere de linie după fiecare al n-lea caracter (cuvintele nu sunt întrerupte) | [[+ bodytext: wordwrap = `80`]] |
wordwrapcut | Inserează o întrerupere de linie după fiecare al n-lea caracter, chiar dacă acest caracter se află în interiorul unui cuvânt | [[+ bodytext: wordwrapcut = `80`]] |
limită | Afișează un număr specificat de caractere de la începutul liniei (implicit este 100) | [[+ descriere: limit = `50`]] |
elipsă | Adaugă puncte de suspensie și trunchiază șirul dacă este mai lung de un anumit număr de caractere (implicit este 100) | [[+ descriere: puncte de suspensie = `50`]] |
etichetă | Ecranarea. Afișează elementul așa cum este, fără eticheta:. Pentru utilizare în documentare | [[+ showThis: tag]] |
matematica | Returnează rezultatul calculelor avansate (cu CPU grele. Nerecomandat) | |
adăugare, sporire, încr | Adaugă numărul specificat (implicit +1) | [[+ descărcări: incr]], [[+ blackjack: adăugare = `21`]] |
scădere, decrementare, decr | Scăde numărul specificat (implicit -1) | [[+ numărătoare inversă: decr]], [[+ bani: scădere = `100`]] |
înmulți, mpy | Se înmulțește cu numărul specificat (implicit * 2) | [[+ trifecta: mpy = `3`]] |
împărți, div | Împărțire la numărul specificat (implicit / 2) | [[+ rating: div = `4`]] |
modul, mod | Returnează împărțirea modulo a unui număr (implicit:% 2, returnează 0 sau 1)) |
[[+ număr: mod]] |
dacă gol, implicit, gol, este gol | Returnează valoarea modificatorului dacă valoarea etichetei este goală | [[+ nume: implicit = `anonim`]] |
neîndeplinire, gol, dacă lipsă, este neîndeplinire | Returnează valoarea modificatorului dacă valoarea etichetei NU este goală | [[+ nume: notempty = `Bună ziua, [[+ nume]]!`]] |
nl2br | Înlocuiește caracterele newline (\ n) cu o etichetă HTML |
[[+ fișier text: nl2br]] |
Data | Convertește marcajul de timp în text, conform formatului specificat (formatul de dată) | [[+ anul nașterii: data = `% Y`]] |
strtotime | Convertește data ca text în marcaj temporal UNIX | [[+ thetime: strtotime]] |
fuzzydate | Returnează data în formatul „ieri, azi,…”. Acceptă o valoare de dată. | [[+ creat pe: fuzzydate]] |
în urmă | Returnează numărul de secunde, minute, săptămâni sau luni de la data specificată în etichetă. | [[+ creat pe: acum]] |
md5 | Creează un hash MD5 al valorii | [[+ parola: md5]] |
cdata | Încheie ieșirea cu etichete CDATA | [[+ conținut: cdata]] |
info utilizator | Returnează valoarea solicitată din profilul utilizatorului. Este necesar un ID de utilizator | [[+ modx.user.id: userinfo = `nume utilizator`]] |
isloggedin | Returnează true dacă utilizatorul este autentificat în contextul curent | [[+ modx.user.id: isloggedin]] |
nu este înregistrat | Returnează adevărat dacă utilizatorul NU este autentificat în contextul curent | [[+ modx.user.id: isnotloggedin]] |
urlencode | Convertește o valoare într-o adresă URL | [[+ mystring: urlencode]] |
urldecode | Convertește o valoare dintr-o adresă URL | [[+ myparam: urldecode]] |
Utilizarea modificatorilor de ieșire împreună cu parametrii
Dacă eticheta are parametri, atunci aceștia trebuie să fie scrisi imediat după modificator:
Crearea unui modificator personalizat
Orice fragment poate fi folosit și ca modificator de ieșire. Pentru a-l folosi, trebuie doar să furnizați numele fragmentului în loc de modificator. De exemplu, să creăm un fragment makeExciting care adaugă un anumit număr de semne de exclamare la rezultat:
[[* pagetitle: makeExciting = `4`]]
Un astfel de apel de etichetă va transmite următorii parametri fragmentului makeExciting pentru procesare:
Modificator UserInfo
Acces direct la datele dintr-un tabel modx_user_attributesîn baza de date, utilizarea modificatorilor de ieșire în loc de fragmente poate fi realizată pur și simplu folosind modificatorul UserInfo.
Selectați coloana necesară din tabel și specificați-o ca proprietate modificatoare, de exemplu, astfel:
Sens | Modificator |
Cheie de utilizator internă | [[! + modx.user.id: userinfo = `internalKey`]] |
Autentificare | [[! + modx.user.id: userinfo = `nume utilizator`]] |
Numele complet | [[! + modx.user.id: userinfo = `nume complet`]] |
Rol | [[! + modx.user.id: userinfo = `rol`]] |
[[! + modx.user.id: userinfo = `email`]] | |
Telefon | [[! + modx.user.id: userinfo = `telefon`]] |
Telefon mobil | [[! + modx.user.id: userinfo = `telefon mobil`]] |
Fax | [[! + modx.user.id: userinfo = `fax`]] |
Data de nastere | [[! + modx.user.id: userinfo = `dob`: data =`% Y-% m-% d`]] |
Podea | [[! + modx.user.id: userinfo = `gen`]] |
Tara | [[+ modx.user.id: userinfo = `țara`]] |
Regiune | [[+ modx.user.id: userinfo = `state`]] |
Cod poștal | [[+ modx.user.id: userinfo = `zip`]] |
Fotografie | [[+ modx.user.id: userinfo = `foto`]] |
PHx (Placeholders Xtended) adaugă noi funcții pentru afișarea substituenților, a etichetelor MODx (inclusiv a parametrilor TV) și a etichetelor pentru setările site-ului. Analizorul recursiv permite etichete imbricate. Este posibil să vă creați proprii modificatori prin crearea de fragmente.
Puteți descărca cea mai recentă versiune de PHx din depozitul MODX aici.
Instalare nouă
- Descărcați și dezarhivați arhiva.
Actualizați
- Descărcați și dezarhivați arhiva.
- Redenumiți directorul / assets / plugins / phx în / assets / plugins / phx-old
- Creați un director „phx” în folderul / assets / plugins.
- Încărcați prin FTP sau doar copiați conținutul arhivei în / assets / plugins / phx
- Creați un nou plugin „PHx” în Panoul de control MODx (Articole-Controale-Articole-Plugins) și copiați conținutul fișierului phx.plugin.txt în el
- Verificați evenimentul „OnParseDocument” din fila „Evenimente de sistem”.
Configurare
În fila de configurare, în timp ce editați pluginul, copiați în câmpul „Configurare plugin”:
& phxdebug = Jurnal de evenimente; int; 0 & phxmaxpass = Max. număr de treceri; int; 50
Pentru utilizatorii avansați
Puteți modifica setările implicite pentru pluginul PHx:
Jurnalul evenimentelor
0 = Dezactivat
1 = înregistrarea evenimentelor PHx activată
Dacă este activat, PHx creează un jurnal detaliat pentru fiecare eveniment înregistrat în jurnalul de evenimente (Rapoarte-> Vizualizare evenimente)
Max. numărul de treceri
Determină adâncimea maximă de procesare a etichetelor imbricate. Se recomandă să lăsați valoarea la 50.
PHx (Placeholders Xtended) extinde utilizarea substituenților, a etichetelor de conținut (inclusiv a parametrilor TV) și a etichetelor de personalizare a site-ului. Datorită acestui fapt, puteți determina cu ușurință formatul de ieșire al rezultatului final. PHx este încorporat în analizatorul MODX, extinzându-și funcționalitatea cu modificatori, condiții și, ca bonus, îl face cu adevărat recursiv.
Etichete acceptate
PHx acceptă următoarele etichete MODx:
- [+ substituent +]
- [* etichete de conținut *] (de exemplu: [* conținut *], [* pagetitle *] și altele)
- [* Parametri TV *]
- [(etichete de personalizare)] (de exemplu: [(base_url)], [(site_name)] și altele)
Fragmente care acceptă PHx
- Idem
- MaxiGallery
Puteți utiliza sintaxa PHx în fragmente utilizate de fragmente care nu sunt în această listă, dar aceasta necesită o metodă diferită (consultați secțiunea Sfaturi și trucuri)
Substituent obișnuit al formularului
[+ substituent +]
se transformă ușor în substituent PHx:
[+ substituent: esc +]
Puteți face același lucru cu eticheta de conținut:
[* creat de *]
Adăugați un modificator:
[* creat de: data = `% a% B% d,% Y at% H:% M` *]
De asemenea, puteți utiliza mai mulți modificatori simultan. Acestea vor fi procesate de la stânga la dreapta:
Somevar: esc: nl2br: strip
Aplicație extinsă
Prezența unui substituent special „phx” vă permite să utilizați sintaxa PHx fără a avea o variabilă reală.
[+ phx: if = `[+ this +]`: is = `[+ that +]`: then = `face this`: else =` do that` +]
Cu unii modificatori, acest substituent capătă un anumit sens. În cazul modificatorului „informații utilizator”, acesta returnează valoarea corespunzătoare din informațiile despre utilizatorul curent:
[+ phx: info utilizator = `nume utilizator` +]
probleme cunoscute
Sintaxă
Pare logic, dar merită să ne concentrăm. Evitați să utilizați următoarele construcții în șablon, cu excepția cazului în care fac parte din eticheta MODx:
[+[*
[(
+]
*]
)]
]]
Analizatorul va încerca să le proceseze și MODx va arunca o eroare. De obicei, această problemă nu apare. Dar în cazul JavaScript, este posibil să aveți o construcție ca aceasta:
Matrice
Care va provoca un comportament ciudat din cauza +]. Vedeți și eticheta de închidere CDATA:
/* ]]> */
Poate crea probleme.
Rețineți că nu vă puteți pierde datele site-ului folosind sintaxa PHx incorectă. Cel mai rău lucru care se poate întâmpla este că șablonul dvs. nu va fi redat corect.
Siruri de caractere
lcase
ucase
Convertește toate caracterele din șir în majuscule.
[+ șir: ucase +]
La intrare:
Acesta este un șir
ACESTA ESTE UN ȘIR
ucfirst
Prima literă de pe linie va fi scrisă cu majuscule.
[+ șir: ucfirst +]
La intrare:
lungime | len
Returnează lungimea șirului.
La intrare:
Acesta este un șir
notag-uri
Eliminați toate etichetele HTML din șir.
[+ șir: notags +]
La intrare:
Acest este A şir
Acesta este un șir
Esc
Elimină etichetele html și rupturile de rând
htmlent
Convertește variabila originală în entitate html. Similar cu htmlentities () în PHP.
nl2br
Convertește caracterele de flux de rând în etichete.
[+ șir: nl2br +]
La intrare:
Aceasta este
o sfoară
Aceasta este
o sfoară
bandă
Va elimina caracterele noua linie (\ n), tabulatorii (\ t), spațiile consecutive.
[+ șir: bandă +]
La intrare:
Aceasta este
A
şir
Acesta este un șir
Alți modificatori
verso
Întoarceți literele înapoi.
împachetare
Desparte cuvintele din valoarea curentă mai lungă decât lungimea dată a caracterelor, punând un spațiu între ele.
Implicit: 70 de caractere.
Wordwrap (= `lungime`)
lungime - caractere
limită
Returnează primele X caractere din valoarea curentă.
Implicit: 100 de caractere.
limită (= `lungime`)
Special
Data
Convertește marcajele de timp Unix în formatul specificat.
data (= `dateformat`)
dateformat: Conform formatului funcției PHP strftime
[* creat la: data = `% d.% m.% Y` *]
Pentru ca data să fie afișată în conformitate cu limba curentă a site-ului, trebuie să setați localitatea la începutul codului pluginului PHx. Exemplu de mai jos pentru germană:
setlocale (LC_ALL, " [email protected]"," de_DE "," de "," ge ");
md5
Creează un hash MD5 cu valoarea curentă.
info utilizator
Câmpuri utilizate în baza de date MODx din tabelul user_attributes (de exemplu: username, useremail).
Informații utilizator = `câmp`
- cachepwd: Cache parola
- cometariu: Cometariu
- țară: Tara
- dob: Data nașterii în format oră UNIX
- e-mail: E-mail
- fax: Fax
- Numele complet: Numele complet
- gen: Etajul
- cheie internă: cheie internă utilizator
- ultima logare: Ultima conectare, în format oră UNIX
- logincount: Numărul de autentificări
- telefon mobil: Telefon mobil
- parola: Parola
- telefon: Telefon
- fotografie: Fotografia
- rol: Rol
- stat: Stare
- această autentificare: Această autentificare, în format de oră UNIX
- nume de utilizator: Autentificare
- fermoar: Cod poștal
matematica
Utilizați calcule precum - * + /.
Math = `calcul`
"?" simbolul este înlocuit cu valoarea actuală a extensiei, dar puteți utiliza și etichete imbricate.
Exemplu de calcul:? +1+ (2 + 3) + 4/5 * 6
dacă gol
Folosiți „altă valoare” dacă substituentul / templatevar este gol.
Ifempty = „altă valoare”.
Selectați
Acceptă o valoare în funcție de valorile substituentului / templatevar.
Selectați = `opțiuni`
parametri: value1 = output1 & value2 = output2
La intrare: 1
[+ substituent: selectează = `0 = OFF & 1 = ON & 2 = NECUNOSCUT` +]
Returnări: ON
Expresii condiționale
este
ne
alias: nu este, nu este
nu este egal (! =)
de exemplu
mai mare sau egal (> =)
el
mai mic sau egal (<=)
gt
mai mult (>)
lt
Mai puțin (<)
mo = `Grupuri web`
sinonime (alias-uri): isinrole, ir, memberof
Preia o listă de grupuri web separate prin virgulă ca parametru și returnează adevărat/fals în funcție de faptul dacă utilizatorul curent aparține sau nu unuia dintre aceste grupuri (înlocuiește modificatorul "inrol", care trebuia combinat cu operatorul condiționat).
[+ phx: mo = `myWebgroup`: apoi =` Eu "sunt membru`: else =` Eu "NU sunt membru` +]
if = `valoare`
Acceptă o variabilă pentru comparație ca parametru. Poate fi folosit și în combinație cu : sau sau : și.
[+ phx: if = `[+ price +]`: gt = `0`: then =` Preț: [+ price +] `+]
sau
SAU logic (verifică dacă prima sau a doua condiție este adevărată).
[+ phx: if = `[* id *]`: is = `2`: sau: is =` 3`: then = `((Chunk))`: else = `((OtherChunk))` +]
În acest exemplu, dacă ID-ul curent este 2 sau 3, atunci fragmentul ((Chunk)) este scos, în caz contrar este scos fragmentul ((OtherChunk)).
și
ȘI logic (verifică dacă ambele condiții sunt adevărate).
[+ phx: if = `[! UltimateParent!]`: este = `1`: și: isnot =` [* id *] `: then =` ((ChildChunk)) `: else =` ((ParentChunk)) `+]
În acest exemplu, dacă UltimateParent este 1 și nu este egal cu ID-ul curent, atunci se iese fragmentul ((ChildChunk)), în caz contrar este scos fragmentul ((ParentChunk)).
apoi = `șablon`
Sens șablon afișat atunci când toate condițiile sunt adevărate. Aici puteți specifica apelul ((bloc)), [[fragmentul]] sau HTML pur.
else = `șablon`
Sens șablon afișat atunci când condițiile nu sunt adevărate. Aici puteți specifica apelul ((bloc)), [[fragmentul]] sau HTML pur.
spectacol
Folosit ca atunci, dar valoarea originală este folosită ca șablon pentru ieșire. Se execută dacă condițiile sunt adevărate.
[+ înlocuitorul meu: len: gt = `3`: arată +]
În acest exemplu, valoarea substituentului va fi afișată dacă lungimea sa este mai mare de 3 caractere.
Modificatori personalizați
Un modificator este un fragment simplu care procesează o anumită valoare. Este posibil să vă creați propriile modificatori/mini-fragmente prin adăugarea unui nou fragment în managerul de resurse MODx sau prin crearea unui fișier în folderul modificatori al pluginului PHx.
Deoarece codul modificator este simplu, nu are nevoie de niciun parametru, cu excepția celor pe care îi primește de la parser.
Există două variabile principale:
$ ieșire- conține valoarea curentă a variabilei care trebuie modificată.
opțiuni $- un parametru opțional, a cărui valoare este transmisă modificatorului.
Exemplu.
Iată câteva exemple de utilizare a modificatorilor. Să presupunem că substituentul înlocuitorul meu are sensul "Test":
[+ înlocuitorul meu: modificatorul meu +]
Variabila de ieșire $ conține valoarea „test”.
Variabila opțiuni $ nu conține nimic, deoarece niciun parametru nu a fost trecut modificatorului.
[+ înlocuitorul meu: mymodifier = `opțiunile mele` +]
Variabila de ieșire $ conține încă valoarea „test”.
Variabila opțiuni $ conține acum valoarea „opțiunile mele”
Variabile diverse (pentru utilizatori avansați)
$ input - conține valoarea inițială nemodificată.
$ condition este un tablou care conține elementele care alcătuiesc expresia condiționată (0, 1, || și &&).
Crearea propriului modificator
Exemplul 1: Îmi place MODx
Folosind aceste cunoștințe, să creăm un nou modificator personalizat. Va fi un modificator fără parametru, care va adăuga pur și simplu textul „pentru că iubesc MODx” la variabilă. Pentru a face acest lucru, trebuie să faceți următorii pași:
1. În Managerul de resurse, accesați Resurse (Elemente) -> Gestionați resurse (elemente) -> Fragmente
2. Faceți clic pe „Fragment nou”
phx: dragoste"
Pentru ca un fragment să fie perceput ca un modificator pentru PHx, numele său trebuie să aibă prefixul „phx:” fără spații între acesta și numele efectiv al fragmentului. Apoi îl puteți folosi ca modificator adăugând: dragoste la orice substituent, de exemplu: [+ substituentul meu: dragoste +].
4. Acum adăugați codul modificator în câmpul de cod. Să presupunem că va fi următorul cod:
5. Salvați modificările și noul nostru modificator ( : dragoste) este gata de utilizare!
Exemplul 2: Îmi place și mai mult MODx
Să creăm un modificator similar cu modificatorul : dragoste din exemplul anterior, dar în plus să-i dăm posibilitatea de a adăuga valoarea parametrului transmis la șirul original, dacă a fost specificat.
1. În Managerul de resurse, accesați Resurse (Elemente) -> Gestionați resurse (elemente) -> Fragmente
2. Faceți clic pe „Fragment nou”
3. Setați numele fragmentului la „ phx: dragoste2"
Pentru ca un fragment să fie perceput ca un modificator pentru PHx, numele său trebuie să fie prefixat cu „ phx:„fără spații între acesta și numele efectiv al fragmentului. Apoi îl puteți folosi ca modificator adăugând: dragoste la orice substituent, de exemplu: [+ substituentul meu: dragoste2 +].
Bună.
Alte exemple
[+ substituentul meu: gt = `1`: apoi =` Da`: else = `Nu` +]
[+ substituentul meu: lt = `3`: și: gt =` 1`: apoi = `Da`: altfel =` Nu` +]
[+ substituentul meu: lt = `[+ un substituent +]`: apoi = `Da`: else =` Nu` +]
[+ substituentul meu: islt = `2`: apoi =` Da`: else = `Nu` +]
[+ substituentul meu: isnot = `2`: sau: lt =` 3`: apoi = `Da`: altfel =` Nu` +]Toate exemplele vor reveni da.
[+ substituentul meu: isnot = `2`: apoi =` Da`: else = `Nu` +]
[+ substituentul meu: gt = `[+ someplaceholder +]`: apoi = `Da`: else =` Nu` +]
[+ substituentul meu: lt = `2`: apoi =` Da`: else = `Nu` +]
[+ substituentul meu: gt = `2`: apoi =` Da`: else = `Nu` +]
[+ substituentul meu: lt = `1`: apoi =` Da`: else = `Nu` +]Toate exemplele vor reveni #.