El archivo index.php actúa como portada del sitio y se organiza en varias secciones. Asignarles un identificador facilita enlazarlas desde el menú o desde otras páginas.
| Sección (clase) | Contenido | ID sugerido |
|---|---|---|
<header class="hero"> |
Escudo, texto editable y botón de historia | hero |
<section class="video-section"> |
Vídeo promocional de la zona | video |
<section class="detailed-intro-section"> |
Introducción a la memoria de la Hispanidad | memoria |
<section class="alternate-bg"> |
Tarjetas "Explora Nuestro Legado" | legado |
<section> (Personajes) |
Tarjetas de personajes históricos | personajes |
<section class="timeline-section-summary"> |
Resumen cronológico | timeline |
<section class="immersion-section"> |
Invitación final a profundizar en la cultura | cultura |
Para usar anclas basta con añadir id="..." a cada elemento. Por ejemplo:
<section id="video" class="video-section section spotlight-active">...</section>El archivo fragments/header.php genera el panel deslizante derecho e inserta las diferentes secciones de menú leyendo los archivos de fragments/menus/:
<?php
if (file_exists(__DIR__ . '/fragments/menus/main-menu.php')) {
include __DIR__ . '/fragments/menus/main-menu.php';
}
?>El panel también incluye admin-menu.php y social-menu.html dentro de bloques <div class="menu-section">.
- Estilos: modifica
assets/css/menus/consolidated-menu.csspara cambiar colores morado y oro viejo, anchura u otros efectos del panel.menu-panel. - Comportamiento:
assets/js/sliding-menu.jsgestiona la apertura y cierre con el atributodata-menu-target. - Añadir páginas: edita
fragments/menus/main-menu.phppara crear nuevos enlaces y añade el archivo correspondiente en el directorio del proyecto.
Al pulsar un botón con data-menu-target="id-del-panel",
assets/js/sliding-menu.js abre el panel correspondiente y añade al elemento
<body> la clase menu-open-left o menu-open-right dependiendo del lateral
desde el que se muestre el panel. Con el nuevo diseño estas clases reducen el
ancho del contenido central desde el borde activado en lugar de desplazarlo por
completo, creando un efecto de compresión lateral. El panel .menu-panel
mantiene la clase active para mostrarse u ocultarse.
assets/js/sliding-menu.js sigue actualizando los atributos aria-expanded y
aria-hidden de los botones y paneles para mantener la accesibilidad.
Tras cualquier modificacion consulta la Guia de Testing para ejecutar las pruebas.
Este bloque fijo aparece al inicio de cada página y mantiene visibles los controles principales.
Estos son los accesos que incorpora por defecto:
#consolidated-menu-buttonabre el panel lateral con toda la navegación.#open-unified-panel-buttondespliega el nuevo panel IA y la barra de idiomas.#ai-chat-triggerabre directamente el cajón IA. En móviles no se clona al panel lateral.#theme-togglealterna entre modo claro y oscuro. Los botones se sitúan en la parte superior: el de menú consolidado queda a la izquierda mientras que#open-unified-panel-buttony#ai-chat-triggerse agrupan a la derecha para equilibrar la cabecera. Al añadir más elementos al contenedor puede ser necesario ajustar la posición de los paneles deslizantes. Para ello define la variable--menu-extra-offsetcon la altura del contenedor y úsala junto a--language-bar-offsetenassets/css/menus/consolidated-menu.css:
:root {
--menu-extra-offset: 48px;
}
.menu-panel {
top: calc(var(--language-bar-offset) + var(--menu-extra-offset));
}El valor de --language-bar-offset se actualiza automáticamente cuando el
cuerpo tiene la clase lang-bar-visible. Por defecto equivale a 0px.
Esto evitará que los menús se oculten tras los botones fijos.
La variable --menu-extra-offset puede definirse también en assets/css/epic_theme.css o en tu propia hoja de estilos. Ajusta su valor al número de píxeles que ocupa #fixed-header-elements para que los paneles deslizantes queden perfectamente alineados bajo los botones.
El índice incorpora una gráfica interactiva que muestra la huella de Roma en
la región. Esta visualización se implementa con D3.js y cambia de paleta de
colores automáticamente cuando el usuario activa el modo oscuro mediante el
botón #theme-toggle.
El archivo config/forum_agents.php define los expertos que responden en el foro. Cada entrada del array contiene estos campos:
name, bio, expertise, avatar y role_icon.
return [
'historian' => [
'name' => 'Alicia la Historiadora',
'bio' => 'Con años de investigación tras ella, Alicia relata... ',
'expertise' => 'Historia medieval y orígenes de Castilla',
'avatar' => 'https://placehold.co/1024x1536.webp?text=Gonzalo+Tellez',
'role_icon' => 'fas fa-scroll'
],
// ...
];Edita sus valores o añade nuevas claves para ampliar el listado de agentes.
Los agentes deben respaldar la misión descrita en docs/README.md:
promocionar el turismo en Cerezo de Río Tirón y proteger su patrimonio arqueológico y cultural. Cada experto contribuye a este objetivo desde su área:
- historian contextualiza la historia local para turistas y residentes.
- archaeologist vela por la preservación de hallazgos.
- guide diseña rutas y comparte anécdotas.
- manager impulsa proyectos culturales.
- technologist difunde el legado en línea.
Para añadir un nuevo agente basta con incorporar otra clave al array:
// config/forum_agents.php
return [
// ... agentes existentes ...
'event_planner' => [
'name' => 'Fernando el Planificador',
'bio' => 'Organiza ferias y actividades que atraen visitantes y celebran la tradición local.',
'expertise' => 'Coordinación de eventos y turismo cultural'
],
];El panel de chat con inteligencia artificial se carga desde
fragments/header/ai-drawer.html dentro del contenedor
<div id="ai-chat-panel" class="menu-panel right-panel">.
Su estructura principal es la siguiente:
<div id="ai-drawer" class="ai-drawer">envuelve todo el contenido.<div class="ai-drawer-header">muestra el título#ai-chat-titley el botón#close-ai-drawer.<div id="ia-tools-menu">agrupa los botones de acción (#ia-summary-btn,#ia-translate-btn,#ia-research-btn,#ia-websearch-btn).<div id="gemini-chat-area">despliega los mensajes de la conversación.<div id="gemini-chat-input-container">contiene el campo de texto#gemini-chat-inputy el botón#gemini-chat-submit.<dialog id="ai-dialog">y el área#ai-response-boxsirven para mostrar la respuesta completa.
assets/js/sliding-menu.js controla la apertura y cierre de este panel utilizando
el atributo data-menu-target="ai-chat-panel". Cuando el panel se abre,
el script enfoca #gemini-chat-area y permite cerrarlo al pulsar
#close-ai-drawer. Las funciones concretas de cada botón se encuentran en
js/ia-tools.js.
- Abre
fragments/header/ai-drawer.htmly cambia el texto de los botones que necesites dentro de#ia-tools-menu. - Si deseas una acción adicional, duplica un botón con un nuevo
idy escribe su manejador enjs/ia-tools.jssiguiendo el estilo dehandleSummary()ohandleResearch(). - Recarga los archivos JavaScript y CSS tras realizar los cambios para que tengan efecto en la web.
Existe una página protegida para modificar el archivo config/forum_agents.php de forma sencilla. Se encuentra en backend/php/admin/forum_agents_admin.php y solo es accesible tras iniciar sesión como administrador.
- Abre
/backend/php/admin/forum_agents_admin.phpen tu navegador. - El formulario lista cada agente actual con campos para nombre, biografía y experiencia.
- Cambia los datos que necesites y pulsa Guardar para actualizar el archivo.
- Para añadir un nuevo agente rellena los campos del apartado Añadir Nuevo Agente indicando un identificador único.
Al enviar el formulario se regenerará config/forum_agents.php con la nueva información.
El botón #open-unified-panel-button (con data-menu-target="unified-panel") abre #unified-panel, un cajón lateral que integra navegación, herramientas del sitio y el asistente de inteligencia artificial. Dentro de este panel el chat se incrusta desde fragments/header/ai-drawer.html sin su cabecera original. Los eventos de apertura y cierre se gestionan en assets/js/ui-drawers.js.
Este nuevo panel, junto al de traducción superior, facilita el acceso inmediato a contenido multilingüe y al soporte conversacional. Su objetivo es reforzar nuestra misión de promocionar el turismo en Cerezo de Río Tirón y proteger su patrimonio arqueológico y cultural.
El archivo fragments/header/language-flags.html define #language-panel con los botones de idioma. Se puede abrir con #flag-toggle o desde el propio #unified-panel. Cuando está activo, js/lang-bar.js carga el widget de Google Translate y aplica la selección.
Para invocarlo desde cualquier página basta con un botón con data-menu-target="language-panel". assets/js/sliding-menu.js se ocupa de desplegarlo y de añadir la clase menu-open-top al <body>.
Para que los menús se posicionen correctamente, ajusta --language-bar-offset según la altura de la barra y usa los estilos de assets/css/language-panel.css.