Cum se configurează smartphone-uri și PC-uri. Portal informativ
  • Acasă
  • Erori
  • Filtru AJAX simplu pentru MODX folosind pdoPage. Filtrați după parametrii TV în Modx Revolution folosind filtrele tagManager2 Modx

Filtru AJAX simplu pentru MODX folosind pdoPage. Filtrați după parametrii TV în Modx Revolution folosind filtrele tagManager2 Modx

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

[]
[[+ filtre]]

Ieșirea rezultatelor cu paginare

[[! tmCatalog]]
    [[! + 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`]]
E-mail [[! + 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ă

  1. Descărcați și dezarhivați arhiva.

Actualizați

  1. Descărcați și dezarhivați arhiva.
  2. Redenumiți directorul / assets / plugins / phx în / assets / plugins / phx-old
  3. Creați un director „phx” în folderul / assets / plugins.
  4. Încărcați prin FTP sau doar copiați conținutul arhivei în / assets / plugins / phx
  5. 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
  6. 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 #.

Top articole similare