Mura CMS Anpassade metoder

Mura CMS ger dig möjligheten att skapa din egen anpassade funktionalitet direkt från temanivån. Den här artikeln visar hur du kan förbättra dina teman genom att skapa återanvända anpassade metoder som kan användas både i layoutmallar och administratörs användare.

Recap

När du utvecklar teman kan du ha en serie "objekt" som du skulle vilja visa om och om igen, till exempel bildspel, detaljblocks osv..

I handledningen Klassutvidgningar gick vi över hur man skapar anpassade attribut för en bok och visar dem på sidan med hjälp av en komponent. Här är den sista komponenten vi skapade:

detaljer

Författare: [M] $. Innehåll ( 'bookAuthor') [/ m]
Utgivningsdatum: [M] dateformat ($. Innehåll ( 'bookReleaseDate'), 'mm / dd / yy') [/ m]
ISBN: [M] $. Innehåll ( 'bookISBN') [/ m]
Tillstånd: [M] $. Innehåll ( 'bookNewUsed') [/ m]
Pris: $ [M] $. Innehåll ( 'bookPrice') [/ m]

Detta fungerade bra för vårt exempel, men det finns några nackdelar:

  1. Markeringen är öppen för administratörsredaktörer som eventuellt kan ändra markeringen, vilket påverkar dess visning.
  2. Det finns ingen logik kring varje objekt; Om ISBN inte existerar, skulle etiketten fortfarande visas med ett tomt värde bredvid det. Detta skulle också hända om användaren lagt till den här komponenten på en sida som inte ens är en bok, i vilket fall ingen av de utökade attributen skulle dyka upp.

Ett sätt att lösa dessa problem är att skapa en anpassad metod i vårt tema som visar bokinformationen när den används. 

Skapa en anpassad visningsmetod

Visningsmetoder i Mura finns i en fil som heter contentRenderer.cfc. Nu finns den här filen på två platser inom din webbplats:

  1. Webbplatsnivå: SiteID /includes/contentRenderer.cfc
  2. Tema Nivå: SiteID includes / teman / THEME /contentRenderer.cfc

Det är viktigt att förstå det både filer kommer att göra metoder på din webbplats, men temanivån contentRenderer.cfc kommer att lägga till några metoder som inte existerar på platsenivå och åsidosätta alla metoder som redan finns på platsnivån.

En annan viktig sak att tänka på är att när arbetet utvecklas, delas inte något arbete ut över temakatalogen med ditt tema. Om du planerar att skapa teman för distribution, rekommenderar jag att du håller all din anpassade kod på temanivån.

Lägger till ditt temas contentRenderer.cfc

I din temakatalog öppnar du contentRenderer.cfc fil

Notera: Om du bygger ditt tema från början och inte har filen redan, fortsätt och lägg till contentRenderer.cfc från temat MuraBootstrap3 som bifogas denna artikel. 

I den här filen kommer vi att skapa en ny funktion som heter dspBookDetails

  

Nu, när vi kallar den här funktionen, kommer Mura att utföra allting inne i det. För tillfället finns det inget för Mura att göra eller visa, tills vi anger att vi vill att funktionen ska returnera någonting. Låt oss lägga till en variabel för att lagra innehållet för att den här funktionen ska återvända:

         

Nu kan vi se att vi skapar en variabel för att lagra allt innehåll och logik (), sedan berätta funktionen för att returnera den variabeln till sidan ().

Nu är vi redo att lägga till det faktiska bokinnehållet, som vi hade i komponenten:

   

detaljer

Författare: # $. Innehåll (bookAuthor) #
Utgivningsdatum: #dateFormat ($. innehåll (bookReleaseDate), "mm / dd / yy) #
ISBN: # $. Innehåll (bookISBN) #
Tillstånd: # $. Innehåll (bookNewUsed) #
Pris: $ # $. Innehåll (bookPrice) #

Notera: Vi bytte ut [M] taggar med hashtags (#) eftersom vi är i en kodfil. [M] taggar kan bara användas i redigerare för adminområdet. 

Ringa funktionen från en komponent

Nu när vi har funktionen skapad i contentRenderer.cfc, vi kan kalla det med Mura Scope. Gå tillbaka till komponenten och ersätt innehållet med följande rad:

[M] $. DspBookDetails () [/ m]

Notera: Vi sätter in funktionen i en

för att förhindra att CKEditor lägger till ytterligare

taggar runt utgången. Glöm inte heller parentesen efter att ha ringt funktionen ()

När du publicerar komponenten och laddar om boksidan ska du se bokinformationen identisk med hur du hade det innan:

Ringa funktionen från en layoutmall

Förutom att ringa funktionen från en komponent kan du också använda dina anpassade metoder direkt i din layoutmallar. Du kan till exempel duplicera twoCol_SR.cfm mall, kalla den book.cfm, och lägg till detta till höger sidofält:

Lägger till lite dynamisk logik

Nu när vi har bokinformationen i en anpassad metod kan vi lägga till ytterligare logik för att göra vår produktion lite mer robust. Låt oss först sätta in hela innehållet i funktionen för att upptäcka om den aktuella sidan är en bok. Om inte, kommer det inte att returnera någonting.

     

detaljer

Författare: # $. Innehåll (bookAuthor) #
Utgivningsdatum: #dateFormat ($. innehåll (bookReleaseDate), "mm / dd / yy) #
ISBN: # $. Innehåll (bookISBN) #
Tillstånd: # $. Innehåll (bookNewUsed) #
Pris: $ # $. Innehåll (bookPrice) #

Nästa sak vi vill göra är att upptäcka om ett värde faktiskt existerar för varje objekt vi visar (Författare, ISBN, etc). Om värdet inte existerar vill vi hoppa över objektet och gå vidare till nästa rad.

Vi kan åstadkomma detta genom att förpacka en om uttalande kring varje rad, se om det finns en längd av värdet större än 0:

  Författare: # $. Innehåll (bookAuthor) #

Wrap varje bokdetaljobjekt i koden ovan, ersätta $ .Content () värden med lämpliga värden för varje objekt:

     

detaljer

Författare: # $. Innehåll (bookAuthor) #
Utgivningsdatum: #dateFormat ($. innehåll (bookReleaseDate), "mm / dd / yy) #
ISBN: # $. Innehåll (bookISBN) #
Tillstånd: # $. Innehåll (bookNewUsed) #
Pris: $ # $. Innehåll (bookPrice) #

Slutsats

Att skapa anpassade metoder är ett bra sätt att lägga till mångsidighet för dina teman, samt upprätthålla integriteten i din kod.