# Módulos y Ensamblaje

## Concepto

Un **módulo** es una unidad funcional que se activa/desactiva por proyecto y que se **adapta visualmente** al demo activo.

## Activación

```php
config('cd-system.modules.blog.active', true)
config('cd-system.modules.menu.active', true)
is_module_active('blog')  // helper
```

## Navegación Dinámica

Los módulos activos aparecen en header y footer según:

- `cd-system.modules.{x}.navigation.header`
- `cd-system.modules.{x}.navigation.footer`

El helper `get_dynamic_navigation('header')` construye la navegación a partir de estos valores.

## Adaptación al Demo

Cada módulo debe:

1. **Incluir un partial `dynamic-header.blade.php`** que detecte el demo activo y renderice el estilo correcto.
2. **Respetar el scoping CSS** del demo (ej: `html.demo-restaurant`).
3. **Usar las clases del tema** cuando existan variantes (ej: `page-header-modern` para restaurant).

### Patrón de Adaptación

```
Módulo Blog
├── frontend/
│   ├── index.blade.php          # Vista principal
│   ├── show.blade.php           # Detalle artículo
│   └── partials/
│       └── dynamic-header.blade.php  # Detecta demo, renderiza variante
```

El `dynamic-header` es el punto de integración con el demo. El resto de la vista usa clases genéricas que el demo CSS redefine si hace falta.

## Vistas por Módulo

| Módulo | Ruta típica | Vista principal |
|--------|-------------|------------------|
| blog | /blog | modules/blog/frontend/index.blade.php |
| menu | /menu | modules/menu/frontend/index.blade.php |
| services | /services | modules/services/frontend/index.blade.php |
| projects | /projects | modules/projects/frontend/index.blade.php |
| gallery | /gallery | modules/gallery/frontend/index.blade.php |
| faqs | /faqs | modules/faqs/frontend/index.blade.php |
| team-members | /team | modules/team-members/frontend/index.blade.php |
| products | /products | modules/products/frontend/index.blade.php |
| references | /references | modules/references/frontend/index.blade.php |
| contact | /contact | cd-base (vista del demo) |

## Orden de Resolución

1. **Config**: demo activo + módulos activos.
2. **Layout**: master → header/footer del demo.
3. **Contenido**: welcome/about/contact del demo, o vista del módulo.
4. **Page header**: partial del módulo con estilo del demo.

## Documentación de Adaptación

Para cada módulo que tenga variantes por demo, documentar en:

- `docs/demos/{demo}/03-modulos-integrados.md` qué módulos usa el demo y cómo se adaptan.
- `docs/core/MODULO-MENU-ADAPTACION-MULTI-DEMO.md` (o similar) para guías genéricas de adaptación.
