Proyecto de Aprendizaje · CMS Enterprise Marzo 2026
Documento de proyecto v1.0

Corporate
Drupal +
Liferay Hub

Sitio web corporativo público construido en Drupal, integrado con un portal interno (intranet) en Liferay. Un proyecto real para aprender cómo trabajan juntos estos dos CMS en entornos enterprise.

12 Semanas
2 Tecnologías
5 Fases
1 Proyecto real

¿Qué vamos a construir?

Una agencia ficticia llamada Webnoticias Agency (usando tu propio dominio cristch-x.com) que tiene dos capas: un sitio web público para clientes, y un portal interno privado donde el equipo trabaja. Esta arquitectura es exactamente la que usan empresas reales como bancos, universidades y corporaciones.

Drupal · Capa Pública
Sitio corporativo

El sitio web que ven los clientes: servicios, portafolio de proyectos, equipo, blog y formulario de contacto. Corre en webnoticias.cristch-x.com usando tu hosting Hostinger.

Liferay · Capa Interna
Portal intranet

El portal privado del equipo: gestión de proyectos, documentos internos, directorio de empleados, anuncios y tablero de KPIs. Corre en localhost:8080 con Docker.

Cómo se conectan los dos sistemas

Drupal expone una API REST con su contenido público. Liferay puede consumir esa API para mostrar novedades de la empresa en la intranet. Así los empleados ven las publicaciones del sitio sin salir del portal interno.

👤 Clientes / Internet
HTTPS
DRUPAL
webnoticias.cristch-x.com
Hostinger · PHP
JSON:API REST ↓
👥 Equipo interno
Red local
LIFERAY
localhost:8080
Docker · Java
📡 Drupal expone JSON:API
🔄 Liferay consume la API
📰 Noticias en intranet
💡 Por qué esta arquitectura tiene sentido

Drupal es el rey del contenido estructurado y SEO. Liferay es el rey de los portales empresariales con usuarios y roles complejos. Juntos cubren todo lo que una empresa necesita: cara al público + operaciones internas.


Qué tendrá cada sistema

🌐 Drupal — Sitio público (webnoticias.cristch-x.com)

🏠
Página de inicio
Hero section, servicios destacados, últimos proyectos y CTA de contacto
💼
Portafolio de proyectos
Content Type personalizado con campos: cliente, tecnología usada, imagen, descripción, fecha
⚙️
Servicios
Listado de servicios con taxonomía por categoría (Web, Diseño, Consultoría)
👥
Equipo
Content Type para miembros del equipo: nombre, cargo, foto, redes sociales
📝
Blog / Noticias
Artículos con categorías, tags, autor y fecha. Estos se expondrán vía JSON:API
📬
Contacto
Formulario con Webform. Campos: nombre, email, empresa, mensaje, presupuesto

🔒 Liferay — Portal interno (localhost:8080)

📊
Dashboard de bienvenida
KPIs del mes, anuncios internos, accesos rápidos a documentos y últimas novedades del sitio público
📁
Repositorio de documentos
Documents and Media de Liferay. Propuestas, contratos, plantillas organizados por carpetas
🗂️
Directorio de empleados
Web Content Structure personalizada: empleado, área, cargo, teléfono, foto de perfil
📢
Anuncios internos
Portlet de anuncios de Liferay. Solo visible para empleados autenticados con roles
🌐
Feed del sitio público
Portlet que consume la JSON:API de Drupal y muestra los últimos artículos del blog
🎯
Gestión de proyectos
Web Content personalizado para seguimiento de proyectos activos con estado y responsable

Cómo Liferay consume Drupal

La integración real entre los dos sistemas ocurre a través de la API REST de Drupal. En Liferay, un portlet personalizado (o iframe + JavaScript) consulta esa URL y muestra los datos en la intranet.

Drupal publica
Activa módulo JSON:API
Endpoint de artículos
Permisos de acceso anónimo
Campos: título, cuerpo, fecha, imagen
REST API
JSON:API
Liferay consume
Portlet web con fetch()
Muestra últimas 5 noticias
Solo visible a empleados
Link directo al sitio público
// URL de la API de Drupal (en webnoticias.cristch-x.com)
https://webnoticias.cristch-x.com/jsonapi/node/article

// En el portlet de Liferay (JavaScript/HTML)
fetch('https://webnoticias.cristch-x.com/jsonapi/node/article?sort=-created&page[limit]=5')
  .then(res => res.json())
  .then(data => {
    // data.data = array de artículos del blog
    // data.data[0].attributes.title = título
    // data.data[0].attributes.created = fecha
  });

Módulos y herramientas a usar

Herramienta / Módulo Sistema Para qué sirve en este proyecto
JSON:API (incluido en core) Drupal Expone el contenido como API REST. Es el puente con Liferay
Views (incluido en core) Drupal Crear listados del portafolio, equipo y blog con filtros
Webform Drupal Formulario de contacto con notificaciones por email
Pathauto Drupal URLs amigables automáticas: /proyectos/nombre-proyecto
Bootstrap Barrio Drupal Tema base responsive para personalizar el diseño corporativo
Metatag Drupal SEO: meta títulos y descripciones para cada página
Web Content Structures Liferay Definir campos del directorio de empleados y proyectos
Documents and Media Liferay Repositorio de documentos internos con permisos por rol
Roles & Permissions Liferay Admin, Editor, Empleado — cada uno con acceso diferente
Asset Publisher Liferay Mostrar listado de empleados y proyectos activos
Fragments Liferay Diseñar el layout del dashboard con bloques drag & drop
Docker Desktop Ambos Corre Liferay en local sin necesitar un servidor Java real

Las 5 fases del proyecto

01
Entornos y estructura base Semanas 1–2

Montar todo antes de escribir una sola línea de contenido.

D Instalar Drupal en webnoticias.cristch-x.com (subdominio en Hostinger)
D Instalar módulos: Views, Pathauto, Admin Toolbar, Webform, Bootstrap Barrio, JSON:API, Metatag
L Instalar Docker Desktop y correr: docker run liferay/portal:7.4.3.112-ga112
L Configurar Site en Liferay llamado "Webnoticias Intranet" y crear 3 roles: Admin, Editor, Empleado
02
Content Types y Structures Semanas 3–5

Definir la arquitectura de datos de ambos sistemas.

D Crear Content Types: Proyecto (cliente, tech, imagen), Servicio (categoría, descripción), Miembro del equipo
D Crear taxonomías: Tecnologías (Drupal, WordPress, Webflow...), Servicios (Web, Diseño, Consultoría)
L Crear Web Content Structure "Empleado": nombre, área, cargo, foto, teléfono, email interno
L Crear Web Content Structure "Proyecto interno": nombre, cliente, estado (activo/pausado/cerrado), responsable
03
Diseño y páginas Semanas 6–8

Construir las interfaces de los dos sistemas con contenido real de prueba.

D Diseñar tema hijo de Bootstrap Barrio con colores y logo de Webnoticias
D Crear Views para: listado de proyectos, listado de servicios, página del equipo
D Configurar formulario de contacto con Webform + notificación por email
L Diseñar dashboard con Fragments: bienvenida, accesos rápidos, KPIs de ejemplo
L Crear página de Directorio con Asset Publisher mostrando empleados
L Configurar Documents and Media con carpetas: Propuestas, Contratos, Recursos, Plantillas
04
La integración: Drupal → Liferay Semanas 9–10

El momento más interesante: conectar los dos sistemas.

D Habilitar JSON:API y verificar que webnoticias.cristch-x.com/jsonapi/node/article devuelve datos
L Crear portlet HTML/JavaScript en el dashboard que hace fetch() a la API de Drupal
L Mostrar las últimas 5 noticias del blog en el panel de empleados con título, fecha y link
Probar el flujo completo: publicar en Drupal → ver automáticamente en la intranet de Liferay
05
Pulido, documentación y portafolio Semanas 11–12

Terminar con calidad profesional y documentar para tu portafolio técnico.

D SEO: configurar Metatag en todos los Content Types, sitemap.xml
L Permisos finales: que empleados no puedan editar documentos de otros roles
Crear repositorio en GitHub con README documentando la arquitectura
Grabar un video corto (Loom) mostrando el flujo completo — ideal para entrevistas

Cómo organizar tu repositorio en GitHub

webnoticias-corporate-hub/
├── README.md ← documentación del proyecto
├── drupal/ ← todo lo de Drupal
│ ├── config/ ← exportación de la config (drush config:export)
│ ├── themes/antpack_theme/ ← tu tema hijo personalizado
│ │ ├── antpack_theme.info.yml
│ │ ├── css/style.css
│ │ └── templates/
│ └── screenshots/ ← capturas para el portafolio
├── liferay/ ← todo lo de Liferay
│ ├── docker-compose.yml ← para levantar Liferay fácil
│ ├── portal-ext.properties ← config de Liferay
│ ├── portlets/drupal-feed/ ← el portlet de integración
│ │ └── index.html ← HTML+JS que consume la API de Drupal
│ └── screenshots/
└── docs/
├── arquitectura.png ← diagrama del sistema
├── drupal-contenidos.md ← content types documentados
└── liferay-roles.md ← roles y permisos
💡 Por qué documentar desde el inicio

El README de GitHub con capturas de pantalla del proyecto funcionando vale más en una entrevista que cualquier certificado. Muestra que entiendes la arquitectura, no solo que seguiste un tutorial. Cuando le cuentes a Geraldine que tienes esto en GitHub, te va a mirar diferente.

Drupal ⏱ 30 minutos
Paso 1: Instalar los módulos esenciales

Tu Drupal en webnoticias.cristch-x.com está recién instalado. Lo primero es agregar los módulos que vas a necesitar para todo el proyecto.

Los módulos en Drupal son como plugins en WordPress. Se instalan desde el panel de administración sin tocar código. Ve a tu Drupal en webnoticias.cristch-x.com/admin y sigue estos pasos.

ℹ️
Cómo instalar módulos en Drupal

Ve a Manage → Extend → Install new module. Pega la URL del módulo desde drupal.org/project/NOMBRE_MODULO. Ejemplo: drupal.org/project/webform → copia la URL del .zip → pégala en Drupal.

📦 Módulos a instalar (uno por uno)
⚙️
Admin ToolbarBarra de admin mejorada, navegación más rápida
🔗
PathautoURLs automáticas como /proyectos/nombre-proyecto
📝
WebformPara el formulario de contacto con notificaciones
🔍
MetatagSEO: títulos y descripciones por página
🎨
Bootstrap BarrioTema base responsive para diseñar el sitio
📡
JSON:API (ya incluido)Solo activarlo en Extend, no hay que instalarlo
✅ Tareas de este paso
Ir a webnoticias.cristch-x.com/admin y hacer login con tu usuario admin
Instalar Admin Toolbar desde drupal.org/project/admin_toolbar
Instala también Admin Toolbar Extra Tools cuando lo pida
Instalar Pathauto desde drupal.org/project/pathauto
Instalará Token automáticamente como dependencia
Instalar Webform desde drupal.org/project/webform
Instalar Metatag desde drupal.org/project/metatag
Instalar Bootstrap Barrio desde drupal.org/project/bootstrap_barrio
Después de instalar, ve a Appearance → Enable and set as default
Activar JSON:API: ve a Manage → Extend → busca "JSON:API" → Enable
Ya viene incluido en Drupal core, solo necesita activarse
Drupal ⏱ 45 minutos
Paso 2: Crear los Content Types

Los Content Types son la columna vertebral de Drupal. Piénsalos como Custom Post Types de WordPress pero mucho más configurables.

Drupal ⏱ 15 minutos
Paso 3: Crear las Taxonomías

Las taxonomías son sistemas de clasificación. Son como las categorías y etiquetas de WordPress pero más flexibles.

Drupal ⏱ 60 minutos
Paso 4: Configurar Views

Views es el módulo más poderoso de Drupal. Te permite mostrar cualquier contenido, filtrado y ordenado como quieras, sin escribir código SQL.

Drupal ⏱ 90 minutos
Paso 5: Tema e identidad visual

Personalizar Bootstrap Barrio para que el sitio tenga una identidad visual propia, no el aspecto genérico de Drupal.

Drupal ⏱ 20 minutos
Paso 6: Activar y verificar JSON:API

Este paso conecta Drupal con Liferay. Vas a verificar que tu API funciona antes de tocar Liferay.

Liferay ⏱ 20 minutos (descarga)
Paso 7: Instalar Docker Desktop

Docker es la herramienta que te permitirá correr Liferay (que necesita Java) en tu Mac sin instalar nada de Java manualmente.

Liferay ⏱ 15 min + 10 min para arrancar
Paso 8: Levantar Liferay con Docker

Un solo comando en la Terminal y tendrás Liferay corriendo en tu computador.

Liferay ⏱ 45 minutos
Paso 9: Configurar el Site en Liferay

Crear el sitio de la intranet, los roles de usuario y las páginas principales del portal interno.

Liferay ⏱ 60 minutos
Paso 10: Crear Web Content Structures

Las Structures en Liferay son como los Content Types de Drupal: definen qué campos tiene cada tipo de contenido.

Integración ⏱ 60 minutos
Paso 11: Conectar Drupal → Liferay

El corazón del proyecto. Liferay va a consumir la API de Drupal y mostrar los artículos del blog en la intranet en tiempo real.

Integración ⏱ 30 minutos
Paso 12: Prueba final del flujo completo

Verificar que todo funciona de punta a punta: publicar en Drupal y verlo reflejado en la intranet de Liferay.

📱
Instalar Corporate Hub
Agregar a tu pantalla de inicio
🤖
Hub Assistant
Selecciona un modelo
👋 ¡Hola! Soy tu asistente de desarrollo web.

Conozco a fondo los 12 pasos del proyecto Corporate Hub, pero también puedo ayudarte con cualquier pregunta de desarrollo: HTML, CSS, JavaScript, React, PHP, WordPress, Git, APIs, SEO y mucho más. ¿En qué te ayudo?