Mura CMS Tilpassede metoder

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.

oppsummering

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:

  1. Markeringen er åpen for adminredaktører som potensielt kan endre oppslaget, som påvirker visningen.
  2. Det er ingen logikk rundt hvert element; Hvis ISBN ikke eksisterer, vil etiketten fortsatt vises med en tom verdi ved siden av den. Dette vil også skje hvis brukeren lagt til denne komponenten på en side som ikke engang er en bok, i så fall vil ingen av de utvidede attributter dukke opp.

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. 

Opprette en egendefinert skjermmetode

Visningsmetoder i Mura ligger i en fil som heter contentRenderer.cfc. Nå finnes denne filen på to steder på nettstedet ditt:

  1. Nettstedsnivå: SiteID /includes/contentRenderer.cfc
  2. Tema Nivå: SiteID omfatter / tema / THEME /contentRenderer.cfc

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

Legger til temaets innholdRenderer.cfc

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. 

Kaller funksjonen fra en komponent

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

for å hindre CKEditor fra å legge til flere

merker rundt utgangen. Ikke glem parentesen etter at du har ringt til funksjonen ()

Når du publiserer komponenten og oppdaterer boksiden, bør du se bokens detaljer som er identiske med hvordan du hadde det før:

Ringer funksjonen fra en layoutmal

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:

Legger til litt dynamisk logikk

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.

     

detaljer

Forfatter: # $. Innhold ( 'AUTHOR') #
Utgivelsesdato: #dateFormat ($. innhold ( 'bookReleaseDate'), 'mm / dd / åå') #
ISBN: # $. Innhold ( 'bookISBN') #
Tilstand: # $. Innhold ( 'bookNewUsed') #
Pris: $ # $. Innhold ( 'bookPrice') #

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 hvis setningen rundt hver linje, se om det er en lengde på verdien som er større enn 0:

  Forfatter: # $. Innhold ( 'AUTHOR') #

Legg inn hver bokdetaljer i koden ovenfor, erstatt $ .Content () verdier med de riktige verdiene for hvert element:

     

detaljer

Forfatter: # $. Innhold ( 'AUTHOR') #
Utgivelsesdato: #dateFormat ($. innhold ( 'bookReleaseDate'), 'mm / dd / åå') #
ISBN: # $. Innhold ( 'bookISBN') #
Tilstand: # $. Innhold ( 'bookNewUsed') #
Pris: $ # $. Innhold ( 'bookPrice') #

Konklusjon

Å skape tilpassede metoder er en fin måte å legge til allsidighet til temaene dine, samt å opprettholde integriteten til koden din.