Cómo escribí un CMS rápido para sitios estáticos en una noche de acuerdo con las reglas de la lógica empresarial en un archivo

No solo Wordpress



No solo Wordpress


El mercado de CMS ha sido durante mucho tiempo un lugar donde Wordpress, Joomla, Drupal son los tres primeros. Estos tiempos maravillosos ya están pasando gradualmente, aunque WP, desacelerándose en la dinámica de aparición de nuevos sitios, sigue liderando. No es de extrañar: una comunidad activa, una gran cantidad de complementos. Pero este artículo no se dedicará en absoluto a las "estrellas emergentes" del mercado de los sistemas de gestión de contenido (hola, soluciones basadas en Laravel). Más bien, incluso el objeto de nuestra atención será la "materia negra", que está algo fuera de lugar. Es decir, redoble de tambores ...



Sitios estáticos



CMS para sitios estáticos



¿Quién necesita estática en 2k20?



¡Pregunta racional! Parecería que los días de la telefonía, Internet y Windows95 ya han pasado, pero la demanda de generación estática de código html está comenzando a cobrar impulso nuevamente. Y la buena corporación tiene la culpa, por supuesto. Google PageSpeed ​​es el gran y poderoso Urfi ... En general, es este medidor de rendimiento de la página web el que se ha convertido tanto en el motor del progreso de Internet mundial como en el dolor de cabeza de todos los desarrolladores web, y más aún para los autónomos. Los resultados de la medición de esta herramienta se basan en los estándares de Google, y se sabe que estos son la base para la clasificación. Y objetivamente, cargar una página durante más de tres segundos aumenta automáticamente el número de rebotes. Así, la estática se convierte en una de las soluciones alternativas para reemplazar o complementar el montaje dinámico de páginas por la potencia de cualquier CMS, framework u opciones autoescritas.



,



De turno, me dedico a dar servicio a muchos proyectos, entre los que se encuentran analizadores, pero también soluciones en el campo del comercio electrónico. No me quejo de la vida, pero no surgió un problema de la categoría “2º grado, primaria”. Yo, como desarrollador y gerente (y administrar su pequeño negocio, como saben, también requiere habilidades en esta área), como en polaco “dostałem się do martwego kąta” (en una palabra, me metí en un rincón remoto). La condición es la siguiente: debe escribir una solución en unos pocos días que debería ser fácil de instalar y servir cualquier número de páginas estáticas. Además, el administrador debería poder eliminar y agregar rápidamente dicha solución a cualquier proyecto a través de una conexión FTP / SFTP, o incluso si no tiene acceso a FTP / SFTP. Por otro lado, la condición era que la versión mínima sea PHP 5.6 y debería ser bastante compatible como todas las versiones más nuevas.



El administrador debe



  1. eliminar / agregar / cambiar páginas usando el panel de administración;
  2. búsqueda global y rápida en el contenido de las páginas (teniendo en cuenta diferentes codificaciones, idiomas;
  3. buscar por nombre de archivo;
  4. eliminar / insertar / cambiar los elementos necesarios en todas las páginas con un clic desde el panel de administración;
  5. la solución debe ser fácil de instalar y desinstalar.


La seguridad no debe permitir el uso de inyección SQL o cualquier otro intento de interferir con el trabajo.



Una obligación adicional sería la capacidad de utilizar el panel de administración y todas sus funciones a través de la API. En términos generales, si hay paneles de administración de este tipo en más de 50 dominios, debería haber acceso a ellos de forma remota al poder realizar solicitudes.



República Checa, tarde, verano, café



Las tardes extremadamente tranquilas en las Montañas Gigantes solo contribuyen a la pereza. Pero, como dice el viejo proverbio, quién no trabaja ...



Así, habiendo recogido mis pensamientos y animado mi espíritu y decisión, comencé a diseñar. Está muy claro que la creación de una solución procesal no puede ser algo tan exitoso como sea posible en este caso. No es ningún secreto que existe la posibilidad de respaldar el sistema en el futuro, pero al mismo tiempo, no desea cambiar todo demasiado.



Y sí, maldita sea, decidí transferir el enfoque ya establecido en la mayoría de los marcos: el concepto OOP y MVC a un archivo.



Desde el punto de vista del desempeño, el procedimentalismo puede ser la mejor opción, pero:



  • no olvidemos el aspecto de las crecientes necesidades de los clientes y la necesidad paralela de agregar nuevas capacidades a las interfaces de nuestra aplicación web;
  • — , , ;
  • — , “ ” , - -, -.


Se decidió abandonar las bases por ahora debido a la falta de cualquier necesidad, por lo tanto el término "modelo" en todo lo que está arriba es un concepto no realizado en mi arquitectura. La falta de implementación aquí hizo un buen trabajo, porque la inyección SQL ya no es posible en principio.



Estructuración



Partiendo del hecho de que tenemos un archivo y hay una regla principal : solo se debe agregar un archivo y después de eso puede trabajar y mantener inmediatamente el directorio al que lo ha agregado, está claro que incluso las clases no lo salvarán de la "pierna del diablo".



¿Cual es la solución?



Intuitivamente: dividimos el archivo en partes estructurales de la vista: las clases del sistema base están en la parte superior, los controladores son más bajos, las vistas son aún más bajas, pero todo el ballet está cerrado por rutas. Cada parte recibió un encabezado de los comentarios con una explicación, para no olvidar al rato que aquí:



/*
* This is the part for routing
*Additional information...
*/


Nomenclatura funcional : los métodos de clases se nombraron de acuerdo con la práctica de camelCase y corresponden a un rol funcional, por ejemplo, “checkAdminCredentials” es una formulación más que comprensible para un método.



Un intento de describir todo lo que es posible: no diré que correspondía a esta intención hasta el final del desarrollo, al final, maniobré entre la velocidad y la legibilidad del código, pero logré acompañar las decisiones clave con comentarios como // para obtener html estático.



¿Cómo se realiza el enrutamiento?



La necesidad de una separación más o menos clara de interfaces fue aceptada inmediatamente por mí como una necesidad clave. Este componente, si no se implementa correctamente, puede convertirse en el "pico" de la aplicación debido a la confusión sobre qué ruta está llamando el controlador.



Basado en el problema mencionado anteriormente, hice la clase para enrutamiento bastante primitiva, pero funcional. El enrutamiento funciona mediante solicitudes GET, por supuesto, no del todo estéticamente agradable, pero la necesidad inmediata de una implementación rápida se resuelve al 100%. El enrutador se ha convertido en el único punto de entrada para una aplicación web (es decir, para el panel de administración) que, en mi opinión, es una solución ideal para facilitar el desarrollo. En esta clase, el front-end y el back-end de la aplicación web se ensamblan y el HTML generado se genera por retorno.



Pregunta: ¿escribí la bicicleta?



Me inclino a sospechar que ya se han escrito soluciones similares en el pasado, pero en julio de 2020, ni el inglés, ni el polaco, ni el checo, ni el ruso y el ucraniano me ayudaron a encontrar algo que valiera la pena y se aplicara a mi caso. Por eso el creador “se encendió” en mí, y desde el fondo de mi corazón diseñé la solución de problemas empresariales urgentes. Al fin y al cabo, si hay algún problema, hay que solucionarlo de la forma más rápida y económica posible y, además, no hay que olvidar la calidad.



Un claro ejemplo de actuación



Un CMS muy conocido, cuyo nombre no se suele llamar:







Mi solución:







Obviamente, la velocidad de conseguir el primer byte es ligeramente superior, como todos los demás indicadores relacionados con la velocidad de descarga, ni siquiera voy a demostrar la cantidad de peticiones en el front-end en el CMS clásico y en esta mini solución.



¿Habrá una secuela?



Ahora el sistema está mayormente escrito y ha visto varias actualizaciones. En un futuro próximo planeo preparar documentación de una forma u otra, pero lanzar esta solución en el viaje abierto, aunque debo decir que resuelve los problemas internos todos los días a la perfección. Hay algunos momentos más interesantes y entretenidos de la sección de búsqueda de archivos y búsqueda de contenido en archivos html, que se implementaron sin pasar por las capacidades de PHP, lo que hizo que la ejecución de estas solicitudes fuera mucho más rápida. Prometo escribir sobre estos temas en un futuro próximo.



All Articles