Mura CMS vă oferă posibilitatea de a vă crea propriile funcții personalizate, direct de la nivelul temelor. Acest articol vă va arăta cum vă puteți îmbunătăți temele, creând metode personalizate reutilizabile care pot fi utilizate atât în șabloanele de layout, cât și în cele ale administratorilor.
Atunci când dezvoltați teme, este posibil să aveți o serie de "obiecte" pe care doriți să le afișați din nou și din nou, cum ar fi prezentări de diapozitive, blocuri de detaliu etc..
În tutorialul Extensii de clasă, ne-am referit la modul de creare a atributelor personalizate pentru o carte și le afișăm pe pagină utilizând o componentă. Iată componenta finală pe care am creat-o:
Detalii
Autor: [M] $. Conținutul ( 'bookAuthor') [/ m]
Data eliberării: [M] Dateformat ($. Conținutul ( 'bookReleaseDate'), 'dd / mm / yy') [/ m]
ISBN: [M] $. Conținutul ( 'bookISBN') [/ m]
Condiție: [M] $. Conținutul ( 'bookNewUsed') [/ m]
Preț: $ [M] $. Conținutul ( 'bookPrice') [/ m]
Acest lucru a funcționat bine pentru exemplul nostru, dar există câteva dezavantaje:
O modalitate prin care putem rezolva aceste probleme este de a crea o metodă personalizată în tema noastră care va afișa detaliile cărții ori de câte ori este utilizată.
Metodele de afișare din Mura sunt situate într-un fișier numit contentRenderer.cfc. Acum, acest fișier există în două locații din site-ul dvs.:
Este important să înțelegeți asta ambii fișierele vor face metode în site-ul dvs., cu toate acestea, nivel de temă contentRenderer.cfc va adăuga orice metodă care nu există la nivelul sitului și va înlocui orice metodă care există deja la nivelul site-ului.
Un alt lucru important de luat în considerare este că, atunci când faci o dezvoltare a temelor, orice lucrare realizată deasupra directorului temă nu va fi distribuită cu tema. Dacă intenționați să creați teme pentru distribuție, vă recomandăm să păstrați întregul cod personalizat la nivel de temă.
În directorul tematic, deschideți contentRenderer.cfc fişier
Notă: dacă vă construiți tema de la zero și nu aveți deja fișierul, continuați și adăugați contentRenderer.cfc de la tema MuraBootstrap3 atașată la acest articol.
În acest fișier, vom crea o nouă funcție numită dspBookDetails
:
Acum, ori de câte ori numim această funcție, Mura va executa orice în interiorul ei. În momentul de față, nu există nimic pentru Mura să facă sau să afișeze, până când specificăm că vrem ca funcția să returneze ceva. Să adăugăm o variabilă pentru a stoca conținutul nostru pentru a reveni la această funcție:
Acum puteți vedea că creăm o variabilă pentru a stoca întregul conținut și logica noastră (
), apoi spunând funcției să returneze acea variabilă la pagină (
).
Acum suntem gata să adăugăm conținutul actual al cărții, similar cu modul în care am avut componenta:
Detalii
Autor: # $. Conținutul ( 'bookAuthor') #
Data eliberării: #dateFormat ($. Conținutul ( 'bookReleaseDate'), 'dd / mm / yy') #
ISBN: # $. Conținutul ( 'bookISBN') #
Condiție: # $. Conținutul ( 'bookNewUsed') #
Preț: $ # $. Conținutul ( 'bookPrice') #
Notă: am înlocuit [M]
etichete cu hashtags (#
) pentru că suntem într-un fișier de cod. [M]
etichetele pot fi utilizate numai în editorii din zona de administrare.
Acum, că avem funcția creată în contentRenderer.cfc, o putem numi folosind Mura Scope. Reveniți la componentă și înlocuiți conținutul cu următoarea linie:
[M] $. DspBookDetails () [/ m]
Notă: Împachetăm funcția într-o Când publicați componenta și reîncărcați pagina de carte, ar trebui să vedeți detaliile cărții identice cu cele de mai sus: În plus față de apelarea funcției de la o componentă, puteți utiliza și metodele personalizate direct în șabloanele de aspect. De exemplu, puteți duplica twoCol_SR.cfm șablon, sunați-l book.cfm, și adăugați-l la bara laterală dreaptă: Acum, că avem detaliile cărții conținute într-o metodă personalizată, putem adăuga o logică suplimentară pentru a face ca ieșirea noastră să fie mai robustă. Mai întâi, să înfășurăm întregul conținut al funcției pentru a detecta dacă pagina respectivă este sau nu o carte. Dacă nu, atunci nu va reveni nimic. Autor: # $. Conținutul ( 'bookAuthor') # Următorul lucru pe care vrem să îl facem este să detectăm dacă există o valoare pentru fiecare element pe care îl afișăm (autor, ISBN etc.). Dacă valoarea nu există, vrem să sărim peste articol și să trecem la linia următoare. Putem realiza acest lucru prin împachetarea unui Împachetați fiecare element de detaliu al cărții în codul de mai sus, înlocuindu-l Crearea metodelor personalizate este o modalitate foarte bună de a adăuga versatilitatea temelor dvs., precum și de a menține integritatea codului. tag-uri în jurul valorii de ieșire. De asemenea, nu uitați paranteza după apelarea funcției
()
. Apelarea funcției dintr-un șablon de dispunere
Adăugarea unei anumite logici dinamice
Detalii
Data eliberării: #dateFormat ($. Conținutul ( 'bookReleaseDate'), 'dd / mm / yy') #
ISBN: # $. Conținutul ( 'bookISBN') #
Condiție: # $. Conținutul ( 'bookNewUsed') #
Preț: $ # $. Conținutul ( 'bookPrice') # dacă
declarație în jurul fiecărei linii, văzând dacă există o lungime a valorii mai mare de 0:
$ .Content ()
cu valorile corespunzătoare pentru fiecare element:Detalii
Concluzie