Mura CMS aangepaste methoden

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.

Samenvatting

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:

  1. De markup staat open voor admin-editors die mogelijk de opmaak kunnen wijzigen, waardoor de weergave ervan wordt beïnvloed.
  2. Er is geen logica rond elk item; als ISBN niet bestaat, zou het label bijvoorbeeld nog steeds worden weergegeven met een lege waarde ernaast. Dit zou ook gebeuren als de gebruiker dit onderdeel zou toevoegen aan een pagina die niet eens een boek is, in welk geval geen van de uitgebreide attributen zou verschijnen.

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. 

Een aangepaste weergavemethode maken

Weergavemethoden in Mura bevinden zich in een bestand met de naam contentRenderer.cfc. Nu bestaat dit bestand op twee locaties op uw site:

  1. Siteniveau: Siteid /includes/contentRenderer.cfc
  2. Thema niveau: Siteid includes / themes / THEMENAME /contentRenderer.cfc

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.

Toevoegen aan de inhoud van Your ThemeRenderer.cfc

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. 

De functie van een component oproepen

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

om te voorkomen dat CKEditor extra toevoegt

tags rond de uitvoer. Vergeet ook niet de haakjes na het aanroepen van de functie ()

Wanneer u het onderdeel publiceert en de boekpagina opnieuw laadt, ziet u de boekgegevens identiek aan hoe u het eerder had:

De functie oproepen vanuit een lay-outsjabloon

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:

Enkele dynamische logica toevoegen

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.

     

Details

Schrijver: # $. Gehalte ( 'bookAuthor') #
Datum van publicatie: #dateFormat ($. gehalte ( 'bookReleaseDate'), 'dd / mm / jj') #
ISBN: # $. Gehalte ( 'bookISBN') #
Staat: # $. Gehalte ( 'bookNewUsed') #
Prijs: $ # $. Gehalte ( 'bookPrice') #

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 als verklaring rond elke regel, kijkend of er een lengte is van de waarde groter dan 0:

  Schrijver: # $. Gehalte ( 'bookAuthor') #

Wikkel elk detailitem voor een boek in de bovenstaande code en vervang het $ .Content () waarden met de juiste waarden voor elk item:

     

Details

Schrijver: # $. Gehalte ( 'bookAuthor') #
Datum van publicatie: #dateFormat ($. gehalte ( 'bookReleaseDate'), 'dd / mm / jj') #
ISBN: # $. Gehalte ( 'bookISBN') #
Staat: # $. Gehalte ( 'bookNewUsed') #
Prijs: $ # $. Gehalte ( 'bookPrice') #

Conclusie

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.