Voy a dedicar la primera entrada de este sitio al sistema de gestión de contenidos que lo hace posible.
Bludit nos permite crear y gestionar desde un sitio web estático muy simple hasta uno de cierta complejidad, con contenidos dinámicos y múltiples secciones, muy fácilmente. Lo que sin duda resulta más atractivo es que todo esto puede hacerse sin necesidad de un servidor de bases de datos. El sistema de gestión de contenidos Bludit almacena toda la información en archivos flat-file en el disco rígido del servidor, por lo que puede tener, como es de esperarse, una performance algo menor que aquellas plataformas que hacen uso de sistemas de bases de datos sobre un modelo cliente-servidor. No obstante, Bludit tolerará volúmenes de datos y operaciones que deberían, en la mayoría de los casos, satisfacer ampliamente las necesidades de procesamiento y recuperación de información de un sitio web personal o empresarial.
Esta entrada se propone una inspección del funcionamiento de Bludit detrás de su front-end: los archivos y directorios afectados por la creación de nuevos contenido y su organización en categorías.
"Simple, Fast, Secure, Flat-File CMS"
Flat file, literalmente "fichero chato", es un formato de archivo en el que la única información disponible se almacena en una tabla bidimensional o tabla de doble entrada. En consecuencia, un flat file no incluye información sobre la relación entre registros ni definiciones de métodos o funciones. Generalmente se trata de archivos de texto plano o plain-text, es decir, emplean únicamente símbolos que un editor de textos puede representar, sin información adicional acerca del formato de presentación de ese texto al usuario o bien especificándolo en el mismo conjunto de símbolos que su contenido admite. Básicamente, pueden ser leídos y modificados por cualquier persona usando un editor de textos con capacidad para procesar archivos en formato de texto plano.
Bludit hace uso de JSON, un formato orientado al intercambio de datos que encuentra antecedentes en el XML pero con soporte nativo en JavaScript.
Una alternativa interesante que nos proporciona esta arquitectura es que una Web creada con Bludit podrá editarse en su totalidad trabajando directamente sobre estos ficheros.
{
"libros" :
[
{"titulo": "Martín Fierro", "autor": "Hernández, M.", "paginas":350},
{"titulo": "Don Quiojte", "autor": "Cervantes, M.", "paginas":600},
{"titulo": "Adán Buenosayres", "autor": "Marechal, L.", "paginas":900}
]
}
En este objeto JSON tenemos un dato con la clave "libros" cuyo valor es un arreglo de otros objetos, de tres datos cada uno, especificados con las claves "titulo", "autor" y "paginas".
De modo que puede representarse como una tabla de dos dimensiones:
titulo | autor | paginas | |
libros[0] | Martín Fierro | Hernández, M. | 350 |
libros[1] | Don Quijote | Cervantes, M. | 600 |
libros[2] | Adán Buenosayres | Marechal, L. | 900 |
Debemos atender también al tipo de valor que una clave pueda tener dentro de un dato. A los fines de poder comprender y editar los ficheros de bases de datos que Bludit construye como flat files en JSON, nos detendremos en cinco de ellos:
Los contenidos en Bludit son, por defecto, almacenados en ficheros que contienen el cuerpo de la página en crudo, HTML raw, en directorios individuales dentro de ./bl-content/pages/, mientras que sus atributos (título de la página, categoría, fecha de creación, autor o autora, entre otros) se registran en un archivo con formato JSON en ./bl-content/databases/pages.php.
Para el caso de un blog con dos entradas tituladas Página 1 y Página 2, tendríamos, restringiéndonos a los ficheros y directorios mínimos a los que afecta la creación de nuevos contenidos, un esquema similar al siguiente:
\.
└───bl-content
├───pages
| ├───pagina-1
| | index.php
│ └───pagina-2
| index.php
└───databases
pages.php
Contenido posible del fichero BASE/bl-content/databases/pages.php:
{
"pagina-1":{
"title":"Página 1",
"description":"Página de prueba creada por mí",
"username":"martina0",
"tags":[
"etiqueta1",
"etiqueta2"
],
"type":"published",
"date":"2023-01-03 16:00:00",
"dateModified":"",
"position":3,
"coverImage":"",
"category":"",
"md5file":"7cb0f7205205c2180ee2e60aecfc154e",
"uuid":"c69f688395c84ff13563f00d5b762c2c",
"allowComments":true,
"template":"",
"noindex":false,
"nofollow":false,
"noarchive":false,
"custom":[
false
]
},
"pagina-2":{
"title":"Página 2",
"description":"Borrador de otra página de pruebas",
"username":"lea_yo",
"tags":[
"etiqueta1",
"etiqueta3"
],
"type":"draft",
"date":"2023-01-03 17:01:00",
"dateModified":"",
"position":3,
"coverImage":"",
"category":"",
"md5file":"95ec30db2f0bd4dc220741512bb1817f",
"uuid":"e25be89906a196f664a42371e05ed598",
"allowComments":true,
"template":"",
"noindex":false,
"nofollow":false,
"noarchive":false,
"custom":[
false
]
}
}
CLAVES | DESCRIPCIÓN |
title | Cadena de texto. Título de la publicación. |
description | Cadena de texto. Descripción de la publicación. |
username | Cadena de texto. Nombre de usuario del autor del post. |
tags | Array. Array de etiquetas como cadenas de texto. |
type | Cadena de texto. Admite los valores "draft" (borrador), "published" (publicada), "scheduled" (programada), "static" (estática) o "sticky" (igual que static pero fijada en la parte superior). |
date | Cadena de texto. Fecha de publicación en formato "AAAA-MM-DD HH:MM:SS" |
dateModified | Cadena de texto. Fecha de modificación en formato "AAAA-MM-DD HH:MM:SS" |
position | Nùmero. |
coverImage | Cadena de texto. Nombre del archivo de imagen que será utilizado como portada de la publicación. |
category | Cadena de texto. Nombre interno de la categoría. |
md5file | Cadena de texto. Hash MD5 del archivo de página index.txt dentro del directorio correspondiente en BASE/bl-content/pages/ |
uuid | Cadena de texto. Identificador único de cada publicación. Las imágenes que se adjunten a una página se almacenarán en un directorio cuyo nombre será el uuid de la publicación dentro de BASE/bl-content/uploads/pages/ |
allowComments | Lógico. |
template | ? |
noindex | Lógico. Indica a los motores de búsqueda que no muestren esta página en sus resultados de búsqueda. Añade una etiqueta meta "robots" en el HTML generado con "noindex" en el atributo "content" o lo agrega al atributo "content" en una etiqueta meta "robots" existente. |
nofollow | Lógico. Indica a los motores de búsqueda que no sigan los enlaces de esta página. Añade una etiqueta meta "robots" en el HTML generado con "nofollow" en el atributo "content" o lo agrega al atributo "content" en una etiqueta meta "robots" existente. |
noarchive | Lógico. Indica a los motores de búsqueda que no guarden una copia almacenada en caché de esta página. Añade una etiqueta meta en el HTML generado con "noarchive" en el atributo "content" o lo agrega al atributo "content" en una etiqueta meta "robots" existente. |
custom | Array. Campos personalizados. |
Puede resultar curioso que ninguna de estas propiedades es requerida obligatoriamente salvo type, sin la cual la página permanecerá oculta sin mostrarse en ninguna lista de páginas y uuid .
Podemos encontrar una descripción completa del árbol de directorios en Bludit en la documentación oficial (en inglés). Aquí nos centraremos únicamente en los ficheros que conforman el contenido y los metadatos de una página o entrada de blog. Por eso lo siguiente es...
Al comenzar con una instalación desde cero de Bludit, el script install.php establece automáticamente las categorías general, music y videos. Lo hace escribiendo el siguiente bloque JSON en el flat file ./bl-content/databases/categories.php
ATENCIÓN: EN LA VERSIÓN 3.14.1 DE BLUDIT ES NECESARIO REEMPLAZAR LA LÍNEA 352 DE install.php
352c352
< array_push($slugs, $slug); ---
> array_push($slugs, $L->get($slug));
<?php defined('BLUDIT') or die('Bludit CMS.'); ?> { "general": { "name": "General", "description": "", "template": "", "list": [ "crea-tu-propio-contenido", "set-up-your-new-site", "follow-bludit", "acerca-de" ] }, "music": { "name": "Music", "description": "", "template": "", "list": [] }, "videos": { "name": "Videos", "description": "", "template": "", "list": [] } }
Los temas Alternative y Blog X, incluidos en la instalación estándar de la versión 3.14.1 de Bludit no presentan la lista de enlaces de categorías ni cuentan con una plantilla diferenciada para las páginas de categoría que emplee el valor de la clave 'description' en su diseño. Utilizando estos temas, la descripción se volcará en una etiqueta <meta name="description"> del código HTML permaneciendo invisible al usuario.
En el tema Blog X disponemos de una barra lateral a la que es posible añadir una lista de enlaces de categorías activando el plugin Categorías. A esto lo hacemos desde el panel de administración -> sección Plugins.
La URL de las páginas de categoría sigue el modelo BASE/category/nombre_de_la_categoría. El chunk category puede tener otro identificador según se haya definido Ajustes --> General --> Avanzado --> Filtros de URL o en el valor para la clave uriCategory de BASE/bl-content/databases/site.php.
VARIABLE | DESCRIPCIÓN |
name | Cadena de texto. Nombre de la categoría para mostrar al usuario. El plugin Categorías utilizará esta propiedad como texto de enlace. |
description | Cadena de texto. Como explicamos antes, en los temas que se incluyen en la instalación estándar de Bludit el valor de esta propiedad se volcará en una etiqueta <meta name="description" ...> |
template | ? |
list | Array. Lista de páginas asignadas a la categoría como cadenas de texto cuyo valor será la clave de la definición de la página en BASE/bl-content/databases/pages.php: ["pagina-1", "pagina-2", "pagina-3"]. |
Esperamos haber acercado al lector al funcionamiento interno de la creación de contenidos con un CMS tan singular como Bludit. Volveremos a ocuparnos de este gestor de contenidos.
Dejanos un comentario, compartí en redes o regalame un backlink desde tu web.