Mura CMS le brinda la posibilidad de crear su propia funcionalidad personalizada, directamente desde el nivel del tema. Este artículo le mostrará cómo puede mejorar sus temas mediante la creación de métodos personalizados reutilizables que se pueden usar tanto en plantillas de diseño como en usuarios administrativos..
Al desarrollar temas, puede tener una serie de 'objetos' que le gustaría mostrar una y otra vez, como presentaciones de diapositivas, bloques de detalles, etc..
En el tutorial de Extensiones de clase, repasamos cómo crear atributos personalizados para un libro y mostrarlos en la página usando un componente. Aquí está el componente final que creamos:
Detalles
Autor: [m] $. contenido ('bookAuthor') [/ m]
Fecha de lanzamiento: [m] dateFormat ($. content ('bookReleaseDate'), 'mm / dd / aa') [/ m]
ISBN: [m] $. contenido ('bookISBN') [/ m]
Condición: [m] $. contenido ('bookNewUsed') [/ m]
Precio: $ [m] $. contenido ('bookPrice') [/ m]
Esto funcionó bien para nuestro ejemplo, pero hay algunos inconvenientes:
Una forma en que podemos resolver estos problemas es crear un método personalizado en nuestro tema que muestre los detalles del libro siempre que se use..
Los métodos de visualización en Mura se encuentran en un archivo llamado contentRenderer.cfc. Ahora, este archivo existe en dos ubicaciones dentro de su sitio:
Es importante entender que ambos Los archivos representarán métodos en su sitio, sin embargo, el nivel de tema contentRenderer.cfc anexará cualquier método que no exista en el nivel del sitio y anulará cualquier método que ya exista en el nivel del sitio.
Otra cosa importante a considerar es que al realizar el desarrollo del tema, cualquier trabajo realizado sobre el directorio del tema no se distribuirá con su tema. Si planea crear temas para su distribución, le recomiendo que mantenga todo su código personalizado en el nivel del tema..
En su directorio de temas, abra el contentRenderer.cfc expediente
Nota: si está creando su tema desde cero y aún no tiene el archivo, adelante, agregue el contentRenderer.cfc del tema MuraBootstrap3 adjunto a este artículo.
En este archivo, vamos a crear una nueva función llamada dspBookDetails
:
Ahora, cuando llamamos a esta función, Mura ejecutará cualquier cosa dentro de ella. En este momento, no hay nada que Mura haga o muestre, hasta que especifiquemos que queremos que la función devuelva algo. Agreguemos una variable para almacenar nuestro contenido para que esta función regrese:
Ahora puede ver que estamos creando una variable para almacenar todo nuestro contenido y lógica (
), luego le dice a la función que devuelva esa variable a la página (
).
Ahora estamos listos para agregar el contenido real del libro, similar a lo que teníamos en el componente:
Detalles
Autor: # $. contenido ('bookAuthor') #
Fecha de lanzamiento: #dateFormat ($. content ('bookReleaseDate'), 'mm / dd / aa') #
ISBN: # $. contenido ('bookISBN') #
Condición: # $. contenido ('bookNewUsed') #
Precio: $ # $. contenido ('bookPrice') #
Nota: reemplazamos el [metro]
etiquetas con hashtags (#
) porque estamos en un archivo de código. [metro]
Las etiquetas solo se pueden utilizar en los editores del área de administración..
Ahora que tenemos la función creada en contentRenderer.cfc, Podemos llamarlo usando el Mura Scope. Vuelva al componente y reemplace los contenidos con la siguiente línea:
[m] $. dspBookDetails () [/ m]
Nota: Estamos envolviendo la función en una Cuando publique el componente y vuelva a cargar la página del libro, debería ver los detalles del libro idénticos a los que tenía antes: Además de llamar a la función desde un componente, también puede usar sus métodos personalizados directamente dentro de sus plantillas de diseño. Por ejemplo, puede duplicar la twoCol_SR.cfm plantilla, llamalo libro.cfm, y agrega esto a la barra lateral derecha: Ahora que tenemos los detalles del libro contenidos en un método personalizado, podemos agregar un poco de lógica adicional para hacer que nuestra salida sea un poco más robusta. Primero, envolvamos todo el contenido de la función para detectar si la página en cuestión es en realidad un libro. Si no, entonces no devolverá nada.. Autor: # $. contenido ('bookAuthor') # Lo siguiente que queremos hacer es detectar si realmente existe un valor para cada elemento que estamos mostrando (Autor, ISBN, etc.). Si el valor no existe, queremos omitir el elemento y pasar a la siguiente línea. Podemos lograr esto envolviendo una Envuelva cada elemento de detalle de libro en el código anterior, reemplazando el Crear métodos personalizados es una excelente manera de agregar versatilidad a sus temas, así como de mantener la integridad de su código.. etiquetas alrededor de la salida. Además, no olvides el paréntesis después de llamar a la función.
()
. Llamar a la función desde una plantilla de diseño
Añadiendo un poco de lógica dinámica
Detalles
Fecha de lanzamiento: #dateFormat ($. content ('bookReleaseDate'), 'mm / dd / aa') #
ISBN: # $. contenido ('bookISBN') #
Condición: # $. contenido ('bookNewUsed') #
Precio: $ # $. contenido ('bookPrice') # Si
declaración alrededor de cada línea, viendo si hay una longitud del valor mayor que 0:
$ .contenido ()
Valores con los valores apropiados para cada elemento:Detalles
Conclusión