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 = "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]]
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
- Preuzmite i raspakirajte arhivu.
Ažuriraj
- Preuzmite i raspakirajte arhivu.
- Preimenujte direktorij /assets/plugins/phx u /assets/plugins/phx-old
- Napravite direktorij "phx" u mapi /assets/plugins.
- Prenesite putem FTP-a ili jednostavno kopirajte sadržaj arhive u /assets/plugins/phx
- Napravite novi dodatak "PHx" na upravljačkoj ploči MODx (Elements - Element Management - Plugins) i kopirajte sadržaj datoteke phx.plugin.txt u njega
- 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.
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
[]Prikaz rezultata s paginacijom
- [[!+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