Mura CMS méthodes personnalisées

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..

résumer

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:

  1. Le balisage est ouvert aux éditeurs administratifs qui pourraient potentiellement le modifier, ce qui affecterait son affichage..
  2. Il n'y a pas de logique autour de chaque article; par exemple, si l'ISBN n'existe pas, l'étiquette est toujours affichée avec une valeur vide à côté. Cela se produirait également si l'utilisateur ajoutait ce composant à une page qui n'était même pas un livre, auquel cas aucun des attributs étendus n'apparaîtrait..

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.. 

Création d'une méthode d'affichage personnalisée

Les méthodes d’affichage dans Mura se trouvent dans un fichier appelé contentRenderer.cfc. Maintenant, ce fichier existe à deux endroits sur votre site:

  1. Niveau du site: siteID /includes/contentRenderer.cfc
  2. Niveau du thème: siteID includes / themes / ThemeName /contentRenderer.cfc

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..

Ajout au contenu de votre thèmeRenderer.cfc

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. 

Appel de la fonction à partir d'un composant

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

pour empêcher CKEditor d’ajouter des

balises autour de la sortie. De plus, n'oubliez pas la parenthèse après avoir appelé la fonction ()

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:

Appel de la fonction à partir d'un modèle de mise en page

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:

Ajout de la logique dynamique

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.

     

Détails

Auteur: # $. content ('bookAuthor') #
Date de sortie: #dateFormat ($. content ('bookReleaseDate'), 'mm / jj / aa') #
ISBN: # $. content ('bookISBN') #
État: # $. content ('bookNewUsed') #
Prix: $ # $. content ('bookPrice') #

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 si déclaration autour de chaque ligne, en vérifiant s’il existe une longueur de valeur supérieure à 0:

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

Enveloppez chaque élément de détail de livre dans le code ci-dessus en remplaçant le $ .contenu () valeurs avec les valeurs appropriées pour chaque élément:

     

Détails

Auteur: # $. content ('bookAuthor') #
Date de sortie: #dateFormat ($. content ('bookReleaseDate'), 'mm / jj / aa') #
ISBN: # $. content ('bookISBN') #
État: # $. content ('bookNewUsed') #
Prix: $ # $. content ('bookPrice') #

Conclusion

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..