Mura CMS biedt u de mogelijkheid om uw eigen aangepaste functionaliteit te creëren, rechtstreeks op themaniveau. In dit artikel wordt uitgelegd hoe u uw thema's kunt verbeteren door herbruikbare aangepaste methoden te maken die zowel in indelingssjablonen als in beheerdersgebruikers kunnen worden gebruikt.
Bij het ontwikkelen van thema's kunt u een reeks 'objecten' hebben die u steeds opnieuw wilt weergeven, zoals diavoorstellingen, detailblokken, enzovoort.
In de zelfstudie Klasse-uitbreidingen hebben we besproken hoe aangepaste kenmerken voor een boek kunnen worden gemaakt en deze op de pagina kunnen worden weergegeven met behulp van een component. Dit is het laatste onderdeel dat we hebben gemaakt:
Details
Schrijver: [M] $. Gehalte ( 'bookAuthor') [/ m]
Datum van publicatie: [M] dateFormat ($. Gehalte (bookReleaseDate ")," mm / dd / jj) [/ m]
ISBN: [M] $. Gehalte ( 'bookISBN') [/ m]
Staat: [M] $. Gehalte ( 'bookNewUsed') [/ m]
Prijs: $ [M] $. Gehalte ( 'bookPrice') [/ m]
Dit werkte goed voor ons voorbeeld, maar er zijn een paar nadelen:
Een manier om deze problemen op te lossen, is door een aangepaste methode in ons thema te maken die de boekdetails toont wanneer deze wordt gebruikt.
Weergavemethoden in Mura bevinden zich in een bestand met de naam contentRenderer.cfc. Nu bestaat dit bestand op twee locaties op uw site:
Het is belangrijk om dat te begrijpen beide bestanden zullen methoden op uw site weergeven, echter op themaniveau contentRenderer.cfc voegt methoden toe die niet bestaan op siteniveau en overschrijft alle methoden die al bestaan op siteniveau.
Een ander belangrijk punt om te overwegen is dat bij het doen van thema-ontwikkeling, elk werk dat wordt gedaan boven de themamap niet wordt verspreid met uw thema. Als u van plan bent om thema's te maken voor distributie, raad ik u aan al uw aangepaste code op themaniveau te bewaren.
Open de map in uw themamap contentRenderer.cfc het dossier
Notitie: als u uw thema vanuit het niets aan het opbouwen bent en het bestand nog niet heeft, kunt u het toevoegen contentRenderer.cfc van het MuraBootstrap3-thema dat bij dit artikel hoort.
In dit bestand gaan we een nieuwe functie maken genaamd dspBookDetails
:
Wanneer we deze functie nu oproepen, zal Mura alles wat erin zit uitvoeren. Op dit moment is er niets dat Mura doet of weergeeft, totdat we aangeven dat we willen dat de functie iets retourneert. Laten we een variabele toevoegen om onze inhoud op te slaan voor deze functie om terug te keren:
U kunt nu zien dat we een variabele maken om al onze inhoud en logica op te slaan (
), en vervolgens de functie te vertellen om die variabele naar de pagina te retourneren (
).
Nu zijn we klaar om de werkelijke inhoud van het boek toe te voegen, net zoals we in de component hadden:
Details
Schrijver: # $. Gehalte ( 'bookAuthor') #
Datum van publicatie: #dateFormat ($. gehalte ( 'bookReleaseDate'), 'dd / mm / jj') #
ISBN: # $. Gehalte ( 'bookISBN') #
Staat: # $. Gehalte ( 'bookNewUsed') #
Prijs: $ # $. Gehalte ( 'bookPrice') #
Notitie: we hebben het vervangen [M]
tags met hashtags (#
) omdat we in een codebestand zitten. [M]
tags kunnen alleen worden gebruikt in de editors van het beheerdersgedeelte.
Nu hebben we de functie gemaakt in contentRenderer.cfc, we kunnen het gebruiken met de Mura Scope. Ga terug naar het onderdeel en vervang de inhoud door de volgende regel:
[M] $. DspBookDetails () [/ m]
Notitie: We wikkelen de functie in a Wanneer u het onderdeel publiceert en de boekpagina opnieuw laadt, ziet u de boekgegevens identiek aan hoe u het eerder had: Naast het aanroepen van de functie vanuit een component, kunt u uw aangepaste methoden ook rechtstreeks binnen uw indelingssjablonen gebruiken. U kunt bijvoorbeeld de kopie dupliceren twoCol_SR.cfm sjabloon, noem het maar book.cfm, en voeg dit toe aan de rechterzijbalk: Nu we de boekgegevens in een aangepaste methode hebben, kunnen we wat extra logica toevoegen om onze uitvoer een beetje robuuster te maken. Laten we eerst de volledige inhoud van de functie omdraaien om te detecteren of de pagina in kwestie eigenlijk een boek is. Zo niet, dan zal het niets teruggeven. Schrijver: # $. Gehalte ( 'bookAuthor') # Het volgende dat we willen doen, is detecteren of er daadwerkelijk een waarde bestaat voor elk item dat we weergeven (auteur, ISBN, enz.). Als de waarde niet bestaat, willen we het item overslaan en doorgaan naar de volgende regel. We kunnen dit bereiken door een Wikkel elk detailitem voor een boek in de bovenstaande code en vervang het Het maken van aangepaste methoden is een geweldige manier om veelzijdigheid toe te voegen aan uw thema's en om de integriteit van uw code te behouden. tags rond de uitvoer. Vergeet ook niet de haakjes na het aanroepen van de functie
()
. De functie oproepen vanuit een lay-outsjabloon
Enkele dynamische logica toevoegen
Details
Datum van publicatie: #dateFormat ($. gehalte ( 'bookReleaseDate'), 'dd / mm / jj') #
ISBN: # $. Gehalte ( 'bookISBN') #
Staat: # $. Gehalte ( 'bookNewUsed') #
Prijs: $ # $. Gehalte ( 'bookPrice') # als
verklaring rond elke regel, kijkend of er een lengte is van de waarde groter dan 0:
$ .Content ()
waarden met de juiste waarden voor elk item:Details
Conclusie