Mura CMS gir deg muligheten til å lage din egen tilpassede funksjonalitet direkte fra tema nivå. Denne artikkelen vil vise deg hvordan du kan forbedre temaene dine ved å lage gjenbrukbare egendefinerte metoder som kan brukes i både layoutmaler og admin brukere.
Når du utvikler temaer, kan du ha en serie "objekter" som du vil vise om og om igjen, for eksempel lysbildeserier, detaljblokker osv..
I veiledningen for klassen utvidelser gikk vi over hvordan du oppretter egendefinerte attributter for en bok, og viser dem på siden ved hjelp av en komponent. Her er den endelige komponenten vi opprettet:
detaljer
Forfatter: [M] $. Innhold ( 'AUTHOR') [/ m]
Utgivelsesdato: [M] dateformat ($. Innhold ( 'bookReleaseDate'), 'mm / dd / yy') [/ m]
ISBN: [M] $. Innhold ( 'bookISBN') [/ m]
Tilstand: [M] $. Innhold ( 'bookNewUsed') [/ m]
Pris: $ [M] $. Innhold ( 'bookPrice') [/ m]
Dette fungerte bra for vårt eksempel, men det er noen ulemper:
En måte vi kan løse disse problemene på er å skape en tilpasset metode i vårt tema som vil vise bokdetaljer når den brukes.
Visningsmetoder i Mura ligger i en fil som heter contentRenderer.cfc. Nå finnes denne filen på to steder på nettstedet ditt:
Det er viktig å forstå det både filer vil gjøre metoder på nettstedet ditt, men tema nivå contentRenderer.cfc vil legge til noen metoder som ikke finnes på nettstedsnivå, og tilsidesette alle metoder som allerede finnes på nettstedsnivå.
En annen viktig ting å vurdere er at når du gjør temautvikling, vil alt arbeid som er gjort over temakataloget ikke bli distribuert med temaet ditt. Hvis du planlegger å lage temaer for distribusjon, anbefaler jeg at du beholder all din tilpassede kode på tema nivå.
I temakatalogen, åpne contentRenderer.cfc fil
Merk: Hvis du bygger temaet ditt fra scratch og ikke har filen allerede, fortsett og legg til contentRenderer.cfc fra MuraBootstrap3-temaet som er vedlagt denne artikkelen.
I denne filen skal vi lage en ny funksjon som heter dspBookDetails
:
Nå, når vi kaller denne funksjonen, vil Mura utføre alt inni det. For øyeblikket er det ingenting for Mura å gjøre eller vise, før vi angir at vi vil at funksjonen skal returnere noe. La oss legge til en variabel for å lagre innholdet vårt for denne funksjonen å returnere:
Du kan se nå at vi lager en variabel for å lagre alt innhold og logikk (
), og deretter forteller funksjonen å returnere denne variabelen til siden (
).
Nå er vi klare til å legge til det faktiske bokinnholdet, ligner på hvordan vi hadde i komponenten:
detaljer
Forfatter: # $. Innhold ( 'AUTHOR') #
Utgivelsesdato: #dateFormat ($. innhold ( 'bookReleaseDate'), 'mm / dd / åå') #
ISBN: # $. Innhold ( 'bookISBN') #
Tilstand: # $. Innhold ( 'bookNewUsed') #
Pris: $ # $. Innhold ( 'bookPrice') #
Merk: Vi erstattet [M]
merker med hashtags (#
) fordi vi er i en kodefil. [M]
Etiketter kan bare brukes i redigeringsområdet for administrasjonen.
Nå som vi har funksjonen opprettet i contentRenderer.cfc, vi kan kalle det ved hjelp av Mura-omfanget. Gå tilbake til komponenten og erstatt innholdet med følgende linje:
[M] $. DspBookDetails () [/ m]
Merk: Vi pakker inn funksjonen i en Når du publiserer komponenten og oppdaterer boksiden, bør du se bokens detaljer som er identiske med hvordan du hadde det før: I tillegg til å ringe funksjonen fra en komponent, kan du også bruke dine tilpassede metoder direkte i layoutmaler. For eksempel kan du duplisere twoCol_SR.cfm mal, ring den book.cfm, og legg til dette til høyre sidefelt: Nå som vi har bokdetaljer som finnes i en tilpasset metode, kan vi legge til noen ekstra logikk for å gjøre produksjonen litt mer robust. La oss først pakke inn hele innholdet i funksjonen for å oppdage om den aktuelle siden faktisk er en bok eller ikke. Hvis ikke, da vil det ikke returnere noe. Forfatter: # $. Innhold ( 'AUTHOR') # Den neste tingen vi vil gjøre er å oppdage om det faktisk finnes en verdi for hvert element vi viser (Forfatter, ISBN, etc). Hvis verdien ikke eksisterer, vil vi hoppe over elementet og gå videre til neste linje. Vi kan oppnå dette ved å pakke inn en Legg inn hver bokdetaljer i koden ovenfor, erstatt Å skape tilpassede metoder er en fin måte å legge til allsidighet til temaene dine, samt å opprettholde integriteten til koden din. merker rundt utgangen. Ikke glem parentesen etter at du har ringt til funksjonen
()
. Ringer funksjonen fra en layoutmal
Legger til litt dynamisk logikk
detaljer
Utgivelsesdato: #dateFormat ($. innhold ( 'bookReleaseDate'), 'mm / dd / åå') #
ISBN: # $. Innhold ( 'bookISBN') #
Tilstand: # $. Innhold ( 'bookNewUsed') #
Pris: $ # $. Innhold ( 'bookPrice') # hvis
setningen rundt hver linje, se om det er en lengde på verdien som er større enn 0:
$ .Content ()
verdier med de riktige verdiene for hvert element:detaljer
Konklusjon