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.
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:
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.
Darstellungsmethoden in Mura befinden sich in einer Datei namens contentRenderer.cfc. Diese Datei ist jetzt an zwei Stellen auf Ihrer Site vorhanden:
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.
Ö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.
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 Wenn Sie die Komponente veröffentlichen und die Buchseite neu laden, sollten Sie die Buchdetails so sehen, wie Sie sie zuvor hatten: 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: 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. Autor: # $. content ('bookAuthor') # 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 Wickeln Sie jedes Buchdetailelement in den obigen Code ein und ersetzen Sie das Das Erstellen benutzerdefinierter Methoden ist eine großartige Möglichkeit, um die Themen vielseitiger zu gestalten und die Integrität des Codes zu erhalten. Tags rund um die Ausgabe. Vergessen Sie auch nicht die Klammer nach dem Aufruf der Funktion
()
. Aufruf der Funktion aus einer Layoutvorlage
Dynamische Logik hinzufügen
Einzelheiten
Veröffentlichungsdatum: #dateFormat ($. content ('bookReleaseDate'), 'mm / dd / yy') #
ISBN: # $. content ('bookISBN') #
Bedingung: # $. content ('bookNewUsed') #
Preis: $ # $. content ('bookPrice') # ob
Anweisung um jede Zeile, ob der Wert größer als 0 ist:
$ .content ()
Werte mit den entsprechenden Werten für jeden Artikel:Einzelheiten
Fazit