Mura CMS Métodos personalizados

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

Resumen

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:

  1. El marcado está abierto a los editores administrativos que potencialmente podrían alterar el marcado, afectando su visualización.
  2. No hay lógica alrededor de cada elemento; si no existe ISBN, por ejemplo, la etiqueta aún se mostrará con un valor en blanco al lado. Esto también sucedería si el usuario agregara este componente a una página que ni siquiera es un libro, en cuyo caso no se mostraría ninguno de los atributos extendidos..

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

Creación de un método de visualización personalizado

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:

  1. Nivel del sitio: siteID /includes/contentRenderer.cfc
  2. Nivel de tema: siteID incluye / themes / ThemeName /contentRenderer.cfc

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

Agregando a contentRenderer.cfc de tu 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.. 

Llamando a la función desde un componente

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

para evitar que CKEditor agregue más

etiquetas alrededor de la salida. Además, no olvides el paréntesis después de llamar a la función. ()

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:

Llamar a la función desde una plantilla de diseño

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:

Añadiendo un poco de lógica dinámica

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

     

Detalles

Autor: # $. contenido ('bookAuthor') #
Fecha de lanzamiento: #dateFormat ($. content ('bookReleaseDate'), 'mm / dd / aa') #
ISBN: # $. contenido ('bookISBN') #
Condición: # $. contenido ('bookNewUsed') #
Precio: $ # $. contenido ('bookPrice') #

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 Si declaración alrededor de cada línea, viendo si hay una longitud del valor mayor que 0:

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

Envuelva cada elemento de detalle de libro en el código anterior, reemplazando el $ .contenido () Valores con los valores apropiados para cada elemento:

     

Detalles

Autor: # $. contenido ('bookAuthor') #
Fecha de lanzamiento: #dateFormat ($. content ('bookReleaseDate'), 'mm / dd / aa') #
ISBN: # $. contenido ('bookISBN') #
Condición: # $. contenido ('bookNewUsed') #
Precio: $ # $. contenido ('bookPrice') #

Conclusión

Crear métodos personalizados es una excelente manera de agregar versatilidad a sus temas, así como de mantener la integridad de su código..