La clase `Html` es un utilitario básico diseñado para la generación controlada de etiquetas HTML y para la visualización segura de código en la web. Permite construir elementos de dos tipos (etiquetas solas y pares con contenido) utilizando plantillas predefinidas.
Estas constantes definen el modo de creación de la etiqueta en el método `crear()`.
| Constante | Valor | Descripción |
|---|---|---|
SOLA |
'1' |
Se utiliza para generar una etiqueta autocerrada (ej: <br>, <img>), que no tiene contenido ni etiqueta de cierre separada. |
PAR |
'2' |
Se utiliza para indicar que se debe usar la plantilla de etiqueta con par (apertura y cierre). |
TEXTO |
'3' |
Se utiliza internamente para indicar que el valor a insertar es el contenido (texto o HTML anidado) de una etiqueta de par. |
public function __construct(private array $base)El constructor inicializa la propiedad privada $base, que contiene las plantillas básicas para generar HTML:
private array $base = [
["\n<","1",">\n"], // Plantilla para SOLA (<tag>)
["\n<","2",">\n"," ...LOGO ART... ","\n</","4",">\n"] // Plantilla para PAR (<tag> Contenido </tag>)
]
'1', '2', '4') son placeholders que serán reemplazados por el nombre de la etiqueta.$base[1][3] contiene un arte ASCII predefinido, que actúa como el contenido por defecto (o inicial) para las etiquetas de par.Estos métodos manejan la manipulación interna de las plantillas en la propiedad $base.
private function modificar(string $ubicacion, string $insertar)Reemplaza los *placeholders* en las plantillas según la ubicación:
private function obtener(string $ubicacion)Une y devuelve la cadena HTML de la plantilla modificada:
public function crear(string $etiqueta, string $contenido): stringMétodo principal para generar HTML. Recibe la etiqueta (con o sin atributos) y el contenido.
public function logo(): stringDevuelve el arte ASCII del logo que está preestablecido como contenido por defecto en la plantilla de par (`$this->base[1][3]`).
public function imprimir(string $x, string $path, bool $ejecutar_codgo = false): voidControla cómo se muestra el resultado en la página web.
echo $x. El HTML es renderizado por el navegador.htmlspecialchars($x) para escapar los caracteres HTML (convierte `<` en `<`) y nl2br() para preservar los saltos de línea. Esto hace que el código sea visible como texto, no como elementos renderizados.imprimir() con el modo `false` es excelente para documentación, ya que utiliza htmlspecialchars() para evitar que el código de ejemplo se ejecute.El siguiente ejemplo muestra la creación de una etiqueta anidada, la visualización del código y la ejecución del HTML en la misma página.
<?php
// Asumimos que la clase Html está en la ubicación correcta.
require_once "../Etiquetas/Html.php";
$html = new Html; // Instancia 1: Para visualizar el código (imprimir=false)
$html2 = new Html; // Instancia 2: Para ejecutar el código (imprimir=true)
// Bloque 1: Visualiza el código generado (No lo ejecuta)
$html -> imprimir (
$html -> crear (
'div id="logo"' , // Etiqueta externa (PAR)
$html -> crear (
'img src="../Archivos/Imagenes/logo.png" alt="logo"' ,
SOLA // Etiqueta anidada (SOLA)
)
) ,
"../Archivos/Js" , // Ruta donde se encuentra 'copytxt.js'
false // Muestra el código (escapado)
);
// Bloque 2: Ejecuta el código generado (Lo renderiza)
$html2 -> imprimir (
$html2 -> crear (
'div' ,
$html2 -> logo () // Usa el arte ASCII preestablecido
) ,
"../Archivos/Js" ,
true // Ejecuta el HTML (lo renderiza en el navegador)
);
?>
<div id='contenedor-texto'>
<br />
<div id="logo">
<br />
<img src="../Archivos/Imagenes/logo.png" alt="logo">
<br />
</div>
</div>
<br><button id='boton-copiar'>copy txt</button><script src='../Archivos/Js/copytxt.js'></script>
*(Note que el código HTML se muestra como texto literal)*
El navegador renderizaría lo siguiente, insertando el arte ASCII dentro de un `div`:
<div>
<pre>
███████ █████████ █████████
... (el resto del arte ASCII) ...
</pre>
</div>
*(El navegador mostraría un div conteniendo el arte ASCII renderizado)*