Mura CMS Benutzerdefinierte Methoden

Mit Mura CMS können Sie Ihre eigenen benutzerdefinierten Funktionen direkt auf der Designebene erstellen. In diesem Artikel erfahren Sie, wie Sie Ihre Designs verbessern können, indem Sie wiederverwendbare benutzerdefinierte Methoden erstellen, die sowohl in Layoutvorlagen als auch in Admin-Benutzern verwendet werden können.

Rekapitulieren

Beim Entwickeln von Themen verfügen Sie möglicherweise über eine Reihe von "Objekten", die Sie immer wieder anzeigen möchten, z. B. Diashows, Detailblöcke usw.

Im Lernprogramm "Klassenerweiterungen" haben wir beschrieben, wie Sie benutzerdefinierte Attribute für ein Buch erstellen und diese mithilfe einer Komponente auf der Seite anzeigen. Hier ist die letzte Komponente, die wir erstellt haben:

Einzelheiten

Autor: [m] $. content ('bookAuthor') [/ m]
Veröffentlichungsdatum: [m] dateFormat ($. content ('bookReleaseDate'), 'mm / tt / jj') [/ m]
ISBN: [m] $. content ('bookISBN') [/ m]
Bedingung: [m] $. content ('bookNewUsed') [/ m]
Preis: $ [m] $. content ('bookPrice') [/ m]

Dies hat in unserem Beispiel gut funktioniert, aber es gibt einige Nachteile:

  1. Das Markup steht Administratoren zur Verfügung, die möglicherweise das Markup ändern und dessen Anzeige beeinflussen können.
  2. Es gibt keine Logik um jedes Element. Wenn es beispielsweise keine ISBN gibt, wird das Label immer noch mit einem leeren Wert daneben angezeigt. Dies würde auch passieren, wenn der Benutzer diese Komponente zu einer Seite hinzufügte, die nicht einmal ein Buch ist. In diesem Fall würde keines der erweiterten Attribute angezeigt.

Eine Möglichkeit, diese Probleme zu lösen, besteht darin, in unserem Design eine benutzerdefinierte Methode zu erstellen, die die Buchdetails bei jeder Verwendung anzeigt. 

Erstellen einer benutzerdefinierten Anzeigemethode

Darstellungsmethoden in Mura befinden sich in einer Datei namens contentRenderer.cfc. Diese Datei ist jetzt an zwei Stellen auf Ihrer Site vorhanden:

  1. Site Level: siteID /includes/contentRenderer.cfc
  2. Themenebene: siteID umfasst / themes / ThemeName /contentRenderer.cfc

Es ist wichtig, das zu verstehen beide Dateien rendern Methoden in Ihrer Site, jedoch auf Themenebene contentRenderer.cfc Hängt alle Methoden an, die auf Site-Ebene nicht vorhanden sind, und überschreibt alle Methoden, die bereits auf Site-Ebene vorhanden sind.

Zu beachten ist außerdem, dass bei der Themenentwicklung alle Arbeiten, die über dem Themenverzeichnis ausgeführt werden, nicht mit Ihrem Thema verteilt werden. Wenn Sie beabsichtigen, Designs für die Verteilung zu erstellen, empfiehlt es sich, den gesamten benutzerdefinierten Code auf der Designebene zu belassen.

Hinzufügen zu contentRenderer.cfc Ihres Themes

Öffnen Sie in Ihrem Designverzeichnis die contentRenderer.cfc Datei

Hinweis: Wenn Sie Ihr Design von Grund auf neu erstellen und die Datei noch nicht erstellt wurde, fügen Sie die contentRenderer.cfc aus dem MuraBootstrap3-Thema, das diesem Artikel beigefügt ist. 

In dieser Datei erstellen wir eine neue Funktion namens dspBookDetails

  

Wann immer wir diese Funktion aufrufen, führt Mura alles darin aus. Momentan gibt es für Mura nichts zu tun oder anzuzeigen, bis wir angeben, dass die Funktion etwas zurückgeben soll. Fügen Sie eine Variable hinzu, um unseren Inhalt für diese Funktion zu speichern:

         

Sie können jetzt sehen, dass wir eine Variable erstellen, um unseren gesamten Inhalt und unsere Logik zu speichern () und teilt der Funktion dann mit, diese Variable auf die Seite zurückzugeben ().

Jetzt können wir den tatsächlichen Buchinhalt hinzufügen, ähnlich wie in der Komponente:

   

Einzelheiten

Autor: # $. content ('bookAuthor') #
Veröffentlichungsdatum: #dateFormat ($. content ('bookReleaseDate'), 'mm / dd / yy') #
ISBN: # $. content ('bookISBN') #
Bedingung: # $. content ('bookNewUsed') #
Preis: $ # $. content ('bookPrice') #

Hinweis: wir haben das ersetzt [m] Tags mit Hashtags (#) weil wir in einer Codedatei sind. [m] Tags können nur in den Editorbereichen des Admin-Bereichs verwendet werden. 

Aufruf der Funktion von einer Komponente

Nun, da wir die Funktion erstellt haben contentRenderer.cfc, Wir können es mit dem Mura Scope aufrufen. Gehen Sie zurück zur Komponente und ersetzen Sie den Inhalt durch die folgende Zeile:

[m] $. dspBookDetails () [/ m]

Hinweis: Wir wickeln die Funktion in ein

um zu verhindern, dass CKEditor zusätzliches hinzufügt

Tags rund um die Ausgabe. Vergessen Sie auch nicht die Klammer nach dem Aufruf der Funktion ()

Wenn Sie die Komponente veröffentlichen und die Buchseite neu laden, sollten Sie die Buchdetails so sehen, wie Sie sie zuvor hatten:

Aufruf der Funktion aus einer Layoutvorlage

Sie können die Funktion nicht nur über eine Komponente aufrufen, sondern auch Ihre benutzerdefinierten Methoden direkt in Ihren Layoutvorlagen verwenden. Zum Beispiel können Sie das kopieren twoCol_SR.cfm Vorlage, nennen Sie es book.cfm, und füge dies der rechten Seitenleiste hinzu:

Dynamische Logik hinzufügen

Nachdem wir nun die Buchdetails in einer benutzerdefinierten Methode enthalten haben, können wir zusätzliche Logik hinzufügen, um die Ausgabe etwas robuster zu gestalten. Lassen Sie uns zunächst den gesamten Inhalt der Funktion umschließen, um festzustellen, ob die betreffende Seite tatsächlich ein Buch ist oder nicht. Wenn nicht, wird nichts zurückgegeben.

     

Einzelheiten

Autor: # $. content ('bookAuthor') #
Veröffentlichungsdatum: #dateFormat ($. content ('bookReleaseDate'), 'mm / dd / yy') #
ISBN: # $. content ('bookISBN') #
Bedingung: # $. content ('bookNewUsed') #
Preis: $ # $. content ('bookPrice') #

Als nächstes möchten wir herausfinden, ob für jedes angezeigte Element (Autor, ISBN usw.) tatsächlich ein Wert vorhanden ist. Wenn der Wert nicht vorhanden ist, möchten wir den Artikel überspringen und zur nächsten Zeile übergehen.

Wir können dies erreichen, indem wir eine ob Anweisung um jede Zeile, ob der Wert größer als 0 ist:

  Autor: # $. content ('bookAuthor') #

Wickeln Sie jedes Buchdetailelement in den obigen Code ein und ersetzen Sie das $ .content () Werte mit den entsprechenden Werten für jeden Artikel:

     

Einzelheiten

Autor: # $. content ('bookAuthor') #
Veröffentlichungsdatum: #dateFormat ($. content ('bookReleaseDate'), 'mm / dd / yy') #
ISBN: # $. content ('bookISBN') #
Bedingung: # $. content ('bookNewUsed') #
Preis: $ # $. content ('bookPrice') #

Fazit

Das Erstellen benutzerdefinierter Methoden ist eine großartige Möglichkeit, um die Themen vielseitiger zu gestalten und die Integrität des Codes zu erhalten.