Filtri modifikatora. Jednostavan AJAX filter za MODX koji koristi pdoPage

Pozdrav prijatelji! Danas ćemo naučiti kako stvoriti filtar resursa u MODx Revolution s mogućnošću sortiranja prema bilo kojem TV polju i učitavanja rezultata klikom na "Učitaj više". Za prikaz rezultata koristit ćemo isječak pdoResources.

Cool

Mucanje

Preuzmite sve isječke i potrebne datoteke lekcija.

Prvo morate instalirati paket pdoResursi, koji je uključen u paket pdoTools. Možete instalirati ili cijeli skup pdo paketa (pdoTools) ili samo pdoResources kao zaseban paket za stvaranje filtra na MODx Revolution.

Nakon instaliranja paketa, uključimo isječak koji ste preuzeli u svoj projekt. Ako trenutno razvijate imenik od nule, savjetujem vam da se držite korištenja specifičnih klasa za Ajax filtriranje. Shema imenovanja klase:

Međutim, ako već imate gotov direktorij, možete definirati klase elemenata filtera Ajax u JS datoteci (pogledajte dolje).

imajte na umu da .ajax-stavka mora biti izravni potomak .ajax-spremnik. Ako koristite Bootstrap rešetku za raspored stupaca, klasu spremnika možete definirati kao "redak ajax-spremnik", a stupci stavki su kao "col-md-4 ajax-stavka".

Povezivanje JS skripte s Ajax filtrom

Povežimo JS skriptu s projektom. Možete ga povezati kao zasebnu datoteku ili izravno u datoteku prilagođenih skripti projekta. Skripta zahtijeva jQuery za pokretanje.

$(function() ( //MODx pdoResources Ajax filtar //Postavke filtra var fadeSpeed ​​​​= 200, // Fade Animation Speed ​​​​ajaxCountSelector = ".ajax-count", // CSS birač brojača stavki ajaxContainerSelector = ". ajax-container" , // CSS selektor Ajax spremnika ajaxItemSelector = ".ajax-item", // CSS selektor Ajax stavke ajaxFormSelector = ".ajax-form", // CSS selektor Ajax obrasca filtra ajaxFormButtonStart = ".ajax -start", // CSS birač gumba Start Filtering ajaxFormButtonReset = ".ajax-reset", // CSS birač gumba Reset Ajax Form sortDownText = "Silazno", sortUpText = "Uzlazno"; funkcija ajaxCount() ( if($ (" .ajax-filter-count").length) ( var count = $(".ajax-filter-count").data("count"); $(ajaxCountSelector).text(count); ) else ( $ (ajaxCountSelector ).text($(ajaxItemSelector).length); ) )ajaxCount(); funkcija ajaxMainFunction() ( $.ajax(( podaci: $(ajaxFormSelector).serialize() )).done(funkcija(odgovor) ( var $ odgovor = $(odgovor);$(ajaxContainerSelector).fadeOut(fadeSpeed); setTimeout(function() ( $(ajaxContainerSelector).html($response.find(ajaxContainerSelector).html()).fadeIn(fadeSpeed); ajaxCount(); ), fadeSpeed); )); ) $(ajaxContainerSelector).on("click", ".ajax-more", function(e) ( e.preventDefault(); var offset = $(ajaxItemSelector).length; $.ajax(( podaci: $(ajaxFormSelector ).serialize()+"&offset="+offset )).done(function(response) ( $(".ajax-more").remove(); var $response = $(response); $response.find( ajaxItemSelector).hide(); $(ajaxContainerSelector).append($response.find(ajaxContainerSelector).html()); $(ajaxItemSelector).fadeIn(); )); )) $(ajaxFormButtonStart).click(function( e) ( e.preventDefault(); ajaxMainFunction(); )) $(ajaxFormButtonReset).click(function(e) ( e.preventDefault(); $(ajaxFormSelector).trigger("reset"); $("input" ).val("pagetitle"); $("input").val("asc"); setTimeout(function() ( $("").data("sort-dir", "asc").toggleClass( "button-sort-asc").tekst(sortUpText); ), fadeSpeed); ajaxMainFunction(); ajaxCount(); )) $(""+ajaxFormSelector+" input").promjena(funkcija() ( ajaxMainFunction(); )) $("").data("sort-dir", "asc").click(function() ( var ths = $(this); $("unos").val($(ovo).podaci("razvrstaj po")); $("input").val($(this).data("sort-dir")); setTimeout(function() ( $("").not(this).toggleClass("button-sort-asc").text(sortUpText); ths.data("sort-dir") == "asc" ? ths .data("sort-dir", "desc").text(sortDownText) : ths.data("sort-dir", "asc").text(sortUpText); $(this).toggleClass("button-sort) -asc"); ), fadeSpeed); ajaxMainFunction(); )); ));

  • Redovi 5-13: Definiranje varijabli za selektore CSS Ajax filtera. Ne mijenjamo ako koristimo standardne vrijednosti, kao na gornjoj slici;
  • Redci 15-22: skripta brojača resursa u filtriranju rezultata;
  • Redci 24-35: glavna funkcija filtriranja Ajaxa;
  • Linije 37-49: rukovatelj događajima za klik na gumb "Učitaj više";
  • Linije 51-54: rukovatelj događajima za klik na gumb "filtar". Ovaj gumb može biti odsutan jer se filtriranje događa automatski. Automatsko filtriranje može se onemogućiti uklanjanjem redaka 68-70;
  • Linije 56-66: rukovatelj događajima za brisanje obrasca i resetiranje filtra. Linije 59-63 odgovorne su za ponovno postavljanje uspoređivanja;
  • Linije 68-70: funkcija automatskog sortiranja pri promjeni polja obrasca filtra;
  • Linije 72-82: univerzalna funkcija sortiranja prema TV parametru.

Pokušao sam ovu skriptu učiniti što je moguće univerzalnijom, tako da ako koristite standardne selektore elemenata Ajax filtera, ne morate ništa uređivati.

Povezivanje PHP isječka s MODx Revolution

Napravite novi isječak na MODx upravljačkoj ploči katalogFilter i ispunite ga sljedećim sadržajem:

= ".$_GET["area_from"]; ) if($_GET["area_to"]) ( $filter = "area<=".$_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(niz($filter)); ) else ( $where = "";) $params_count = array("parents" => $parents, "limit" => 0, "tpl" => "@INLINE ,", "select" => "id", "includeTVs" => $polja, "showHidden" => "1", "where" => $where); $count = $modx->runSnippet("pdoResources",$params_count); $count = count(explode(",",$count))-1; $modx->setPlaceholder("count",$count); $params = array("parents" => $parents, "limit" => $limit, "offset" => $offset, "tpl" => $tpl, "select" => "id,pagetitle,introtext,content ", "includeTVs" => $polja, "showHidden" => "1", "sortby" => $sortby, "sortdir" => $sortdir, "where" => $where); $more = $count - $offset - $limit; $limit = $više > $limit? $ograničenje: $više; $button = ""; if($more > 0)( $button = "
Učitaj više ".$lim." iz ".$more."
"; ) return $modx->runSnippet("pdoResources",$params).$button;

Između komentara //Postavke polja filtra I //Završi postavke Postoje parametri koje trebate urediti kako bi odgovarali vašem projektu. Ovdje nema ništa komplicirano, samo napišite nazive polja za unos i provjerite ih ako uvjetom. Za polja kao što su Radio, Odabir i Tekst koristimo primjer iz redaka 5-8. Za određivanje srednje vrijednosti od i do možete koristiti primjer iz redaka 11-16. Za potvrdne okvire prikladan je primjer iz redaka 19-21.

U retku 74 isječka možete definirati svoje klase, ali nemojte uklanjati trenutnu oznaku jer se ona koristi u skriptama za učitavanje sadržaja.

Primjer mogućih vrijednosti na MODx upravljačkoj ploči za radio gumbe: Prvi==1||Drugi==2||Treći==3


Primjer prikaza radio gumba u sučelju:

Evo imenovanja name="kat" odgovara recima 6-8 našeg isječka katalogFilter. Obrada ostalih polja obrasca provodi se na sličan način. Mislim da je to razumljivo i da vam kreiranje vlastitih polja neće biti problem.

Isječak se ispisuje u predlošku kataloga na sljedeći način:

[[!katalogFilter? &tpl=`tplCatItem` &limit=`3` &parents=`5` &fields=`image,area,floor,garage,price`]]

  • tpl=`tplCatItem`- komadna stavka u kataloškom popisu;
  • limit=`3`- Koliko zapisa prikazati i koliko zapisa učitati kada kliknete na gumb "Učitaj više";
  • roditelji=`5`- navesti ID nadređenog dokumenta za katalog izvora;
  • polja=`slika,površina,kat,garaža,cijena`- popis TV-a koje je potrebno prikazati u tplCatItem dijelu i koje je potrebno obraditi prilikom filtriranja.

Primjer komada tplCatItem

[[+naslov stranice]]

[[+tv.area:isnot=``:then=` `]]
Kat [[+tv.kat]]
Kvadrat [[+tv.area]] m2
Garaža [[+tv.garage:is=`1`:then=`Da`:else=`Ne`]]
Cijena: [[+tv.cijena]]

U datoteci možete vidjeti složeni primjer izlaza na sučelje u repozitoriju projekta na Githubu demo.html.

Ajax razvrstavanje po TV-u

Naša skripta ima već spremno rješenje za sortiranje rezultata filtriranja po bilo kojem TV polju. Umetnite sljedeća skrivena polja u obrazac za filtriranje i ne mijenjajte njihovu vrijednost, samo moraju biti u obrascu za filtriranje:

Bilo gdje u vašem HTML predlošku napravite izlaz gumba i u atributu podataka navedite polje prema kojem želite filtrirati rezultate:

Poredaj po cijeni: Rastući

Kada se klikne, klasa se mijenja gumb-sort-asc, koji možete koristiti za dizajn gumba kada mijenjate smjer sortiranja, dodajete strelice itd. atributu sortiranje podataka prema Možete napisati bilo koji TV koji sudjeluje u filtriranju. To je sve sa sortiranjem.

Dakle, pogledali smo stvaranje jednostavnog Ajax filtera resursa u MODxu s ispisom rezultata u isječku pdoResursi.

PHx (Placeholders Xtended) dodaje nove mogućnosti za prikaz rezerviranih mjesta, MODx oznaka (uključujući TV parametre) i oznaka postavki web mjesta. Rekurzivni parser dopušta korištenje ugniježđenih oznaka. Moguće je izraditi vlastite modifikatore stvaranjem isječaka.

Možete preuzeti najnoviju verziju PHx-a iz MODX repozitorija pomoću ove veze.

Nova instalacija

  1. Preuzmite i raspakirajte arhivu.

Ažuriraj

  1. Preuzmite i raspakirajte arhivu.
  2. Preimenujte direktorij /assets/plugins/phx u /assets/plugins/phx-old
  3. Napravite direktorij "phx" u mapi /assets/plugins.
  4. Prenesite putem FTP-a ili jednostavno kopirajte sadržaj arhive u /assets/plugins/phx
  5. Napravite novi dodatak "PHx" na upravljačkoj ploči MODx (Elements - Element Management - Plugins) i kopirajte sadržaj datoteke phx.plugin.txt u njega
  6. Provjerite događaj "OnParseDocument" na kartici "System Events".

Konfiguracija

Na kartici konfiguracija, dok uređujete dodatak, kopirajte u polje "Konfiguracija dodatka":

&phxdebug=Dnevnik događaja;int;0 &phxmaxpass=Maks. broj prolaza;int;50

Za napredne korisnike

Možete promijeniti zadane postavke za PHx dodatak:

Dnevnik događaja

0 = onemogućeno
1 = PHx bilježenje događaja omogućeno
Ako je omogućeno, PHx stvara detaljan dnevnik za svaki događaj zabilježen u dnevniku događaja (Izvješća->Preglednik događaja)

Maks. broj prolaza

Definira maksimalnu dubinu ugniježđenih oznaka koje se mogu obraditi. Preporuča se ostaviti vrijednost na 50.

PHx (Placeholders Xtended) proširuje upotrebu rezerviranih mjesta, oznaka sadržaja (uključujući TV parametre) i oznaka postavki web mjesta. Zahvaljujući tome, možete jednostavno odrediti izlazni format konačnog rezultata. PHx je ugrađen u MODX parser, proširujući njegovu funkcionalnost s modifikatorima, uvjetima i, kao bonus, čineći ga istinski rekurzivnim.

Podržane oznake

PHx podržava sljedeće MODx oznake:

  • [+placeholder+]
  • [*oznake sadržaja*] (na primjer: [*sadržaj*], [*naslov stranice*] i drugi)
  • [*TV parametri*]
  • [(oznake za prilagođavanje)] (na primjer: [(base_url)], [(site_name)] i drugi)

Isječci koji podržavaju PHx

  • Isto tako
  • MaxiGalerija

Možete koristiti PHx sintaksu u dijelovima koje koriste isječci koji nisu na ovom popisu, ali to zahtijeva drugu metodu (pogledajte odjeljak Savjeti i trikovi)

Rezervirano mjesto za uobičajeni prikaz

[+placeholder+]

lako se pretvara u rezervirano mjesto PHx:

[+placeholder:esc+]

Isto možete učiniti s oznakom sadržaja:

[*napravio*]

Dodajte modifikator:

[*stvorio:datum=`%a %B %d, %Y u %H:%M`*]

Također možete koristiti nekoliko modifikatora odjednom. Obrađivat će se s lijeva na desno:

Somevar:esc:nl2br:strip

Napredne aplikacije

Prisutnost posebnog rezerviranog mjesta "phx" omogućuje vam korištenje PHx sintakse bez stvarne varijable.

[+phx:if=`[+this+]`:is=`[+that+]`:then=`uradi ovo`:else=`uradi ono`+]

Uz neke modifikatore, ovo rezervirano mjesto poprima određeno značenje. U slučaju modifikatora "userinfo", vraća odgovarajuću vrijednost iz informacija o trenutnom korisniku:

[+phx:userinfo=`korisničko ime`+]

poznati problemi

Sintaksa

Ovo se čini logičnim, ali vrijedi se usredotočiti na to. Izbjegavajte korištenje sljedećih konstrukcija u predlošku osim ako nisu dio MODx oznake:

[+
[*
[(
+]
*]
)]
]]

Parser će ih pokušati obraditi i MODx će izbaciti pogrešku. Obično se ovaj problem ne pojavljuje. Ali u slučaju JavaScripta, možda imate konstrukciju sličnu ovoj:

Niz

Što će izazvati čudno ponašanje zbog +]. Također i završna oznaka CDATA:

/* ]]> */

Može stvoriti probleme.

Imajte na umu da ne možete izgubiti podatke svoje web stranice korištenjem netočne PHx sintakse. Najgore što se može dogoditi je da se vaš predložak neće ispravno prikazati.

Žice

lcase

ucase

Pretvara sve znakove u nizu u velika slova.

[+string:ucase+]

Na ulazu:

Ovo je niz

OVO JE NIZA

ucprvo

Prvo slovo u retku postat će veliko.

[+string:ucfirst+]

Na ulazu:

duljina | leća

Vraća duljinu niza.

Na ulazu:

Ovo je niz

oznake

Izrezat će sve HTML oznake iz niza.

[+string:notags+]

Na ulazu:

Ovaj je a niz

Ovo je niz

esc

Uklanja html oznake i prijelome redaka

htmlent

Pretvara izvornu varijablu u html entitet. Analogno htmlentities() u PHP-u.

nl2br

Pretvara znakove novog retka u oznake.

[+string:nl2br+]

Na ulazu:

Ovo je
žica

Ovo je
žica

traka

Uklanja znakove novog retka (\n), tabulatore (\t) i uzastopne razmake.

[+string:strip+]

Na ulazu:

Ovo je
a
niz

Ovo je niz

Ostali modifikatori

obrnuti

Okreće slova unatrag.

omot riječi

Rastavlja riječi u trenutnoj vrijednosti duže od zadane duljine znakova stavljanjem razmaka između.

Zadano: 70 znakova.

Prelom riječi (=`duljina`)

duljina - znakova

ograničiti

Vraća prvih X znakova od trenutne vrijednosti.

Zadano: 100 znakova.

ograničenje (=`duljina`)

Posebna

datum

Pretvara unix vremensku oznaku da odgovara navedenom formatu.

datum(=`format datuma`)

dateformat: Prema formatu PHP funkcije strftime

[*createdon:date=`%d.%m.%Y`*]

Kako bi datum bio prikazan u skladu s trenutnim jezikom stranice, morate postaviti lokalizaciju na početku koda dodatka PHx. Primjer u nastavku za njemački:

setlocale(LC_ALL, "de_DE@euro", "de_DE", "de", "ge");

md5

Stvara MD5 raspršivanje trenutne vrijednosti.

korisničke informacije

Polja koja se koriste u MODx bazi podataka iz tablice user_attributes (na primjer: korisničko ime, korisnička e-pošta).

Korisničke informacije=`polje`

  • cachepwd: Lozinka za predmemoriju
  • komentar: Komentar
  • zemlja: Zemlja
  • dob: Datum rođenja u UNIX vremenskom formatu
  • elektronička pošta: E-pošta
  • faks: faks
  • puno ime: Puno ime
  • spol: Kat
  • interniKljuč: Korisnički interni ključ
  • zadnja prijava: Zadnja prijava, u UNIX formatu vremena
  • logincount: Broj prijava
  • mobitel: Mobitel
  • lozinka: Lozinka
  • telefon: Telefon
  • fotografija: Fotografija
  • uloga: Uloga
  • država: Status
  • thislogin: Ova prijava, u UNIX formatu vremena
  • Korisničko ime: Prijaviti se
  • zip: poštanski broj

matematika

Koristite izračune poput - * + /.

Matematika=`izračun`

"?" simbol se zamjenjuje trenutnom vrijednošću proširenja, ali također možete koristiti ugniježđene oznake.

Primjer izračuna: ?+1+(2+3)+4/5*6

ako je prazan

Koristite "drugu vrijednost" ako je vrijednost rezerviranog mjesta/predloška prazna.

Ifempty=`druga vrijednost`

Izaberi

Uzima vrijednost ovisno o vrijednostima rezerviranog mjesta/predloška.

Odaberite=`opcije`

parametri: vrijednost1=izlaz1&vrijednost2=izlaz2

Na ulazu: 1

[+placeholder:select=`0=OFF&1=ON&2=UNKNOWN`+]

Povratak: ON

Uvjetni izrazi

je

ne

alias: nije, nije

nije jednako (!=)

npr

veće ili jednako (>=)

el

manje ili jednako (<=)

GT

više (>)

lt

manje (<)

mo=`Web-grupe`

sinonimi (aliasi): isinrole, ir, memberof

Uzima popis web grupa odvojenih zarezima kao parametar i vraća true/false ovisno o tome pripada li trenutni korisnik bilo kojoj od tih grupa ili ne (zamjenjuje modifikator "uloga", koji je morao biti kombiniran s uvjetnim operatorom).

[+phx:mo=`myWebgroup`:then=`Ja sam član`:else=`Ja NISAM član`+]

if =`vrijednost`

Uzima varijablu usporedbe kao parametar. Može se koristiti i u kombinaciji s :ili ili :i.

[+phx:if=`[+price+]`:gt=`0`:then=`Cijena: [+cijena+]`+]

ili

Logičko ILI (provjerava je li prvi ili drugi uvjet istinit).

[+phx:if=`[*id*]`:is=`2`:or:is=`3`:then=`((Chunk))`:else=`((OtherChunk))`+]

U ovom primjeru, ako je trenutni ID 2 ili 3, tada se prikazuje komad ((Chunk)), inače se prikazuje komad ((OtherChunk)).

i

Logički I (provjerava jesu li oba uvjeta istinita).

[+phx:if=`[!UltimateParent!]`:is=`1`:and:isnot=`[*id*]`:then=`((ChildChunk))`:else=`((ParentChunk)) `+]

U ovom primjeru, ako je UltimateParent jednak 1, a nije jednak trenutnom ID-u, tada se prikazuje blok ((ChildChunk)), inače se prikazuje blok ((ParentChunk)).

zatim =`predložak`

Značenje šablona prikazuje se kada su svi uvjeti istiniti. Ovdje možete navesti poziv ((chunk)), [[isječak]] ili čisti HTML.

else =`predložak`

Značenje šablona se prikazuje kada uvjeti nisu istiniti. Ovdje možete navesti poziv ((chunk)), [[isječak]] ili čisti HTML.

pokazati

Koristi se na sličan način zatim, ali kao izlazni predložak koristi se izvorna vrijednost. Izvršava se ako su uvjeti istiniti.

[+myplaceholder:len:gt=`3`:show+]

U ovom primjeru, vrijednost rezerviranog mjesta bit će prikazana ako je njegova duljina veća od 3 znaka.

Prilagođeni modifikatori

Modifikator je jednostavan isječak koji obrađuje zadanu vrijednost. Moguće je izraditi vlastite modifikatore/mini-isječke dodavanjem novog isječka u MODx upravitelj resursa ili stvaranjem datoteke u mapi modifikatora PHx dodatka.

Budući da je kod modifikatora jednostavan, ne trebaju mu nikakvi parametri, osim onih koje dobiva od parsera.

Dvije su glavne varijable:

$izlaz- sadrži trenutnu vrijednost varijable koju je potrebno modificirati.
$opcije- izborni parametar, čija se vrijednost prosljeđuje modifikatoru.

Primjer.

Navedimo nekoliko primjera korištenja modifikatora. Recimo da rezervirano mjesto myplaceholder ima značenje "test":

[+myplaceholder:mymodifier+]

Varijabla $output sadrži vrijednost "test".
Varijabla $options ne sadrži ništa, jer nijedan parametar nije proslijeđen modifikatoru.

[+myplaceholder:mymodifier=`moje opcije`+]

Varijabla $output još uvijek sadrži vrijednost "test".
Varijabla $options sada sadrži vrijednost "my options"

Ostale varijable (za napredne korisnike)

$input - sadrži originalnu neizmijenjenu vrijednost.
$uvjet je niz koji sadrži elemente koji tvore uvjetni izraz (0, 1, || i &&).

Stvaranje vlastitog modifikatora

Primjer 1: Volim MODx

Koristeći stečeno znanje, izradit ćemo novi prilagođeni modifikator. Ovo će biti modifikator bez parametara koji će jednostavno dodati tekst "zato što volim MODx" varijabli. Da biste to učinili, morate poduzeti sljedeće korake:

1. U upravitelju resursima idite na Resursi (Elementi) -> Upravljanje resursima (Elementi) -> Isječci

2. Kliknite "Novi isječak"

phx: ljubav"

Da bi se isječak percipirao kao modifikator za PHx, njegovo ime mora imati prefiks "phx:" bez razmaka između njega i samog naziva isječka. Zatim ga možete koristiti kao modifikator dodavanjem: ljubav bilo kojem rezerviranom mjestu, na primjer: [+moje mjesto:ljubav+].

4. Sada dodajmo modifikacijski kod u polje koda. Recimo da je ovo kod kao ovaj:

5. Spremite promjene i naš novi modifikator ( :ljubav) spremno za uporabu!

Primjer 2: Još više volim MODx

Kreirajmo modifikator sličan modifikatoru :ljubav iz prethodnog primjera, ali ćemo mu dodatno dati mogućnost dodavanja izvornom nizu vrijednosti proslijeđenog parametra, ako je naveden.

1. U upravitelju resursima idite na Resursi (Elementi) -> Upravljanje resursima (Elementi) -> Isječci

2. Kliknite "Novi isječak"

3. Postavite naziv isječka na " phx:ljubav2"

Da bi se isječak percipirao kao modifikator za PHx, njegovo ime mora imati prefiks " phx:" bez razmaka između njega i samog naziva isječka. Tada ga možete koristiti kao modifikator dodavanjem: ljubav bilo kojem rezerviranom mjestu, na primjer: [+myplaceholder:love2+] .

ChunkGood.

Ostali primjeri

[+myplaceholder:gt=`1`:then=`Da`:else=`Ne`+]
[+myplaceholder:lt=`3`:and:gt=`1`:then=`Da`:else=`Ne`+]
[+myplaceholder:lt=`[+someplaceholder+]`:then=`Da`:else=`Ne`+]
[+myplaceholder:islt=`2`:then=`Da`:else=`Ne`+]
[+myplaceholder:isnot=`2`:or:lt=`3`:then=`Da`:else=`Ne`+]

Svi primjeri će biti vraćeni Da.

[+myplaceholder:isnot=`2`:then=`Da`:else=`Ne`+]
[+myplaceholder:gt=`[+someplaceholder+]`:then=`Da`:else=`Ne`+]
[+myplaceholder:lt=`2`:then=`Da`:else=`Ne`+]
[+myplaceholder:gt=`2`:then=`Da`:else=`Ne`+]
[+myplaceholder:lt=`1`:then=`Da`:else=`Ne`+]

Svi primjeri će biti vraćeni Ne.

MODx ima ugrađenu sintaksu za korištenje if else konstrukcija.

Modifikatori izlaza

Tablica prikazuje neke modifikatore i primjere njihove upotrebe. U primjerima, modifikatori se primjenjuju na rezervirana mjesta, ali trebali biste zapamtiti da se mogu primijeniti na bilo koje MODX oznake. Provjerite daje li oznaka koju koristite barem nešto što će modifikator obraditi.

Modifikatori uvjetnog izlaza

Modifikator Opis Primjer upotrebe
ako, unos if - postavlja dodatni uvjet input - dodaje obrađene podatke u oznaku
ili Kombiniranje više modifikatora korištenjem ILI veze

[ [*id:is=`5`:or:is=`6`:then=`broj 5 ili 6`:else=`drugi broj`]]

i Kombiniranje više modifikatora s odnosom I

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

isequalto, isequal, jednako, jednako, is, eq Uspoređuje prenesenu vrijednost sa postavljenom vrijednošću. Ako se vrijednosti podudaraju, prikazuje se vrijednost "tada", ako ne - "drugo"

[ [*id:is=`5`:then=`broj 5`:else=`broj nije 5`]]

notequalto, notequals, isnt, isnot, neq, ne Uspoređuje prenesenu vrijednost sa postavljenom vrijednošću. Ako se vrijednosti NE podudaraju, prikazuje se vrijednost "then", ako ne - "else"

[ [*id:isnot=`5`:then=`broj nije 5`:else=`očigledno broj 5`]]

veće odjednako, jednako ilivećeonda, ge, npr. isgte, gte Isto, samo je uvjet "Veće od ili jednako"

[ [*id:gte=`5`:then=`broj 5 ili više`:else=`manje od broja 5`]]

jeveći od, veći od, isgt, gt Isto, samo uvjet “Strogo više”

[ [*id:gt=`5`:then=`broj veći od pet`:else=`broj 5 ili manji`]]

jednakoilimanjeod, manjeodjednako, el, le, islte, lte Isto, samo je uvjet "Manje od ili jednako"

[ [*id:lte=`5`:then=`broj 5 ili manje`:else=`veće od broja 5`]]

je niži od, manji je od, niži od, manji od, islt, lt Isto, samo uvjet “Strogo manje”

[ [*id:lte=`5`:then=`broj je definitivno manji od 5`:else=`broj je 5 ili više`]]

sakriti Skriva element ako je uvjet istinit

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

pokazati Prikazuje element ako je uvjet istinit

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

zatim Koristi se za stvaranje uvjeta

[ [*id:gt=`0`:then=`Knjige na stanju!`]]

drugo Koristi se za stvaranje uvjeta (zajedno s "tada")

[ [*id:gt=`0`:then=`Knjige na zalihi!`:else=`Žao nam je, ali sve je rasprodano.`]]

Izaberi Postavite svoju vrijednost, ovisno o izlazu modifikatora i oznake. Također možete koristiti "else", na primjer, ako vrijednost [ [+controls]] ne odgovara uzorku odabira

[ [+controls:select=`0=OFF&1=ON&2=HZ`:else=`Greška`]]

memberof, ismember, mo Provjerava je li korisnik član navedene korisničke grupe

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

Filtri se također mogu koristiti za izmjenu izlaza isječaka. Filtar mora biti naveden prije svih parametara (ispred upitnika):

Također, kako biste mogli koristiti ugniježđene strukture, možete koristiti dodatni paket, koji ima kratak i jezgrovit naziv If. Možete ga preuzeti tako da odete na System->Package Management.

Ovako će izgledati šifra uvjeta:

[ [!Ako? &subject=`[ [+total]]` &operator=`GT` &operand=`3` &then=`Imate više od 3 stavke!`]]

Ako su parametri paketa:

subjekt- Parametar po kojem su uvjeti ispunjeni.

operater- Operator usporedbe sa subjektom

operand- Koristi se po potrebi i predstavlja vrijednost subjekta pomoću operatora.

zatim- Kod koji se prikazuje ako se uvjet ocijeni istinitim

drugo- Kod koji se prikazuje ako se uvjet ocijeni netočnim

debug- Ako je istina, prikazat će sve proslijeđene parametre

umrijeti- Ako je otklanjanje pogrešaka (debag) uspješno i odgovara vrijednosti true, tada nakon ispisivanja parametara upotrijebite funkciju die().

Mogućnosti

Ime Opis Zadano
subjekt Parametar kojim su ispunjeni uvjeti.
operater Operator usporedbe sa subjektom =
operand Koristi se prema potrebi i predstavlja značenje subjekt (predmet usporedbe) koristeći operater (operator usporedbe).
zatim pravi
drugo Kod koji se prikazuje ako uvjet uzme vrijednost lažno
debug Ako je istina , prikazat će sve proslijeđene parametre 0
umrijeti Ako debug ( debag ) uspješno prošao i odgovara vrijednosti pravi , zatim nakon ispisivanja parametara primijenite funkciju umrijeti() . 0

Operateri:

Ime: Opis:
!=,neq,nije,nije,nije,nejednako,nijejednako Provjerava je li subjekt nije jednak navedenoj vrijednosti operand
==,=,eq,je,jednako,jednako,jednako Provjerava je li subjekt jednak navedenoj vrijednosti operand
< ,lt,less,lessthan Provjerite je li subjekt manje od navedene vrijednosti operand
> ,gt,veće,veće od Provjerava je li subjekt veća od navedene vrijednosti operand
< =,lte,lessthanequals,lessthanorequalto Provjerava je li subjekt manja ili jednaka navedenoj vrijednosti operand
> =,gte,većenegojednako,većenegojednako Provjerava je li subjekt veća ili jednaka navedenoj vrijednosti operand
prazan je, prazan Provjerava je li subjekt ima praznu vrijednost
!prazno,neprijatno,nijeprijazno Provjerava je li subjekt ima ikakvo značenje
je nula, nula Provjerava je li subjekt nula
inarray,in_array,ia Provjerava je li predmet pronađen na popisu operanda (niz odvojen zarezom)

Da, još jedan način implementacije Ajax filtera na web stranicu =)

Počnimo s jednostavnim prikazom uobičajenog popisa resursa na stranici. Budite sigurni da AJAX paginacija radi ispravno, jer nećemo pisati vlastite mehanizme za rad s AJAX-om, već ćemo koristiti AJAX metode koje se nalaze u pdoPage-u.

("!pdoPage" | isječak: [ "ajaxMode" => "default", "parents" => 0, "limit" => 3, "includeTVs" => "height,weight,speed_type,price", "tvPrefix" => "", "tpl" => "@INLINE

($pagetitle)

Težina: ($težina)

Visina: ($visina)

Vrsta: ($speed_type)

", ]}
("page.nav" | rezervirano mjesto)

Za filtere ću koristiti ovaj izgled. Ali izgled ovdje ne igra posebnu ulogu - glavna stvar je navesti ispravne klase u JS kodu.


JS kod za obradu filtra izgleda otprilike ovako:

$(document).on("change keyup", "#filters input", function())( // Provjerite je li pdoPage povezan if (typeof(pdoPage) == "undefined") return; // Prikupite vrijednosti ​svih filtara u jednom nizu var fields = (); $.each($("#filters").serializeArray(), function())( // Ako parametar nije niz (potvrdni okvir), tada je sve jednostavno if (this.name.indexOf( "")<= 0) { fields = this.value; } else { // Для чекбоксов посложнее var name = this.name.replace("",""); if (typeof(fields) == "undefined") { fields = ; } fields.push(this.value); } }); // И отправляем этот массив на сервер. $.post(document.location.href, { action: "filter", fields: fields, // Параметр hash - обязательный (он содержит настройки pdoPage) hash: pdoPage.configs.page.hash }, function(data) { // Просим pdoPage загрузить новый список ресурсов var tmp = document.location.href.split("?"); pdoPage.keys.page = 0; pdoPage.loadPage(tmp, pdoPage.configs.page); }); });
Već sada, prilikom promjene vrijednosti filtera, popis resursa će se ažurirati. Sada preostaje samo "objasniti" kako se obrađuju filtri. Da biste to učinili, izradite dodatak za događaj OnHandleRequest:

kontekst->ključ == "mgr" || prazno($_SERVER["HTTP_X_REQUESTED_WITH"]) || $_SERVER["HTTP_X_REQUESTED_WITH"] != "XMLHttpRequest") povratak; switch ($_POST["action"]) ( case "filter": $output = array("success" => false, "message" => ""); // Provjerite je li hash primljen i pdoPage parametri postoji ako ( isset($_POST["hash"]) && !empty($_POST["hash"]) && isset($_SESSION["pdoPage"][$_POST["hash"]]) && !empty($ _SESSION[" pdoPage"][$_POST["hash"]])) ( $hash = (string) $_POST["hash"]; // Navedite samo TV-e dostupne za filtriranje $tvs = array("height"," weight" ,"speed_type"); // Ispunite uvjet odabira $where = array(); foreach ($tvs as $tv) ( switch ($tv) ( case "price": // Primjer obrade potvrdnih okvira if ( isset($_POST[ "fields"]["price"]) && !empty($_POST["fields"]["price"])) ( $where_price = ; foreach ($_POST["fields"]["price) "] kao $range ) ( $value = explode("-", $range); if (count($value) != 2) ( continue; ) $min = (int) $value; $max = (int) $value; $where_range = "CAST(`TVprice`.`value` AS DECIMAL(13,3)) >= " . $min; if ($max) ( $where_range .= " AND CAST(`TVprice`.` vrijednost` KAO DECIMALNO (13.3))<= " . $max; } $where_price = "(" . $where_range . ")"; } $where = "(" . implode(" OR ", $where_price) . ")"; } break; default: if (isset($_POST["fields"][$tv]) && $_POST["fields"][$tv] !== "") { $where[$tv] = $_POST["fields"][$tv]; } break; } } // Добавляем это условие в параметры pdoPage "на лету" $_SESSION["pdoPage"][$hash]["where"] = $where; $output["message"] = $where; $output["success"] = true; } else { $output["message"] = "Error"; } echo $modx->toJSON($izlaz); umrijeti(); pauza; zadano: break; )
Sada naši filteri rade. Jedina stvar je što pdoPage "ne zna" što prikazati kada nema rezultata. Da bismo uzeli u obzir ovaj slučaj, stvorimo datoteku pdopage.custom.js i navedite ga u parametru frontend_js:

("!pdoPage" | isječak: [ "ajaxMode" => "default", "frontend_js" => "/assets/components/pdotools/js/pdopage.custom.js", "parents" => 0, "limit" => 3, // ... )
U standardni kod ćemo dodati samo uvjet drugo u slučaju da je odgovor poslužitelja prazan:

// ... pdoPage.loadPage = funkcija (href, config, mode) ( // ... $.post(config["connectorUrl"], parametri, funkcija (odgovor) ( if (odgovor && odgovor["total" ]) ( // ... ) else ( // Dodaj uvjet else wrapper.find(rows).html("Ništa nije pronađeno"); wrapper.find(pagination).html(""); wrapper.removeClass(" učitavanje"); wrapper.css((opacity: 1)); if (config["mode"] == "default") ( $("html, body").animate((scrollTop: wrapper.position(). vrh - 50 || 0), 0); ) ) ), "json"); ); // ...
Ovo dovršava jednostavan AJAX filter.

Dobro zdravlje svima. U ovom članku ću vam reći kako napraviti filtar dokumenata na temelju TV parametara na web stranici koja pokreće Modx Revolution. Koristit ćemo isječak tagManager2 iz Andchir. Ovaj isječak može raditi s nekoliko TV-a odjednom, kao i s numeričkim podacima (u obliku cijene) i višestrukim popisom. Detaljnije ćemo analizirati svaki od ovih primjera.

1. Prvo morate instalirati tagManager2

Da bismo to učinili idemo na Aplikacije/Instalater/

pritisni gumb "Preuzmi dodatak" i unesite u traku za pretraživanje tagManager2

Još uvijek trebate instalirati isječak getPage i getProducts. Tako odjeljak "Upravljanje paketima" trebao bi izgledati ovako (translit isječak je, usput, odgovoran za transliteraciju aliasa u latinicu)

Preuzmite, instalirajte pakete i idite na "Postavke sustava"

2. Postavite isječak tagManager2

U postavkama sustava odaberite odjeljak tag_manager2

Vidjet ćemo opcije postavki filtera

Sve je vrlo jednostavno i jasno, ali ipak:

  • U "ID resursa direktorija najviše razine" navedite ID predloška kataloga ili kategorije u kojoj će se proizvodi ili stranice filtrirati
  • U "Dodatni višestruki razdjelnik popisa" stavite znak #. U nastavku ćete saznati zašto je to potrebno
  • U "TV ili više naziva polja popisa" registrirajte TV s višestrukim popisom. U nastavku ću vam pokazati kako ih izraditi.
  • "Imena TV-a ili polja s numeričkim vrijednostima"- ovdje morate navesti TV parametre koji će sadržavati brojeve. To je obično parametar cijene. Ovaj filtar bit će prikazan kao klizač "od i do"
  • U “ID-ovi predložaka proizvoda” zapisujemo id stranice koje je potrebno filtrirati i na koje su priloženi gore navedeni TV parametri
  • U "Naziv skupa parametara koji se koristi za filtriranje" registrirajte filtere_kataloga. Koristit ćemo ovaj predložak u predlošcima parametara getPage I getProducts
  • Registrirajte se “Isječak povezan sa skupom parametara” naziv isječka koji će prikazati i paginirati stranice ili proizvode. Obično ovo getPage.

3. Napravite skup parametara catalog_filters u getPage

Idemo na getPage isječak

Idi na karticu "Opcije" i pritisnite tipku "Dodaj skup parametara". Možete, naravno, urediti postojeći, ali tada postoji mogućnost da prebrišete parametre koje ćemo sada stvoriti prilikom ažuriranja getPage. Ako nećete ažurirati, možete samo urediti.

Uredite postojeće parametre i dodijelite vrijednosti:

Stvorite nove parametre i dodijelite vrijednosti

Uređeni parametri bit će prikazani zelenom bojom, kreirani parametri bit će prikazani ljubičastom bojom

4. Napravite ili uredite TV parametre za filtar

Na primjer, stvorio sam 3 TV parametra

Želio bih skrenuti posebnu pozornost na činjenicu da trebate navesti naziv (naslov) TV parametra, inače se možda jednostavno neće prikazati u modulu za kontrolu filtra

​5.Stvorite dio filtr_tpl

Ovaj dio je odgovoran za izlaz svakog pojedinačnog rezultata u getProducts

6. Napravite strukturu u stablu dokumenta

Kod mene to izgleda ovako:

Naša glavna stranica ima ID 1, a proizvodi imaju predložak ID 1 (ovo imamo u postavkama tag_manager2, ako imate druge vrijednosti, ne zaboravite to promijeniti u postavkama)

7. Uredite filters.js

Idemo na adresu /assets/components/tag_manager2/js/web/filters.js a umjesto toga

Više oznaka: ["oznake"],//Dodatna imena. polja s više vrijednosti

umetnite kod s našim zamijenjenim vrijednostima

Više oznaka: ["filtr1", "filtr2"],//Dodatna imena. polja s više vrijednosti

Ovdje je sve vrlo jednostavno i jasno. Umetnuli smo naša tv polja s više vrijednosti. Općenito, ovo je konfiguracija svih postavki (ali bolje ih je ne dirati bez dopuštenja velikih momaka, mislim na savjete kreatora modula)

8. Prikažite filtar i rezultate filtriranja

Sam filter

[]
[[+filtri]]

Prikaz rezultata s paginacijom

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

Razvrstavanje rezultata

9. Aktivirajte filter

Sada samo trebamo aktivirati naš filter. Da bismo to učinili idemo na Upravljanje aplikacijama/filtrima.

Ovdje morate označiti okvire pored svakog filtera i kliknuti gumb"Uštedjeti" .

Ako ste sve napravili kako treba, filtar bi trebao raditi. To je sve. Ako imate pitanja, pitajte u komentarima, pokušat ću odgovoriti. Općenito, ovdje je dokumentacija za tagManager2. Sretno u razvoju. U "Demo" jedna od mojih web stranica koja implementira filtar pomoću tagManager2