Filtrele îmbunătățesc foarte mult confortul de gestionare a listei de intrări din panoul de administrare.
În total, vom adăuga trei filtre:
Vă voi arăta, de asemenea, cum vă puteți crea cu ușurință propriile filtre utilizând clasa JHtml.
Modificați modelul listei de mesaje
Deci, deschideți fișierul admin / models / helloworlds.php și începeți să faceți modificări.
Selecția datelor pentru formarea listei are loc în metoda getListQuery (). Să vedem cum sa schimbat:
Mai întâi, utilizând metoda escape (), evităm caractere speciale precum "%" care pot fi conținute în interogarea de căutare. Apoi, cuprindem interogarea în ghilimele, dar noi nu re-ecran, trecând al doilea argument la false în metoda quote ().
Valorile filtrelor obținute de la starea modelului. Prin urmare, trebuie să adăugați primirea acestor valori în metoda populateState ():
Aici găsim și setăm valorile filtrelor noastre. Procedând astfel, vom folosi metoda getUserStateFromRequest (). care este disponibil pentru noi de la clasa părinte JModelList. Această metodă obține valoarea variabilei de stare a utilizatorului (sesiune) și resetează această valoare dacă se modifică. Pentru ca valorile din starea utilizatorului să fie unice între diferitele componente, folosim proprietatea context $ this-> din clasa JModel părinte. care este setat în constructorul său.
Ca rezultat, obținem efectul memorării valorii filtrelor. Cel mai probabil, ați acordat atenție acestui lucru când lucrați cu Joomla - filtrele sunt salvate atunci când se deplasează între componente până când ieșiți din panoul de administrare. Numai utilizatorul și, în consecință, filtrele sunt resetate la zero.
De asemenea, trebuie să adăugăm metoda getStoreId ():
Această metodă este utilizată pentru stocarea în memoria cache a datelor. În acesta, luăm în considerare starea actuală a filtrelor, care este necesară pentru a genera un id unic de magazin. Este utilizat universal în clasa parentală JModelList. unde este cheia în proprietatea $ array cache.
Schimbăm ajutorul
Modificați prezentarea listei de mesaje
Deoarece acum avem un filtru de stare a mesajului, putem schimba logica pentru ștergerea mesajelor. Mai întâi le vom pune în coșul de gunoi și numai acele mesaje care au fost deja plasate în coșul de gunoi pot fi șterse. Pentru aceasta, schimbați puțin metoda addToolBar ():
Acum, când valoarea filtrului de stare este -2 (în coș), vom vedea butonul "Goliți coșul de gunoi". În caz contrar, va fi afișat butonul "Adăugați în coș".
Modificați șabloanele listei de mesaje
Mai întâi, modificați template-ul principal admin / views / helloworlds / tmpl / default.php și adăugați filtre la el:
Vedem că toate listele sunt construite folosind clasa JHtml. În principiu, întreaga idee este să obțineți o serie de opțiuni pentru lista drop-down folosind JHtml. La sfârșitul acestei părți, vă voi arăta cum să creați propriile filtre utilizând această clasă.
Valorile curente ale filtrelor sunt luate din starea modelului. De asemenea, aș dori să rețin că orice modificare a filtrelor are ca rezultat trimiterea formularului utilizând acest.form.submit ().
Și în sub-template-ul admin / views / helloworlds / tmpl / default_foot.php creștem valoarea colspan:
În final, veți obține această imagine:
Schimbați controlerul de mesaje
Deschideți fișierul admin / controller / helloworld.php și faceți o mică modificare a metodei allowAdd () - schimbați linia
Aici am adăugat valoarea implicită, care este luată din filtru.
Modificați fișierul de formular
În fișierul de formă, trebuie să adăugați două valori de stare:
Deschideți admin / models / forms / helloworld.xml și adăugați aceste două valori în câmpul de stare:
Adăugarea de constante de limbă
Deschideți fișierul admin / language / en-GB / en-GB.com_helloworld.ini și adăugați:
COM_HELLOWORLD_FILTER_SEARCH_DESC = "Puteți căuta prin orice text în salut."
COM_HELLOWORLD_N_ITEMS_ARCHIVED_1 = "Un mesaj arhivat"
COM_HELLOWORLD_N_ITEMS_ARCHIVED = "Mesaje arhivate"
COM_HELLOWORLD_N_ITEMS_TRASHED_1 = "Un mesaj trashed"
COM_HELLOWORLD_N_ITEMS_TRASHED = "Mesaje trashed"
Deschideți fișierul admin / language / en-RU / en-RU.com_helloworld.ini și adăugați:
COM_HELLOWORLD_FILTER_SEARCH_DESC = "Puteți căuta orice text în salut."
COM_HELLOWORLD_N_ITEMS_ARCHIVED_1 = "1 mesaj postat în arhivă"
COM_HELLOWORLD_N_ITEMS_ARCHIVED_2 = "Mesaje postate în Arhiva"
COM_HELLOWORLD_N_ITEMS_ARCHIVED_MORE = "Mesaje postate în Arhiva"
COM_HELLOWORLD_N_ITEMS_TRASHED_1 = "1 mesaj este în Coșul de gunoi"
COM_HELLOWORLD_N_ITEMS_TRASHED_2 = "Mesajul este în Coșul de gunoi"
COM_HELLOWORLD_N_ITEMS_TRASHED_MORE = "Mesaje postate în Coșul de gunoi"
Colectăm pachetul de instalare al componentei
Nu uitați să schimbați numărul versiunii în fișierul helloworld.xml:
Conținutul directorului cu codul:
Împachetați directorul într-un fișier de arhivă (zip, tar, tar.gz, bz2) sau descărcați-l direct de la GitHub. Apoi, instalați-l utilizând managerul de extensii Joomla. Filtrele acum au apărut în lista de înregistrări.
Cod pentru această parte
Creați propriile filtre utilizând clasa JHtml
Este destul de ușor să creați propriile filtre cu JHtml. Să ne imaginăm că Joomla nu are un filtru de stare încorporat, așa că trebuie să ne creăm propriul.
Primul lucru pe care trebuie să-l faceți este să indicați clasa JHtml. unde să căutăm fișiere în care sunt definite funcțiile noastre de lucru cu filtrele. Aceasta se face folosind metoda addIncludePath (). Să presupunem că stocăm aceste fișiere în directorul / admin / helpers / html. apoi la punctul de intrare /admin/helloworld.php adăugăm:
Apoi, creați în acest dosar fișierul filters.php cu următorul conținut:
Acum putem înlocui linia
Totul funcționează la fel cum am folosit filtrul de stare Joomla încorporat.
Dar JHtml stabilește că este necesar pentru a apela un stateOptions (metoda) HelloWorldHtmlFilters clasa de fișier filters.php. Cred că deja ați ghicit că răspunsul se află în cheia "helloworldhtml.filters.stateOptions". care JHtml analizează în următoarele componente:
- primul segment este prefixul clasei, iar dacă nu este specificat, atunci JHtml;
- Al doilea segment este numele fișierului
- Cel de-al treilea segment este metoda de clasă
În acest caz, pentru a obține numele clasei, JHtml combină primul și al doilea segment. Astfel, cunoscând cheia, puteți găsi cu ușurință disponibile în clasele Joomla care lucrează nu numai cu filtre, dar cu elemente diferite, cum ar fi „data“, „slidere“, etc. De exemplu, vom folosi cheia în „select.options“ filtrele vor duce la bibliotecile de fișiere / joomla / html / html / select.php unde puteți găsi clasa JHtmlSelect și opțiuni pentru metoda ().
Dar, putem merge mai departe și putem crea un întreg filtru selectat, și nu doar o serie de opțiuni:
Acum putem înlocui linia
la o versiune mai simplă
Cu toate acestea, JHtml nu este nimic mai mult decât un ambalaj frumos pentru a apela metode statice. Nimeni nu interzice la punctul de intrare să înregistreze un ajutor în autoloader:
Și apoi ieșiți filtrul astfel:
Nu știu ce opțiune preferați, dar personal prefer să folosesc JHtml.