Skip to content

Guía de componentes Vue ​

Esta página recoge los componentes Vue utilizados en los apuntes de Desarrollo Web en Entorno Servidor.

Los componentes se encuentran principalmente en:

docs/.vitepress/theme/components/

TIP

Los containers se utilizan para bloques de contenido (objetivos, definiciones, prácticas, referencias, etc.).

Los componentes Vue permiten incorporar elementos visuales especializados, reutilización e interactividad.

Catálogo de componentes ​

ComponenteFinalidad
PhpRunnerEjecutar código PHP
EjercicioIncorporar ejercicios independientes
ColorDestacar fragmentos de texto
CmdDocumentar comandos
CmdPaneAgrupar comandos
CardMostrar tarjetas
CardPaneAgrupar tarjetas
DropDownMostrar u ocultar contenido
QuizIncorporar preguntas interactivas
ButtonSlidesEnlazar presentaciones
EnConstruccionSeñalar contenido pendiente
RequestJourneyVisualizar una petición web
ObjetivosModuloObjetivos generales del módulo
StackOficialPresentar tecnologías oficiales
IndiceCursoMostrar el índice del curso

PhpRunner ​

Permite ejecutar código PHP directamente desde los apuntes.

Sintaxis ​

md
<PhpRunner filename="hola.php" description="Primer programa">

```php
<?php
echo "Hola mundo";
```

</PhpRunner>

Resultado ​

php
<?php
echo "Hola mundo";
PHPPrimer programa
hola.php
Salida
Pulsa «Ejecutar» para ver el resultado.

Ejercicio ​

Incorpora un ejercicio almacenado en un archivo Markdown independiente.

Sintaxis ​

md
<Ejercicio id="php-arrays-001" />

Ejemplo ​

WARNING

Este componente está pendiente de completar su diseño.

Debe permitir reutilizar ejercicios, acceder a su URL independiente e integrar PhpRunner.


Color ​

Permite destacar fragmentos de texto.

Sintaxis ​

md
<Color>Texto destacado</Color>

Resultado ​

Texto destacado

Cmd y CmdPane ​

Estos componentes están relacionados:

  • Cmd representa una tarjeta que explica un comando.
  • CmdPane agrupa tarjetas en una cuadrícula responsive.

Propiedades de Cmd ​

PropiedadTipoObligatoriaDescripción
namestringSíNombre del comando
mnestringNoSignificado o regla mnemotécnica
examplestringNoEjemplo de ejecución
pkgstringNoPaquete que debe instalarse
needstringNoRequisito previo
widebooleanNoOcupa todo el ancho de la cuadrícula

El texto delimitado por * dentro de mne se destaca mediante el componente Color.

Ejemplo básico ​

md
<Cmd
  name="pwd"
  mne="*P*rint *W*orking *D*irectory"
  example="pwd"
>
Muestra el directorio de trabajo actual.
</Cmd>

Resultado ​

Muestra el directorio de trabajo actual.

Agrupar comandos ​

md
<CmdPane>

<Cmd
  name="pwd"
  mne="*P*rint *W*orking *D*irectory"
  example="pwd"
>
Muestra el directorio actual.
</Cmd>

<Cmd
  name="ls"
  mne="*L*i*s*t"
  example="ls -la"
>
Lista archivos y directorios.
</Cmd>

<Cmd
  name="cd"
  mne="*C*hange *D*irectory"
  example="cd /var/www/html"
>
Cambia de directorio.
</Cmd>

<Cmd
  name="mkdir"
  mne="*M*a*k*e *Dir*ectory"
  example="mkdir proyecto"
>
Crea un directorio.
</Cmd>

</CmdPane>

Resultado ​

Muestra el directorio actual.
Lista archivos y directorios.
Cambia de directorio.
Crea un directorio.

Instalación de paquetes ​

La propiedad pkg genera automáticamente la instrucción sudo apt install.

md
<Cmd
  name="tree"
  pkg="tree"
  example="tree -L 2"
>
Muestra los directorios en forma de árbol.
</Cmd>

Resultado ​

Muestra los directorios en forma de árbol.

Requisitos previos ​

La propiedad need permite indicar un requisito.

md
<Cmd
  name="docker"
  need="Requiere tener Docker instalado."
  example="docker ps"
>
Muestra los contenedores en ejecución.
</Cmd>

Resultado ​

Muestra los contenedores en ejecución.

Tarjeta de ancho completo ​

La propiedad wide permite ocupar las dos columnas de CmdPane.

md
<CmdPane>

<Cmd
  name="docker compose up"
  example="docker compose up -d --build"
  wide
>
Construye las imágenes necesarias e inicia los servicios.

La opción `-d` ejecuta los contenedores en segundo plano.
</Cmd>

<Cmd
  name="docker compose ps"
  example="docker compose ps"
>
Muestra los servicios.
</Cmd>

<Cmd
  name="docker compose down"
  example="docker compose down"
>
Detiene y elimina los contenedores.
</Cmd>

</CmdPane>

Resultado ​

Construye las imágenes necesarias e inicia los servicios.

La opción -d ejecuta los contenedores en segundo plano.

Muestra los servicios.
Detiene y elimina los contenedores.

Comportamiento responsive

  • CmdPane utiliza una columna en pantallas pequeñas.
  • A partir de 900 px muestra dos columnas.
  • wide ocupa las dos columnas disponibles.
  • Un Cmd también puede utilizarse fuera de CmdPane.

Permite mostrar y ocultar contenido utilizando el elemento HTML <details>.

Opcionalmente puede solicitar una contraseña antes de mostrar el contenido.

Propiedades ​

PropiedadTipoObligatoriaDescripción
titlestringNoTexto de la cabecera
passwordstringNoContraseña para desplegar el contenido

Si no se indica title, aparece Ver contenido.

Ejemplo básico ​

md
<DropDown title="¿Qué es PHP?">

PHP es un lenguaje de programación especialmente utilizado
para desarrollar aplicaciones web en el servidor.

</DropDown>

Resultado ​

¿Qué es PHP?

PHP es un lenguaje de programación especialmente utilizado para desarrollar aplicaciones web en el servidor.

Contenido protegido

Introduce la contraseña para ver el contenido.

Ejemplo con código ​

md
<DropDown title="Ver solución">

```php
<?php
$nombre = "Ana";
echo "Hola $nombre";
```

</DropDown>

Resultado ​

Ver solución
php
<?php
$nombre = "Ana";
echo "Hola $nombre";

Contenido protegido

Introduce la contraseña para ver el contenido.

Contenido protegido mediante contraseña ​

md
<DropDown
  title="Ver solución protegida"
  password="1234"
>

La solución es **42**.

</DropDown>

Resultado ​

Ver solución protegida

La solución es 42.

Contenido protegido

Introduce la contraseña para ver el contenido.

Seguridad

La contraseña se incorpora al código enviado al navegador.

Por tanto, no constituye una protección real de información confidencial.

Es adecuada únicamente como barrera didáctica para evitar que el alumnado consulte accidentalmente una solución.


ButtonSlides ​

Permite mostrar un botón que abre una presentación en una pestaña nueva.

Propiedades ​

PropiedadTipoObligatoriaDescripción
hrefstringSíURL de la presentación

El texto del botón es fijo: 🎬 Ver diapositivas.

Sintaxis ​

md
<ButtonSlides href="/slides/introduccion/" />

Resultado ​

🎬 Ver diapositivas

INFO

El componente abre el enlace en una nueva pestaña mediante target="_blank".

La ruta del ejemplo debe sustituirse por una presentación existente.


Card y CardPane ​

Permiten presentar información mediante tarjetas. Card representa una tarjeta y CardPane organiza varias tarjetas.

Propiedades de Card ​

PropiedadTipoObligatoriaDescripción
headerstringNoTítulo original de la tarjeta (se conserva por compatibilidad).
titlestringNoNuevo nombre alternativo del título; si se indican ambos, prevalece title.
iconstringNoClases de un icono Font Awesome, por ejemplo fa-solid fa-network-wired.
linkstringNoRuta interna de VitePress, respetando la configuración base. Abre en la misma pestaña.
hrefstringNoEnlace original. Abre en una pestaña nueva si no se indica link.
colorstringNoColor del borde, sombra y título. Por defecto #4f46e5.
srcstringNoURL de una imagen mostrada dentro de la tarjeta.
altstringNoTexto alternativo de la imagen. Por defecto utiliza el título.

Compatibilidad

El uso anterior con header, href, src, alt y color sigue funcionando. Las propiedades nuevas son opcionales. Si se indican link y href, prevalece link.

Ejemplo original: tarjetas de contenido ​

md
<CardPane>

<Card header="Léxico" color="#2563eb">

Palabras y símbolos del lenguaje.

</Card>

<Card header="Sintaxis" color="#16a34a">

Reglas para construir instrucciones válidas.

</Card>

<Card header="Semántica" color="#d97706">

Significado de las instrucciones.

</Card>

</CardPane>

Resultado ​

Léxico

Palabras y símbolos del lenguaje.

Sintaxis

Reglas para construir instrucciones válidas.

Semántica

Significado de las instrucciones.

Nuevo uso: título, icono y enlace interno ​

El atributo link utiliza la URL pública definida por los rewrites de VitePress.

md
<CardPane>

<Card
  title="Redes"
  icon="fa-solid fa-network-wired"
  link="/fundamentos/redes/"
  color="#2563eb"
>

Equipos, direcciones IP y comunicación.

</Card>

<Card
  title="HTTP y HTTPS"
  icon="fa-solid fa-arrow-right-arrow-left"
  link="/fundamentos/http/"
  color="#16a34a"
>

Peticiones, respuestas y comunicación segura.

</Card>

</CardPane>

Resultado ​

Enlace externo con href (comportamiento original) ​

md
<Card
  header="Documentación de PHP"
  icon="fa-brands fa-php"
  href="https://www.php.net/manual/es/"
>

Consultar el manual oficial de PHP.

</Card>

Resultado ​

Documentación de PHP

Consultar el manual oficial de PHP.

Tarjeta con imagen (comportamiento original) ​

md
<Card
  header="PHP"
  src="/images/php.png"
  alt="Logotipo de PHP"
>

Lenguaje de programación del lado del servidor.

</Card>

La ruta de src es ilustrativa: utiliza una imagen que exista en tu proyecto.


Quiz ​

Componente para incorporar preguntas interactivas.

Ejemplo didáctico previsto ​

Una pregunta podría tener este contenido:

¿Qué función de PHP devuelve el número de elementos de un array?

  • length()
  • count() — correcta
  • size()
  • sizeof_array()

Sintaxis del componente ​

La sintaxis concreta debe obtenerse de Quiz.vue, porque todavía no se han revisado sus propiedades.

No se incluye un <Quiz /> vacío, ya que no garantiza que aparezca una pregunta funcional.

Pendiente

Revisar Quiz.vue y añadir aquí:

  • Propiedades admitidas.
  • Estructura de preguntas y respuestas.
  • Ejemplo Markdown funcional.
  • Resultado interactivo.

EnConstruccion ​

Indica que una página o apartado está pendiente de completar.

Sintaxis ​

md
<EnConstruccion />

Resultado ​

🚧
En construcción

Este contenido está pendiente de desarrollo. Estará disponible próximamente.


RequestJourney ​

Representa el recorrido de una petición web.

Sintaxis ​

md
<RequestJourney />

Resultado ​

El truco del módulo

Sigue el viaje de una petición

Alguien abre tu web. El navegador no “adivina” la página: manda una solicitud al servidor, el servidor con tecnologías como PHP y Laravel lo cocinan, y vuelve una respuesta. Eso es DAWS.


ObjetivosModulo ​

Presenta los objetivos generales del módulo mediante tarjetas de colores.

Procede de una página anterior de Hugo y se mantiene como componente específico.

Sintaxis ​

md
<ObjetivosModulo />

Resultado ​

Brújula del curso

Objetivo general

Construir, comprender y desplegar una aplicación web real, con código organizado, un entorno reproducible y un flujo de trabajo que permita desarrollarla, mantenerla y evolucionarla

  • Entender el escenario

    Cliente, servidor, HTTP, request y response. Qué pasa cuando alguien escribe tu URL en el navegador.

  • Hablar PHP

    Sintaxis, datos, control de flujo y un poco de POO. El idioma del servidor.

  • Montar con Laravel

    Rutas, controladores, Blade, Eloquent. Una app con estructura, no un archivo gigante.

  • Mismo entorno para todos

    Docker: que “en mi máquina sí” deje de ser una excusa.

  • No perder el trabajo

    Git: commits, ramas y un remoto. El salvavidas del módulo (y de la vida).

  • IA con cabeza

    Usarla para ir más rápido, no para no enterarte. Tú decides; la IA sugiere.

INFO

ObjetivosModulo es diferente del container ::: objetivos.

El container se utiliza para los objetivos particulares de cada tema.


StackOficial ​

Presenta tecnologías y recursos oficiales relacionados con el módulo.

Sintaxis ​

md
<StackOficial />

Resultado ​

No te lo inventes

Las webs oficiales, a un clic

En clase usamos estas fuentes. Si dudas, primero la documentación oficial: es más aburrida que un tutorial random… y mucho más cierta.


IndiceCurso ​

Muestra el índice general del curso.

Sintaxis ​

md
<IndiceCurso />

Resultado ​

Explora los contenidos del módulo

Referencias ​

referencias pertenece al sistema de containers Markdown-it, no a los componentes Vue.

Se utiliza para presentar recursos, enlaces o documentación de consulta.

Sintaxis orientativa ​

md
::: referencias

- [Documentación oficial de PHP](https://www.php.net/manual/es/)
- [Documentación de Laravel](https://laravel.com/docs)
- [Documentación de VitePress](https://vitepress.dev/)

:::

Ejemplo ​

INFO

El ejemplo utiliza el nombre referencias identificado en la arquitectura de containers.

Si su implementación exige un subtítulo u otra cabecera, habrá que adaptar la sintaxis a referencias.ts.


Componentes internos del tema ​

Algunos componentes se utilizan desde el propio tema y no necesitan incorporarse directamente en Markdown.

ComponenteFinalidad
CollapsibleHeadingGestionar títulos plegables
PrintButtonFacilitar la impresión
VisitorCountMostrar estadísticas de visitas

Containers frente a componentes Vue ​

NecesidadTipoSintaxis
Objetivos de un temaContainer::: objetivos
FinalidadContainer::: finalidad
Conocimientos previosContainer::: previo
DefinicionesContainer::: definicion
Información adicionalContainer::: pageinfo
RecordatoriosContainer::: recuerda
ActividadesContainer::: actividad
PrácticasContainer::: practica
PreguntasContainer::: pregunta
ReferenciasContainer::: referencias
Ejecutar PHPVue<PhpRunner>
Incorporar ejerciciosVue<Ejercicio>
Destacar textoVue<Color>
Documentar comandosVue<Cmd>
Agrupar comandosVue<CmdPane>
TarjetasVue<Card> y <CardPane>
Contenido desplegableVue<DropDown>
Preguntas interactivasVue<Quiz>
DiapositivasVue<ButtonSlides>

Organización y mantenimiento ​

Los componentes Vue se encuentran principalmente en:

text
docs/
└── .vitepress/
    └── theme/
        ├── components/
        │   ├── PhpRunner.vue
        │   ├── Ejercicio.vue
        │   ├── Color.vue
        │   ├── Cmd.vue
        │   ├── CmdPane.vue
        │   ├── DropDown.vue
        │   ├── ButtonSlides.vue
        │   └── ...
        ├── styles/
        │   ├── colors.css
        │   ├── containers.css
        │   └── ...
        └── index.ts

Criterios de mantenimiento ​

  1. Utilizar nombres en PascalCase para los componentes.
  2. Mantener los estilos específicos dentro de cada componente cuando corresponda.
  3. Utilizar las variables de colors.css para los colores compartidos.
  4. Evitar crear componentes cuando un container resuelva la misma necesidad.
  5. Mantener los componentes heredados que sigan siendo necesarios.
  6. Documentar las propiedades y ejemplos de cada componente.
  7. Conservar los ejercicios en archivos independientes de las páginas que los utilizan.

Pendientes ​

  • [ ] Completar el diseño de Ejercicio.vue.
  • [ ] Documentar las propiedades reales de Quiz.vue.
  • [ ] Verificar las propiedades de Card.vue y CardPane.vue.
  • [ ] Verificar las propiedades de PhpRunner.vue.
  • [ ] Revisar la sintaxis de referencias.ts.
  • [ ] Completar la documentación de los componentes restantes.
© 2026 · DAWS · Desarrollo Web en Entorno Servidor