Filtre modificatoare. Filtru universal de resurse. Modificatori de ieșire condiționate

Și astfel, filtrul pe care îl puteți face pentru site-ul dvs. este foarte universal!
Poate fi aplicat oricărui proiect și, în același timp, economisește mult timp

Mai întâi trebuie să instalați pachetul pdoResources, care face parte din pachetul pdoTools. Puteți instala fie întregul set de pachete pdo (pdoTools), fie doar pdoResources ca pachet separat pentru a crea un filtru pe MODx Revolution.

După instalarea pachetelor, haideți să conectăm fragmentul pe care l-ați descărcat de pe GitHub la proiectul dvs. Dacă în prezent dezvoltați un director de la zero, atunci vă sfătuiesc să rămâneți la utilizarea unor clase specifice pentru filtrarea Ajax.

Cu toate acestea, dacă aveți deja un director gata făcut, puteți defini clasele de elemente de filtru Ajax în fișierul JS (vezi mai jos).

Rețineți că .ajax-item trebuie să fie un copil imediat al .ajax-container. Dacă utilizați o grilă Bootstrap pentru aranjarea coloanelor, puteți defini clasa de container ca „row ajax-container” și coloanele de item ca „col-md-4 ajax-item”.

Conectarea filtrului Ajax de script JS

Să conectăm scriptul JS la proiect. Îl puteți conecta fie ca fișier separat, fie direct în fișierul de scripturi personalizate al proiectului. Scriptul necesită jQuery pentru a rula.

$(function() ( //MODx pdoResources Ajax Filter //Setări filtru var fadeSpeed ​​​​= 200, // Fade Animation Speed ​​​​ajaxCountSelector = ".ajax-count", // Selector CSS de contor de articole ajaxContainerSelector = ". ajax-container" , // Selector CSS al containerului Ajax ajaxItemSelector = ".ajax-item", // Selector CSS al articolului Ajax ajaxFormSelector = ".ajax-form", // Selector CSS al formularului de filtru Ajax ajaxFormButtonStart = ".ajax -start", // Selector CSS al Butonului Start Filtering ajaxFormButtonReset = ".ajax-reset", // Selector CSS al Butonului Resetare Ajax Form sortDownText = "Descendent", sortUpText = "Ascendent"; funcția ajaxCount() ( if($ (" .ajax-filter-count").length) ( var count = $(".ajax-filter-count").data("count"); $(ajaxCountSelector).text(count); ) else ( $ (ajaxCountSelector ).text($(ajaxItemSelector).length )ajaxCount(); function ajaxMainFunction() ( $.ajax(( data: $(ajaxFormSelector).serialize()).done(function(response) ( var $ răspuns = $(răspuns); $(ajaxContainerSelector).fadeOut(fadeSpeed);

  • Rândurile 5-13: Definirea variabilelor pentru selectoarele CSS ale filtrului Ajax. Nu ne schimbam daca folosim valori standard, ca in figura de mai sus;
  • Rândurile 15-22: scriptul contorului de resurse în filtrarea rezultatelor;
  • Liniile 24-35: funcția principală de filtrare Ajax;
  • Rândurile 37-49: handler de evenimente pentru a face clic pe butonul „Încărcați mai multe”;
  • Rândurile 51-54: handler de evenimente pentru a face clic pe butonul „filtru”. Acest buton poate fi absent, deoarece filtrarea are loc automat.
  • Filtrarea automată poate fi dezactivată prin eliminarea liniilor 68-70;
  • Rândurile 56-66: handler de evenimente pentru ștergerea formularului și resetarea filtrului. Rândurile 59-63 sunt responsabile pentru resetarea colării;
  • Rândurile 68-70: funcție de sortare automată la schimbarea câmpurilor formularului de filtrare;
  • Rândurile 72-82: funcție universală pentru sortarea după parametrul TV.

Conectarea unui fragment PHP la MODx Revolution

Creați un nou fragment în panoul de control MODx catalogFilter și completați-l cu următorul conținut:
=".$_GET["zona_de la"]; ) if($_GET["zona_la"]) ( $filter = "zonă<=".$_GET["area_to"]; } //Checkbox Type if($_GET["garage"]) { $filter = "garage=1"; } //End Settings //Sort if($_GET["sortby"]) { $sortby = $_GET["sortby"]; } else { $sortby = "pagetitle"; } if($_GET["sortdir"]) { $sortdir = $_GET["sortdir"]; } else { $sortdir = "asc"; } //End Sort //Offset $offset = 0; if($_GET["offset"]){ $offset = $_GET["offset"]; } if($filter) { $where = $modx->toJSON(matrice($filtru)); ) else ( $where = ""; ) $params_count = array("parinti" => $parinti, "limit" => 0, "tpl" => "@INLINE ,", "select" => "id", "includeTVs" => $fields, "showHidden" => "1", "where" => $where); $număr = $modx->runSnippet("pdoResources",$params_count); $număr = numărare(explode(",",$număr))-1; $modx->setPlaceholder("count",$count); $params = array("parinti" => $parinti, "limit" => $limit, "offset" => $offset, "tpl" => $tpl, "select" => "id,pagetitle,introtext,continut ", "includeTVs" => $fields, "showHidden" => "1", "sortby" => $sortby, "sortdir" => $sortdir, "unde" => $unde); $mai mult = $număr - $offset - $limită; $lim = $mai mult > $limit ? $limită: $mai mult; $button = ""; dacă($mai mult > 0)( $button = "
Încărcați mai mult „.$lim.” din „.$mai mult”.
"; ) return $modx->runSnippet("pdoResources",$params).$button;

Între comentarii //Setări câmpuri de filtrare și //Setări de sfârșit există parametri pe care trebuie să îi editați pentru a se potrivi cu proiectul dvs. Nu este nimic complicat aici, doar scrieți numele câmpurilor de intrare și verificați-le cu o condiție if. Pentru câmpuri precum Radio, Select și Text, folosim exemplul de la rândurile 5-8. Pentru a determina valoarea intermediară de la și la, puteți folosi exemplul din rândurile 11-16. Pentru casetele de selectare, exemplul de la rândurile 19-21 este potrivit.

În rândul 74 al fragmentului vă puteți defini clasele, dar nu eliminați marcajul curent, deoarece este folosit în scripturi pentru încărcarea conținutului.

Exemplu de valori posibile în panoul de control MODx pentru butoanele radio: First==1||Second==2||Third==3

Un exemplu de afișare a butoanelor radio în interfață:

Aici numele de denumire = „etaj” corespunde rândurilor 6-8 din fragmentul nostru de catalog Filtru. Procesarea altor câmpuri de formular este implementată în mod similar. Cred că acest lucru este de înțeles și crearea propriilor câmpuri nu va fi o problemă pentru tine.

Fragmentul este scos în șablonul de catalog după cum urmează:

[[!catalogFilter?

  • &tpl=`tplCatItem` &limit=`3` &parents=`5` &fields=`imagine,zonă,etaj,garaj,preț`]]
  • tpl=`tplCatItem` - bucată de articol din lista de catalog;
  • limit=`3` - Câte înregistrări să afișați și câte înregistrări să încărcați când faceți clic pe butonul „Încărcați mai multe”;
  • parents=`5` - indică id-ul documentului părinte pentru directorul de resurse;
fields=`image,area,floor,garage,price` - enumerați televizoarele care trebuie afișate în fragmentul tplCatItem și care trebuie procesate la filtrare.

Exemplu de bucată tplCatItem

[[+tv.floor]] `]]
[[+pagetitle]] Podea
[[+tv.area:isnot=``:then=` Pătrat
[[+tv.area]] mp. Garaj
[[+tv.garage:is=`1`:then=`Da`:else=`Nu`]] [[+tv.price]]

Sortare Ajax după TV
Scriptul nostru are o soluție gata făcută pentru sortarea rezultatelor de filtrare în funcție de orice domeniu TV. Introduceți următoarele câmpuri ascunse în formularul de filtrare și nu modificați valoarea acestora, trebuie doar să fie în formularul de filtrare:

Oriunde în șablonul HTML, faceți un buton de ieșire și în atributul de date specificați câmpul după care doriți să filtrați rezultatele:

Sortați după preț:

Când faceți clic, clasa buton-sort-asc este comutată, pe care o puteți utiliza pentru a proiecta un buton atunci când schimbați direcția de sortare, adăugați săgeți etc. Puteți scrie orice televizor implicat în filtrare în atributul data-sort-by. Asta e tot cu sortarea.

Așadar, ne-am uitat la crearea unui filtru simplu de resurse Ajax în MODx cu rezultate rezultate în fragmentul pdoResources.

Multa sanatate tuturor. În acest articol vă voi spune cum să faceți un filtru de document pe baza parametrilor TV pe un site care rulează Modx Revolution. Vom folosi fragmentul 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 asta mergem la Aplicații/Instalar/

apăsați butonul „Descărcați suplimentul”și introduceți în bara de căutare tagManager2

De asemenea, mai trebuie să instalați fragmentul getPage și getProducts. Astfel sectiunea „Gestionarea pachetelor” ar trebui să arate așa (fragmentul translit, apropo, este responsabil pentru transliterarea aliasurilor în latină)

Descărcați, instalați pachete și accesați „Setări de sistem”

2. Configurați fragmentul tagManager2

În Setări de sistem, selectați secțiunea tag_manager2

Vom vedea opțiunile de setări ale filtrului

Totul acolo este destul de simplu și clar, dar totuși:

  • ÎN „ID-ul resursei directorului de nivel superior” specificați id-ul șablonului sau categoriei de catalog în care vor fi filtrate produsele sau paginile
  • ÎN „Delimitator suplimentar de liste multiple” pune semnul #. Mai jos vei afla de ce este nevoie
  • ÎN „Nume de câmpuri TV sau liste multiple”înregistrați televizorul cu o listă multiplă. Vă voi arăta mai jos cum să le creați.
  • „Numele TV sau câmpurile 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”
  • ÎN „ID-uri șabloane de produs” notăm id-ul paginilor care trebuie filtrate și la care sunt atașați parametrii TV specificați mai sus
  • ÎN „Numele setului de parametri folosit pentru filtrare”înregistrare catalog_filters. Vom folosi acest șablon în șabloane 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

Să mergem la fragmentul getPage

Accesați fila „Opțiuni”și apăsați butonul „Adăugați 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.

Editați parametrii existenți și atribuiți valori:

Creați noi parametri și atribuiți valori

Parametrii editați vor fi afișați în verde, parametrii creați vor fi afișați în violet

4. Creați sau editați parametrii TV pentru filtru

Am creat 3 parametri TV de exemplu

Aș dori 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 o bucată filtr_tpl

Această bucată este responsabilă pentru afișarea fiecărui rezultat individual în getProducts

6. Creați o structură în arborele de documente

Pentru mine arata asa:

Pagina noastră principală are ID-ul 1, iar produsele au ID-ul șablonului 1 (avem acest lucru în setările tag_manager2, dacă aveți alte valori, nu uitați să-l schimbați în setări)

7. Editați filters.js

Hai sa mergem la adresa /assets/components/tag_manager2/js/web/filters.js iar în schimb

Etichete multiple: [„etichete”],//Nume suplimentare. 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 clar. Am inserat câmpurile noastre 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șați filtrul și rezultatele de filtrare

Filtrul în sine

[]
[[+filtre]]

Afișarea rezultatelor cu paginare

[[!tmCatalog]]
    [[!+page.nav]]

Sortarea rezultatelor

9. Activați filtrul

Acum trebuie doar să ne activăm filtrul. Pentru a face asta mergem la Aplicații/Gestionare filtre.

Aici trebuie să bifați casetele de lângă fiecare filtru și să faceți clic pe butonul„Salvează”.

Dacă ați făcut totul corect, 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 . Mult succes in dezvoltare. ÎN "Demo" unul dintre site-urile mele care implementează un filtru folosind tagManager2

MODx are o sintaxă încorporată pentru utilizarea construcțiilor if else.

Modificatori de ieșire

Tabelul prezintă câțiva modificatori și exemple de utilizare a acestora. În exemple, modificatorii sunt aplicați substituenților, dar ar trebui 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 îl va procesa.

Modificatori de ieșire condiționate

Modificator Descriere Exemplu de utilizare
dacă, intrare if - setează o intrare de condiție suplimentară - adaugă date procesate la etichetă
sau Combinarea mai multor modificatori folosind o conexiune SAU

[ [*id:is=`5`:or:is=`6`:then=`numărul 5 sau 6`:else=`alt număr`]]

şi Combinarea mai multor modificatori cu o relație AND

[ [*id:is=`1`:and:if=`[ [*id]]`:ne=`2`:then=`da`:else=`net`]]

este egal, este egal, egal, este egal, este, eq Compară valoarea transmisă cu valoarea setată. Dacă valorile se potrivesc, este afișată valoarea „atunci”, dacă nu - „altfel”

[[*id:is=`5`:then=`numărul 5`:else=`numărul nu 5`]]

notequalto, notequals, isnt, isnot, neq, ne Compară valoarea transmisă cu valoarea setată. Dacă valorile NU se potrivesc, este afișată valoarea „atunci”, dacă nu - „altfel”

[ [*id:isnot=`5`:then=`numărul nu este 5`:else=`aparent numărul 5`]]

mai mare decât egal, egal, mai mare apoi, ge, de exemplu, isgte, gte La fel, doar condiția este „Mai mare sau egal cu”

[ [*id:gte=`5`:then=`numărul 5 sau mai mult`:else=`mai puțin decât numărul 5`]]

este mai mare decât, mai mare decât, isgt, gt La fel, doar condiția „Strict mai mult”

[ [*id:gt=`5`:then=`număr mai mare de cinci`:else=`număr 5 sau mai puțin`]]

equaltoorlessthan, lessthanorequalto, el, le, islte, lte La fel, doar condiția este „mai mică sau egală cu”

[ [*id:lte=`5`:then=`numărul 5 sau mai puțin`:else=`mai mare decât numărul 5`]]

islower than, isless than, below than, lessthan, islt, lt La fel, doar condiția „Strict mai puțin”

[ [*id:lte=`5`:then=`numărul este cu siguranță mai mic decât 5`:else=`numărul este 5 sau mai mult`]]

ascunde Ascunde elementul dacă condiția este adevărată

[[*id:lt=`1`:hide]]

spectacol Afișează un element dacă o condiție este adevărată

[ [*id:gt=`0`:show]]

apoi Folosit pentru a crea condiții

[ [*id:gt=`0`:then=`Cărți în stoc!`]]

altfel Folosit pentru a crea condiții (împreună cu „atunci”)

[ [*id:gt=`0`:then=`Cărți în stoc!`:else=`Ne pare rău, dar totul este epuizat.`]]

selecta Setați valoarea, în funcție de modificator și de rezultatul etichetei. De asemenea, puteți utiliza „else”, de exemplu, dacă valoarea [ [+controls]] nu se potrivește cu modelul selectat

[ [+comenzi:select=`0=OFF&1=ON&2=ХЗ`:else=`Eroare`]]

membru al, ismember, mo Verifică dacă utilizatorul este membru al grupului de utilizatori specificat

[ [+modx.user.id:memberof=`Administrator`]]

Filtrele pot fi folosite și pentru a modifica rezultatul fragmentelor. Filtrul trebuie specificat înaintea tuturor parametrilor (înainte de semnul întrebării):

De asemenea, pentru a putea folosi structuri imbricate, puteți folosi un pachet suplimentar, care are un nume scurt și succint If. Îl puteți descărca accesând System->Package Management.

Iată cum va arăta codul de stare:

[ [!Dacă? &subject=`[ [+total]]` &operator=`GT` &operand=`3` &then=`Aveți mai mult de 3 articole!`]]

Dacă parametrii pachetului:

subiect- Parametrul prin care sunt îndeplinite condițiile.

operator- Operator de comparare cu subiect

operand- Folosit după cum este necesar și reprezintă valoarea operatorului care utilizează subiectul.

apoi- Cod care este afișat dacă condiția este evaluată la adevărată

altfel- Cod care este afișat dacă condiția este falsă

depanare- Dacă este adevărat, vor afișa toți parametrii trecuți

muri- Dacă depanarea (debag) a avut succes și corespunde valorii true, atunci după afișarea parametrilor, utilizați funcția die().

Opțiuni

Nume Descriere Implicit
subiect Parametrul prin care sunt îndeplinite condițiile.
operator Operator de comparare cu subiect =
operand Folosit după cum este necesar și reprezintă sens subiect (subiect al comparației) folosind operator (operator de comparație).
apoi adevărat
altfel Cod care este afișat dacă condiția ia o valoare fals
depanare Dacă adevărat , va afișa toți parametrii trecuți 0
muri Dacă se depanează (debag ) a trecut cu succes și se potrivește cu valoarea adevărat , apoi după ieșirea parametrilor, aplicați funcția muri() . 0

Operatori:

Nume: Descriere:
!=,neq,nu,nu,este,nu este,inegal,notegal Verifică dacă subiectul nu este egală cu valoarea specificată operand
==,=,eq,este,egal,egal,egal Verifică dacă subiectul egală cu valoarea specificată operand
< ,lt,less,lessthan Verificați dacă subiectul mai mică decât valoarea specificată operand
> ,gt,mai mare,mai mare decât Verifică dacă subiectul mai mare decât valoarea specificată operand
< =,lte,lessthanequals,lessthanorequalto Verifică dacă subiectul mai mică sau egală cu valoarea specificată operand
> =,gte,greaterthanequals,greaterthanequalto Verifică dacă subiectul mai mare sau egală cu valoarea specificată operand
este gol, gol Verifică dacă subiectul are o valoare goală
!gol, neîndoielnic, este neîndoielnic Verifică dacă subiectul are vreo semnificație
este nul, nul Verifică dacă subiectul este nul
inarray,in_array,ia Verifică dacă subiectul este găsit în lista de operanzi (șir separat prin virgulă)

Salutări, prieteni! Astăzi vom învăța cum să creăm un filtru de resurse în MODx Revolution cu posibilitatea de a sorta după orice câmp TV și de a încărca rezultatele făcând clic pe „Încărcați mai multe”. Pentru a afișa rezultatele vom folosi fragmentul pdoResources.

Rece

Bâlbâi

Descărcați toate fragmentele și fișierele de lecție necesare.

Mai întâi trebuie să instalați pachetul pdoResources, care este inclus în pachet pdoTools. Puteți instala fie întregul set de pachete pdo (pdoTools), fie doar pdoResources ca pachet separat pentru a crea un filtru pe MODx Revolution.

După instalarea pachetelor, să includem fragmentul pe care l-ați descărcat în proiect. Dacă în prezent dezvoltați un director de la zero, atunci vă sfătuiesc să rămâneți la utilizarea unor clase specifice pentru filtrarea Ajax. Schema de denumire a clasei:

Cu toate acestea, dacă aveți deja un director gata făcut, puteți defini clasele de elemente de filtru Ajax în fișierul JS (vezi mai jos).

Rețineți că .ajax-articol trebuie să fie un descendent direct .ajax-container. Dacă utilizați grila Bootstrap pentru aspectul coloanei, puteți defini clasa containerului ca "rând ajax-container", iar coloanele de articole sunt ca "col-md-4 ajax-item".

Conectarea filtrului Ajax de script JS

Să conectăm scriptul JS la proiect. Îl puteți conecta fie ca fișier separat, fie direct în fișierul de scripturi personalizate al proiectului. Scriptul necesită jQuery pentru a rula.

$(function() ( //MODx pdoResources Ajax Filter //Setări filtru var fadeSpeed ​​​​= 200, // Fade Animation Speed ​​​​ajaxCountSelector = ".ajax-count", // Selector CSS de contor de articole ajaxContainerSelector = ". ajax-container" , // Selector CSS al containerului Ajax ajaxItemSelector = ".ajax-item", // Selector CSS al articolului Ajax ajaxFormSelector = ".ajax-form", // Selector CSS al formularului de filtru Ajax ajaxFormButtonStart = ".ajax -start", // Selector CSS al Butonului Start Filtering ajaxFormButtonReset = ".ajax-reset", // Selector CSS al Butonului Resetare Ajax Form sortDownText = "Descendent", sortUpText = "Ascendent"; funcția ajaxCount() ( if($ (" .ajax-filter-count").length) ( var count = $(".ajax-filter-count").data("count"); $(ajaxCountSelector).text(count); ) else ( $ (ajaxCountSelector ).text($(ajaxItemSelector).length )ajaxCount(); function ajaxMainFunction() ( $.ajax(( data: $(ajaxFormSelector).serialize()).done(function(response) ( var $ răspuns = $(răspuns); $(ajaxContainerSelector).fadeOut(fadeSpeed);

  • Rândurile 5-13: Definirea variabilelor pentru selectoarele de filtre CSS Ajax. Nu ne schimbam daca folosim valori standard, ca in figura de mai sus;
  • Rândurile 15-22: scriptul contorului de resurse în filtrarea rezultatelor;
  • Liniile 24-35: funcția principală de filtrare Ajax;
  • Liniile 37-49: handler de evenimente pentru a face clic pe butonul „Încărcați mai multe”;
  • Liniile 51-54: handler de evenimente pentru a face clic pe butonul „filtru”. Acest buton poate fi absent, deoarece filtrarea are loc automat. Filtrarea automată poate fi dezactivată prin eliminarea liniilor 68-70;
  • Liniile 56-66: handler de evenimente pentru ștergerea formularului și resetarea filtrului. Rândurile 59-63 sunt responsabile pentru resetarea colării;
  • Liniile 68-70: funcție de sortare automată la schimbarea câmpurilor formularului de filtrare;
  • Liniile 72-82: functie de sortare universala dupa parametrul TV.

Am încercat să fac acest script cât mai universal posibil, așa că dacă utilizați selectoare standard de elemente de filtru Ajax, atunci nu trebuie să editați nimic.

Conectarea unui fragment PHP la MODx Revolution

Creați un nou fragment în panoul de control MODx catalogFilterși completați-l cu următorul conținut:

=".$_GET["zona_de la"]; ) if($_GET["zona_la"]) ( $filter = "zonă<=".$_GET["area_to"]; } //Checkbox Type if($_GET["garage"]) { $filter = "garage=1"; } //End Settings //Sort if($_GET["sortby"]) { $sortby = $_GET["sortby"]; } else { $sortby = "pagetitle"; } if($_GET["sortdir"]) { $sortdir = $_GET["sortdir"]; } else { $sortdir = "asc"; } //End Sort //Offset $offset = 0; if($_GET["offset"]){ $offset = $_GET["offset"]; } if($filter) { $where = $modx->toJSON(matrice($filtru)); ) else ( $where = ""; ) $params_count = array("parinti" => $parinti, "limit" => 0, "tpl" => "@INLINE ,", "select" => "id", "includeTVs" => $fields, "showHidden" => "1", "where" => $where); $număr = $modx->runSnippet("pdoResources",$params_count); $număr = numărare(explode(",",$număr))-1; $modx->setPlaceholder("count",$count); $params = array("parinti" => $parinti, "limit" => $limit, "offset" => $offset, "tpl" => $tpl, "select" => "id,pagetitle,introtext,continut ", "includeTVs" => $fields, "showHidden" => "1", "sortby" => $sortby, "sortdir" => $sortdir, "unde" => $unde); $mai mult = $număr - $offset - $limită; $lim = $mai mult > $limit ? $limită: $mai mult; $button = ""; dacă($mai mult > 0)( $button = "
Încărcați mai mult „.$lim.” din „.$mai mult”.
"; ) return $modx->runSnippet("pdoResources",$params).$button;

Între comentarii //Setări pentru câmpuri de filtrareŞi //Încheiați setările Există parametri pe care trebuie să îi editați pentru a se potrivi proiectului dvs. Nu este nimic complicat aici, doar scrieți numele câmpurilor de intrare și verificați-le cu o condiție if. Pentru câmpuri precum Radio, Select și Text, folosim exemplul de la rândurile 5-8. Pentru a determina valoarea intermediară de la și la, puteți folosi exemplul din rândurile 11-16. Pentru casetele de selectare, exemplul de la rândurile 19-21 este potrivit.

În rândul 74 al fragmentului vă puteți defini clasele, dar nu eliminați marcajul curent, deoarece este folosit în scripturi pentru încărcarea conținutului.

Exemplu de valori posibile în panoul de control MODx pentru butoanele radio: Primul==1||Al doilea==2||Al treilea==3


Un exemplu de afișare a butoanelor radio în interfață:

Iată denumirea nume = " podea " se potrivește cu rândurile 6-8 din fragmentul nostru catalogFilter. Procesarea altor câmpuri de formular este implementată în mod similar. Cred că acest lucru este de înțeles și crearea propriilor câmpuri nu va fi o problemă pentru tine.

Fragmentul este scos în șablonul de catalog după cum urmează:

[[!catalogFilter?

  • &tpl=`tplCatItem` &limit=`3` &parents=`5` &fields=`imagine,zonă,etaj,garaj,preț`]] tpl=`tplCatItem`
  • - bucată articol din lista de catalog; limit=`3`
  • - Câte înregistrări să afișați și câte înregistrări să încărcați când faceți clic pe butonul „Încărcați mai multe”; parinti=`5`
  • - indicați id-ul documentului părinte pentru catalogul de resurse; fields=`imagine,zona,etaj,garaj,pret`

- enumerați televizoarele care trebuie afișate în fragmentul tplCatItem și care trebuie procesate la filtrare. Exemplu de bucată

Exemplu de bucată tplCatItem

[[+tv.floor]] `]]
[[+pagetitle]] Podea
[[+tv.area:isnot=``:then=` Pătrat
[[+tv.area]] mp. Garaj
[[+tv.garage:is=`1`:then=`Da`:else=`Nu`]] [[+tv.price]]

tplCatItem Puteți vedea un exemplu complex de ieșire către front-end în depozitul de proiect de pe Github în fișier.

demo.html

Sortare Ajax după televizor

Oriunde în șablonul HTML, faceți un buton de ieșire și în atributul de date specificați câmpul după care doriți să filtrați rezultatele:

Scriptul nostru are o soluție gata făcută pentru sortarea rezultatelor de filtrare în funcție de orice domeniu TV. Introduceți următoarele câmpuri ascunse în formularul de filtrare și nu modificați valoarea acestora, trebuie doar să fie în formularul de filtrare:

Sortați după preț: Crescător Când se face clic, clasa este comutată buton-sortare-asc , pe care îl puteți folosi pentru a proiecta un buton atunci când schimbați direcția de sortare, adăugați săgeți etc. la un atribut sortare-date-după

Puteți scrie orice televizor care participă la filtrare. Asta e tot cu sortarea. pdoResources.

Așadar, ne-am uitat la crearea unui filtru de resurse Ajax simplu în MODx cu afișarea rezultatelor într-un fragment

Filtrele din Revolution vă permit să procesați și să modificați valorile etichetelor în interiorul șabloanelor, fragmentelor și fragmentelor 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 cadrul 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:

Filtrele pot fi aplicate secvenţial (scrise de la stânga la dreapta):

[[+element:modifier=`value`:anothermodifier=`value2`:andanothermodifier:yetanother=`value3`]]

Asemenea filtrele pot fi folosite pentru a modifica rezultatul fragmentelor. Filtrul trebuie specificat î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 se aplică 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:is=`10`:and:if=`[[+num]]`:ne=`15`:then=`Da, egal cu 10 și nu cu 15`]]
sau, și Combinarea mai multor modificatori cu o conexiune SAU și o conexiune AND [[+numProducts:is=`10`:or:is=`11`:then=`Există 10 sau 11 produse aici`:else=`Nu sunt sigur câte produse`]]
este egal, este egal, egal, este egal, este, eq Compară valoarea transmisă cu valoarea setată. Dacă valorile se potrivesc, este afișată valoarea „atunci”, dacă nu - „altfel” [[+numProducts:isequalto=`10`:then=`Există 10 produse aici`:else=`Nu sunt sigur câte produse`]]
notequalto, notequals, isnt, isnot, neq, ne Compară valoarea transmisă cu valoarea setată. Dacă valorile NU se potrivesc, este afișată valoarea „atunci”, dacă nu - „altfel” [[+numProducts:notequalto=`10`:then=`Nu sunt sigur câte produse`:else=`Există 10 produse aici`]]
mai mare decât egal, egal, mai mare apoi, ge, de exemplu, isgte, gte La fel, doar condiția este „Mai mare sau egal cu” [[+numProducts:gte=`10`:then=`Există 10 produse sau mai multe 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 este „strict mai mare decât” [[+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 este „mai mică sau egală cu” [[+numProducts:lte=`10`:then=`Există 10 produse sau mai puțin aici`:else=`Sunt mai mult de 10 produse aici`]]
islower than, isless than, below than, lessthan, islt, lt La fel, doar condiția este „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 adevărată [[+numProducts:lt=`1`:hide]]
spectacol Afișează un element dacă o condiție este adevărată [[+numProducts:gt=`0`:show]]
apoi Folosit pentru a crea condiții [[+numProducts:gt=`0`:then=`Produse în stoc!`]]
altfel Folosit pentru a crea condiții (împreună cu „atunci”) [[+numProducts:gt=`0`:then=`Produse în stoc!`:else=`Ne pare rău, dar totul este epuizat.`]]
membru al, ismember, mo Verifică dacă utilizatorul 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ă o etichetă [[+numProducts:cat=`produse`]]
lcase, minuscule, strtolower Convertește toate literele în minuscule [[+title:lcase]]
ucase, majuscule, strtoupper Convertește toate literele în majuscule [[+longtitle:ucase]]
ucwords Scrie cu majuscule prima literă a cuvintelor [[+title:ucwords]]
ucfirst Scrie cu majuscule prima literă dintr-un șir [[+nume:ucfirst]]
htmlent, htmlentities Convertește toate caracterele în entități HTML [[+email:htmlent]]
esc, evadare Evadează în siguranță caracterele folosind expresii regulate și str_replace . De asemenea, scapă caracterele [, ] și ` [[+email:escape]]
bandă Înlocuiește toate cratimele, filele și orice număr de spații cu un singur spațiu [[+textdocument:strip]]
stripString Taie subșirul specificat dintr-un șir [[+name:stripString=`Mr.`]]
înlocui Înlocuiește subșiruri [[+pagetitle:replace=`Mr.==Doamna`]]
striptags, stripTags, notags, strip_tags Decupează toate etichetele (pot fi specificate etichetele permise). [[+code:strip_tags=`
len, lungime, strlen Imprimă lungimea unui șir [[+longstring:strlen]]
invers, strev Inversează un șir caracter cu caracter [[+text în oglindă:reverse]]
înfășurare de cuvinte 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ă Imprimă un număr specificat de caractere de la începutul unei linii (implicit este 100) [[+description:limit=`50`]]
elipsă Adaugă o elipsă și trunchiază linia dacă este mai lungă de un anumit număr de caractere (implicit este 100) [[+description:ellipsis=`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 utilizare intensivă a CPU. Nerecomandat)
adăugare, sporire, încr Adaugă numărul specificat (implicit +1) [[+descărcări:incr]], [[+blackjack:add=`21`]]
scădere, decrementare, decr Scade numărul specificat (implicit -1) [[+countdown:decr]], [[+moneys:subtract=`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ă [[+name:default=`anonim`]]
notempty, !gol, ifnotempty, isnotempty Returnează valoarea modificatorului dacă valoarea etichetei NU este goală [[+name:notempty=`Bună ziua, [[+name]]!`]]
nl2br Înlocuiește liniile noi (\n) cu o etichetă HTML
[[+textfile:nl2br]]
data Convertește marcajul de timp în text conform formatului specificat (Format de dată) [[+birthyyear:date=`%Y`]]
strtotime Convertește data ca text în marcaj temporal UNIX [[+thetime:strtotime]]
fuzzydate Returnează data în formatul „ieri, azi, ...”. Ia o valoare de dată. [[+createdon:fuzzydate]]
în urmă Returnează numărul de secunde, minute, săptămâni sau luni care au trecut de la data specificată în etichetă. [[+createdon:acum]]
md5 Creează un hash MD5 cu o valoare [[+parolă:md5]]
cdata Încheie ieșirea cu etichete CDATA [[+content: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 valoarea în URL [[+mystring:urlencode]]
urldecode Convertește valoarea din URL [[+myparam:urldecode]]

Utilizarea modificatorilor de ieșire cu parametri

Dacă o etichetă 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, pur și simplu specificaț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într-o bază de date, folosind modificatori de ieșire în loc de fragmente, se poate realiza pur și simplu folosind modificatorul UserInfo.

Selectați coloana dorită din tabel și specificați-o ca proprietate modificatoare, de exemplu astfel:

Sens Modificator
Cheia internă a utilizatorului [[!+modx.user.id:userinfo=`internalKey`]]
Log in [[!+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 nașterii [[!+modx.user.id:userinfo=`dob`:date=`%Y-%m-%d`]]
Podea [[!+modx.user.id:userinfo=`gen`]]
Ţară [[+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`]]
  • Serghei Savenkov

    un fel de recenzie „scurtă”... de parcă s-ar grăbi undeva