Historico Sección “Posts”
Este documento proporciona un resumen de la estructura y lógica de la sección de posts en el sitio Hugo.

Resumen de la Estructura y Lógica de la Sección “Posts”
El objetivo principal de la página /posts/
es mostrar una lista combinada de:
- Categorías de Posts: Son subdirectorios dentro de
content/posts/
(ej:content/posts/Redes/
,content/posts/Java/
) que contienen sus propios archivos_index.md
. - Artículos Sin Categoría: Son archivos de artículos individuales (ej:
content/posts/mi_aprendizaje.md
) que residen directamente encontent/posts/
y no dentro de un subdirectorio de categoría.
Esta lista combinada se ordena cronológicamente de más reciente a más antiguo.
1. Archivo Principal de la Sección: layouts/posts/root.html
Esta es la plantilla que Hugo usa cuando alguien visita la URL /posts/
. Su lógica principal es:
Identificar el Contenido a Mostrar:
- Categorías (
$categories
): Se obtienen todas las subsecciones directas de la página actual (que es/posts/
). En Hugo,.Sections
en una página de sección lista sus subsecciones inmediatas.GO-HTML-TEMPLATE{{ $categories := .Sections }}
- Artículos Sin Categoría (
$uncategorizedArticles
): Se buscan todas las páginas regulares (.RegularPages
) que pertenecen directamente a la sección “posts” (es decir, no están en sub-subsecciones).GO-HTML-TEMPLATE{{ $uncategorizedArticles := where .RegularPages "Section" "posts" }}
- Combinar Listas (
$allItems
): Las categorías y los artículos sin categoría se unen en una sola lista.GO-HTML-TEMPLATE{{ $allItems := $categories | union $uncategorizedArticles }}
- Categorías (
Ordenamiento por Fecha Efectiva: Para asegurar un orden cronológico correcto donde las categorías reflejen la “frescura” de su contenido:
- Se crea una nueva lista (
$itemsWithDates
) donde cada elemento es un diccionario que contiene el ítem original (item
) y sueffectiveDate
. - Para Artículos:
effectiveDate
es simplemente la fecha de publicación del artículo (.Date
). - Para Categorías:
effectiveDate
se determina por la fecha del artículo más reciente publicado dentro de esa categoría. Si una categoría no tiene artículos, se usa su propia fecha (.Date
del_index.md
de la categoría).GO-HTML-TEMPLATE{{ range $allItems }} {{ $effectiveDate := .Date }} {{ if .IsSection }} {{ if .Pages }} {{ $latestPage := index (sort .Pages "Date" "desc") 0 }} {{ $effectiveDate = $latestPage.Date }} {{ end }} {{ end }} {{/* ... se añade a $itemsWithDates ... */}} {{ end }}
- La lista
$itemsWithDates
se ordena poreffectiveDate
en orden descendente (más reciente primero). - Finalmente, se extraen los ítems ordenados de nuevo a la variable
$allItems
.
- Se crea una nueva lista (
Paginación y Renderizado:
- La lista final y ordenada
$allItems
se pasa al sistema de paginación de Hugo. - Luego, se llama al partial
layouts/partials/posts_grid_list.html
para mostrar los ítems de la página actual.GO-HTML-TEMPLATE{{ $paginator := .Paginate $allItems }} {{ partial "posts_grid_list.html" (dict "Pages" $paginator.Pages "Context" . "ViewContainerClass" "my-3") }}
- La lista final y ordenada
2. Partial de Visualización: layouts/partials/posts_grid_list.html
Este archivo es responsable de tomar una lista de ítems (que pueden ser categorías o artículos) y mostrarlos.
- Iteración: Recorre la lista de ítems que le pasó
root.html
. - Diferenciación de Contenido:
- Usa
{{ if .IsSection }}
para verificar si el ítem actual es una categoría.- Si es Categoría: Muestra el título de la categoría, su imagen (si la tiene), una descripción breve, y un contador de cuántos artículos contiene (
len .Pages
).
- Si es Categoría: Muestra el título de la categoría, su imagen (si la tiene), una descripción breve, y un contador de cuántos artículos contiene (
{{ else }}
(si no es una sección, es un artículo).- Si es Artículo: Muestra el título del artículo, su imagen, fecha de publicación y un resumen o descripción.
- Usa
- Formatos de Vista: El partial tiene la estructura HTML para dos vistas: “Grid” (cuadrícula) y “List” (lista). Un script de JavaScript (no definido en este partial, sino globalmente) se encarga de alternar la visibilidad entre estas dos vistas.
- Paginación: Si hay más ítems de los que caben en una página, muestra los controles de navegación de la paginación (Anterior, Siguiente, números de página).
Estructura de Contenido Esperada (content/posts/
)
Para que esta lógica funcione como se describe, la estructura de tus archivos en content/posts/
debería ser:
content/posts/_index.md
: Define la página principal de la sección/posts/
.content/posts/articulo-general.md
: Un artículo que aparecerá en la lista principal porque no está en una categoría.content/posts/nombre-categoria/
: Un directorio para una categoría.content/posts/nombre-categoria/_index.md
: Define la página de la categoría (ej./posts/nombre-categoria/
). Aquí puedes poner una descripción e imagen para la categoría.content/posts/nombre-categoria/articulo-dentro-de-categoria.md
: Un artículo que pertenece a “nombre-categoria”. Este tipo de artículo NO se mostrará en la lista principal de/posts/
según la lógica actual, solo se contaría para la fecha efectiva de la categoría y se listaría si visitas la página de la categoría directamente.
En Resumen para un Recién Llegado:
Cuando visitas /posts/
:
- El sistema recopila todas las carpetas de categorías (como “Redes”, “Java”) y todos los artículos sueltos que no están en ninguna categoría.
- Luego, organiza esta mezcla. Los artículos se ordenan por su fecha. Las categorías se “fechan” según su artículo más reciente. Todo se pone en una línea de tiempo, del más nuevo al más viejo.
- Esta lista ordenada se presenta en la página, permitiéndote ver tanto los grandes temas (categorías) como los artículos generales, con lo más reciente o actualizado apareciendo primero. Los artículos que están dentro de las categorías no se listan individualmente en esta vista principal, solo las categorías en sí.
Espero que este resumen detallado te sea útil.