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.
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:
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.
Visningsmetoder i Mura finns i en fil som heter contentRenderer.cfc. Nu finns den här filen på två platser inom din webbplats:
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.
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.
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 När du publicerar komponenten och laddar om boksidan ska du se bokinformationen identisk med hur du hade det innan: 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: 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. Författare: # $. Innehåll (bookAuthor) # 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 Wrap varje bokdetaljobjekt i koden ovan, ersätta 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. taggar runt utgången. Glöm inte heller parentesen efter att ha ringt funktionen
()
. Ringa funktionen från en layoutmall
Lägger till lite dynamisk logik
detaljer
Utgivningsdatum: #dateFormat ($. innehåll (bookReleaseDate), "mm / dd / yy) #
ISBN: # $. Innehåll (bookISBN) #
Tillstånd: # $. Innehåll (bookNewUsed) #
Pris: $ # $. Innehåll (bookPrice) # om
uttalande kring varje rad, se om det finns en längd av värdet större än 0:
$ .Content ()
värden med lämpliga värden för varje objekt:detaljer
Slutsats