Documentación

Como funciona AntCMS.

Comenzamos  

Los grandes CMS utilizan MySQL o sistemas similares de gestión de bases de datos en un segundo plano. Los sistemas de gestión de bases de datos (SGBD) actúan de manera relacional y trabajan con varias tablas para gestionar las consultas, para lo que necesitan un servidor adicional. Los flat file CMS no cuentan con elementos de gestión de bases de datos, por lo que es habitual hablar de ellos como CMS sin bases de datos. Con ello no hay lugar para los SGBD y tampoco para los servidores configurados a tales efectos.

Estos sistemas pueden o bien erigirse como la solución perfecta o lograr simplicidad donde se necesita complejidad. Las ventajas de los sistemas de gestión de contenidos basados en archivos planos surgen en la mayoría de los casos de su estructura simple:

Velocidad

en el caso de los proyectos web de poca envergadura, una SGBD relacional excede el objetivo y no es realmente necesaria. Mediante la simplificación de la estructura en un sistema flat file se pueden lograr mejores tasas de velocidad.

Sencillez

las grandes bases de datos suelen tener una estructura compleja, compuesta por enlaces sobre enlaces. Cuando no se tiene mucha experiencia es fácil dar un paso en falso y provocar la caída de la base de datos como si se tratara de un castillo de naipes. Debido a que los flat file CMS se basan en una estructura sencilla de carpetas, es poco probable cometer un error fatal. Por ello, estos sistemas resultan adecuados para aquellos usuarios que ni están muy familiarizados con las bases de datos ni las necesitan realmente para sus proyectos.

Seguridad

cuanto más sencillo sea un sistema, más fácil es evitar errores, y es que la mayoría de percances ocurre al perder la visión global sobre la estructura porque es posible que se cuelen errores en la arquitectura y para encontrarlos y solucionarlos haya que invertir un gran esfuerzo. El mantenimiento de una estructura de carpetas sencilla en la que apenas haya ninguna interrelación es mucho más sencillo, lo que también se aplica a la seguridad externa, pues SQL es un blanco muy popular para ataques malintencionados. Los atacantes utilizan inyecciones SQL para filtrar comandos en la base de datos y así espiar y manipular información. Estas brechas de seguridad, sin embargo, no existen en los flat file CMS.

Backup

crear una copia de seguridad de un flat file CMS no puede ser más sencillo, y es que esto se realiza mediante la función de copiar y pegar. En el caso de los sistemas más complejos, la realización de copias de seguridad es una tarea diaria, pues con estas se guardan datos del sistema, la base de datos y todos los archivos integrados. Por el contrario, una solución flat file es suficiente para copiar todo e integrarlo en otra parte y para almacenar la información solo se necesita una memoria USB.

Traslado

cambiar de un servidor a otro en WordPress, Typo3 o Drupal es una tarea muy laboriosa. Lo que se dijo sobre el back up de un flat file CMS también tiene su validez para el traslado de la página web. Tan solo basta con copiar y pegar para que la página esté operativa en otro servidor.

Flujo de trabajo

cuando se utiliza un CMS clásico el contenido se edita en el backend. Por ello, para realizar cambios en un flat file CMS o crear contenido nuevo puedes recurrir a tu editor preferido.

Los flat file CMS son una variante relativamente nueva de los sistemas de gestión de contenidos que se erige como competidora para los CMS tradicionales como WordPress, Typo3 o Drupal. Estos sistemas se basan en los llamados flat files o archivos planos, es decir, archivos con una estructura muy sencilla, y plantean tanto ventajas como inconvenientes con respecto a los grandes rivales.

Estructura de archivos  

Siempre que sea posible, evite modificar los archivos principales de AntCMS.

antcms
    ├─ .htaccess
    ├─ AntCMS.php
    ├─ AntTpl.php
    ├─ AntConfig.php
    ├─ blocks
    │  ├─ info.html // no es necesario
    ├─ content
    │  ├─ 404.html
    │  ├─ blog
    │  │  └─ index.html
    │  ├─ index.html
    ├─ index.php
    ├─ public
    ├─ themes
    │  └─ default
    │     ├─ 404.html
    │     ├─ assets
    │     │  ├─ css
    │     │  │  ├─ bootstrap.min.css // no es necesario
    │     │  │  └─ main.css
    │     │  └─ js
    │     │     ├─ bootstrap.bundle.min.js // no es necesario
    │     │     └─ main.js
    │     ├─ blank.html // no es necesario
    │     ├─ blog.html // no es necesario
    │     ├─ functions
    │     │  ├─ actions.php
    │     │  └─ filters.php
    │     ├─ functions.php
    │     ├─ group.html
    │     ├─ home.html // no es necesario
    │     ├─ inc
    │     │  ├─ footer.inc.html
    │     │  ├─ head.inc.html
    │     │  ├─ header.inc.html
    │     │  └─ prefooter.inc.html
    │     ├─ index.html
    │     ├─ post.html // no es necesario
    │     ├─ screenshot.png // no es necesario
    │     └─ README.md // no es necesario
    └─ tmp

Acciones  

Las Acciones son funciones que podemos integrar en la plantilla para hacerla mas dináminca. Tenemos unas cuantas por defecto que son:

  • head: usada para incluir los estilos.
  • theme_before: comentarios tipo discus
  • theme_after: resolución de formularios
  • footer: Analytics y javascript

Creando Extensiones

Vamos a crear una extensión que automáticamente genere un enlace al final de cada pagina usando una acción que ya esta en la plantilla que es AntCMS::runAction('theme_after);.

<?php
    // llamamos a la acción theme_after
    AntCMS::actionAdd('theme_after',function(){
        // y ahora que enseñe esto
        echo '<a href="'.AntCMS::urlBase().'/articulos">Ver articulos.</a>';
    });

Y ahora en todas las páginas al final se verá ese enlace, asi de facil.

Ahora vamos añadir algo más, le vamos a decir que si está en la sección artículos y la página extensiones enseñe el texto y si no no enseñe nada.

<?php
    // llamamos a la acción theme_after
    AntCMS::actionAdd('theme_after',function(){
        // urlSegment sirve para señalar un segmento del enlace
        // si pones var_dump(AntCMS::urlSegments()) veras todos los segmentos del enlace
        if(AntCMS::urlSegment(0) == 'articulos' && AntCMS::urlSegment(1) == 'extensiones'){
                // y ahora que enseñe esto
            echo '<a href="'.AntCMS::urlBase().'/articulos">Ver articulos.</a>';
        }
    });

Ahora haremos una acción que cambie el fondo solo en esta página, para ello usaremos el AntCMS::actionRun('head') que hay en el archivo head.inc.html.

<?php
    // llamamos a la accion head
    AntCMS::actionAdd('head',function(){
        // urlSegment sirve para señalar un segmento del enlace
        if(AntCMS::urlSegment(0) == 'articulos' 
        && AntCMS::urlSegment(1) == 'extensiones'){
            // y ahora incrustamos esto
            echo '<style rel="stylesheet">
                body{
                    background:blue;
                    color:white;
                }
                pre,code{
                    background: #0000bb;
                    border-color: #00008e;
                    box-shadow: 0px 3px 6px -2px #02026f;
                    color: white;
                }
            </style>';
        }
    });

Bloques  

Se trata de un simple archivo html situado en la carpeta /blocks que podemos usar la etiqueta {Blocks: nombre-del-archivo}.

Es práctico para usar trozos de codigo reusables en la plantilla.

Paginas  

Estructura de la página.

Title: 
Description:
Keywords: 
Published: 
Author: 
Date: 
Image: 
Robots:
Attrs: 
Template: 
----
contenido de la pagina
CódigoInformación
TitleTítulo de la página.
DescriptionDescripción de la página.
KeywordsPalabras clave.
PublishedOpción si quiere verse o no.
AuthorAutor de la página.
DateFecha de la creación.
ImageImagen de la página.
RobotsSeguimiento indexado.
AttrsAtributos en formato Json.
TemplateNombre de la plantilla.

Plantillas  

Estructura básica.

nombreplantilla
├─ 404.html
├─ assets
│  ├─ css
│  ├─ fonts
│  ├─ images
│  └─ js
├─ blank.html
├─ blog.html
├─ functions.php
├─ group.html
├─ home.html
├─ inc
│  ├─ footer.inc.html
│  ├─ head.inc.html
├─ index.html
├─ post.html
├─ screenshot.png
└─ README.md
Nota: Los archivos en color rojo son necesarios.

Plantilla básica. index.html

{* head (metatags, css, etc..)  *}
{Partial: inc/head.inc.html}
{* action (accion que cargue antes del contenido)*}
{Action: theme_before}
{* contenido *}
{Array.content}
{* action (accion que cargue despues del contenido)*}
{Action: theme_after}
{* footer (scripts, etc..) *}
{Partial: inc/footer.inc.html}

Glosario variables de plantilla.

CódigoInformación
{* comentario *}Simple comentario.
{date}Obtener fecha.
{Year}Obtener año.
{Site_url}Obtener url del sitio.
{Site_current}Obtener hash del sitio.
{Last_posts}Ultimos articulos.
{Blog_posts}Obtener articulos.
{Blog_posts}Obtener articulos.
{If:}Inicio condicional.
{Else}Condicional else.
{Elseif:}Condicional else if.
{/If}Cierre condicional.
{Segment:}Inicio segmento, (Condicional para segmento de url).
{/Segment}Fin condicional.
{Loop:}Loop foreach ($datos as $key=>$val).
{Loop:}Loop foreach ($datos as $dato).
{/Loop}Fin loop.
{? $var = 'var' ?}Fin loop.
{$page['title']}Obtenemos las variables de la página (title,description, etc..).
{$config['title']}Obtenemos las variables del archivo config (title,description, etc..).
{'texto si codificar'|encode}Codificar en base64.
{'texto si codificar'|decode}Decodificar en base64.
{'nombre'|capitalize}Capitalizar texto.
{'nombre'|lower}Descapitalizar.
{'nombre'|e}htmlspecialchars.
{'texto muy largo'|parse}Convertir en slug.
{'texto'|md5}Convertir en md5.
{'texto'|sha1}Convertir en sha1.
{Action: nombre}Llamar acciones.
{Include: archivo}Incluir archivo.
{Block: archivo}Incluir bloque.
{Style} código {/Style}Incluir Css en el footer y deben usarse comillas simples (Por ahora solo fúnciona así).
{Script} código {/Script}Incluir Javascript en el footer y deben usarse comillas simples
{Partial: archivo}Incluir trozo de texto dentro de el directorio la plantilla.
{Assets: archivo}Incluir archivo de la carpeta de assets de la plantilla.
{Iframe: archivo}Incluir iframe.
{Youtube: archivo}Incluir id de video de youtube (Opción de formato 1x1,16x9,21x9).
{Vimeo: archivo}Incluir id de video de vimeo (Opción de formato 1x1,16x9,21x9).