Mura CMS metode personalizate

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.

Recapitulare

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:

  1. Marcarea este deschisă editorilor de admin, care ar putea modifica marcajul, afectând afișarea acestuia.
  2. Nu există logică în jurul fiecărui element; dacă nu există codul ISBN, de exemplu, eticheta ar mai apărea cu o valoare necompletată de lângă ea. Acest lucru s-ar întâmpla, de asemenea, în cazul în care utilizatorul a adăugat această componentă unei pagini care nu este nici măcar o carte, caz în care nici unul dintre atributele extinse nu ar apărea.

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ă. 

Crearea unei metode personalizate de afișare

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.:

  1. Nivelul site-ului: SiteID /includes/contentRenderer.cfc
  2. Tema Nivel: SiteID include / teme / THEMENAME /contentRenderer.cfc

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ă.

Adăugarea conținutului Renderer.cfc în tema dvs.

Î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. 

Apelarea funcției dintr-o componentă

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

pentru a împiedica CKEditor să mai adauge

tag-uri în jurul valorii de ieșire. De asemenea, nu uitați paranteza după apelarea funcției ()

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:

Apelarea funcției dintr-un șablon de dispunere

Î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ă:

Adăugarea unei anumite logici dinamice

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.

     

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') #

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 dacă declarație în jurul fiecărei linii, văzând dacă există o lungime a valorii mai mare de 0:

  Autor: # $. Conținutul ( 'bookAuthor') #

Împachetați fiecare element de detaliu al cărții în codul de mai sus, înlocuindu-l $ .Content () cu valorile corespunzătoare pentru fiecare element:

     

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') #

Concluzie

Crearea metodelor personalizate este o modalitate foarte bună de a adăuga versatilitatea temelor dvs., precum și de a menține integritatea codului.