Mura CMS vous donne la possibilité de créer vos propres fonctionnalités personnalisées, directement à partir du niveau du thème. Cet article explique comment améliorer vos thèmes en créant des méthodes personnalisées réutilisables pouvant être utilisées à la fois dans les modèles de présentation et dans les utilisateurs d'administrateur..
Lors du développement de thèmes, vous pouvez avoir une série d’objets que vous souhaitez afficher encore et encore, tels que des diaporamas, des blocs de détails, etc..
Dans le tutoriel Extensions de classe, nous avons expliqué comment créer des attributs personnalisés pour un livre et les afficher sur la page à l'aide d'un composant. Voici le dernier composant que nous avons créé:
Détails
Auteur: [m] $. content ('bookAuthor') [/ m]
Date de sortie: [m] dateFormat ($. content ('bookReleaseDate'), 'mm / jj / aa') [/ m]
ISBN: [m] $. content ('bookISBN') [/ m]
État: [m] $. content ('bookNewUsed') [/ m]
Prix: $ [m] $. content ('bookPrice') [/ m]
Cela a bien fonctionné pour notre exemple, mais il y a quelques inconvénients:
Une façon de résoudre ces problèmes consiste à créer une méthode personnalisée dans notre thème, qui affichera les détails du livre à chaque utilisation..
Les méthodes d’affichage dans Mura se trouvent dans un fichier appelé contentRenderer.cfc. Maintenant, ce fichier existe à deux endroits sur votre site:
C'est important de comprendre ça tous les deux les fichiers rendront les méthodes sur votre site, cependant, au niveau du thème contentRenderer.cfc ajoutera toutes les méthodes qui n'existent pas au niveau du site et remplacera celles qui existent déjà au niveau du site.
Une autre chose importante à considérer est que lors du développement d'un thème, tout travail effectué au-dessus du répertoire du thème ne sera pas distribué avec votre thème. Si vous envisagez de créer des thèmes pour la distribution, je vous recommande de conserver l'intégralité de votre code personnalisé au niveau du thème..
Dans votre répertoire de thèmes, ouvrez le contentRenderer.cfc fichier
Remarque: si vous construisez votre thème à partir de zéro et que vous n'avez pas déjà le fichier, allez-y et ajoutez le contentRenderer.cfc du thème MuraBootstrap3 attaché à cet article.
Dans ce fichier, nous allons créer une nouvelle fonction appelée dspBookDetails
:
Maintenant, chaque fois que nous appelons cette fonction, Mura exécutera n'importe quoi à l'intérieur. Pour le moment, Mura n'a rien à faire ou afficher, jusqu'à ce que nous spécifions que nous voulons que la fonction retourne quelque chose. Ajoutons une variable pour stocker notre contenu pour que cette fonction renvoie:
Vous pouvez voir maintenant que nous créons une variable pour stocker tout notre contenu et notre logique (
), puis dire à la fonction de renvoyer cette variable à la page (
).
Nous sommes maintenant prêts à ajouter le contenu réel du livre, de la même manière que dans le composant:
Détails
Auteur: # $. content ('bookAuthor') #
Date de sortie: #dateFormat ($. content ('bookReleaseDate'), 'mm / jj / aa') #
ISBN: # $. content ('bookISBN') #
État: # $. content ('bookNewUsed') #
Prix: $ # $. content ('bookPrice') #
Remarque: nous avons remplacé le [m]
tags avec hashtags (#
) parce que nous sommes dans un fichier de code. [m]
les tags ne peuvent être utilisés que dans les éditeurs de la zone d'administration.
Maintenant que nous avons la fonction créée dans contentRenderer.cfc, nous pouvons l'appeler en utilisant le Scope Mura. Retournez au composant et remplacez le contenu par la ligne suivante:
[m] $. dspBookDetails () [/ m]
Remarque: Nous emballons la fonction dans un Lorsque vous publiez le composant et rechargez la page du livre, vous devriez voir les détails du livre identiques à ceux que vous aviez auparavant: En plus d'appeler la fonction à partir d'un composant, vous pouvez également utiliser vos méthodes personnalisées directement dans vos modèles de présentation. Par exemple, vous pouvez dupliquer le twoCol_SR.cfm modèle, appelez-le book.cfm, et ajoutez ceci à la barre latérale droite: Maintenant que les détails du livre sont contenus dans une méthode personnalisée, nous pouvons ajouter une logique supplémentaire pour rendre notre sortie un peu plus robuste. Commençons par envelopper tout le contenu de la fonction pour déterminer si la page en question est ou non un livre. Si non, alors il ne retournera rien. Auteur: # $. content ('bookAuthor') # La prochaine chose que nous voulons faire est de détecter si une valeur existe réellement pour chaque élément affiché (Auteur, ISBN, etc.). Si la valeur n'existe pas, nous voulons ignorer l'élément et passer à la ligne suivante. Nous pouvons accomplir cela en enveloppant un Enveloppez chaque élément de détail de livre dans le code ci-dessus en remplaçant le La création de méthodes personnalisées est un excellent moyen d'ajouter de la polyvalence à vos thèmes et de préserver l'intégrité de votre code.. balises autour de la sortie. De plus, n'oubliez pas la parenthèse après avoir appelé la fonction
()
. Appel de la fonction à partir d'un modèle de mise en page
Ajout de la logique dynamique
Détails
Date de sortie: #dateFormat ($. content ('bookReleaseDate'), 'mm / jj / aa') #
ISBN: # $. content ('bookISBN') #
État: # $. content ('bookNewUsed') #
Prix: $ # $. content ('bookPrice') # si
déclaration autour de chaque ligne, en vérifiant s’il existe une longueur de valeur supérieure à 0:
$ .contenu ()
valeurs avec les valeurs appropriées pour chaque élément:Détails
Conclusion