Genere un sitio estático y feeds Atom, con Markdown, shell y pandoc.
git clone pdssg, idealmente al lado del directorio fuente de su sitio.
git clone https://github.com/torresjrjr/pdssg
Para ejecutar pdssg y crear un sitio estático, ejecute el script pdssg en un directorio encima del directorio fuente del sitio.
$ ls
src/ pdssg/
$ ./pdssg/pdssg
pdssg es un script de shell ejecutable único, sin indicadores de línea de comandos. Simplemente genera un directorio de sitio vecino dst/
(destino) a partir de un directorio vecino existente src/
(fuente) con el contenido del sitio (archivos Markdown para convertir a páginas web HTML y otros archivos).
El diseño de pdssg es modular y está basado en árboles. A continuación se muestra un directorio de origen del sitio de ejemplo .
src/
|-- _ignore
|-- _feeds
|-- index.md
|-- about.md
|-- posts.md
|-- posts/
| |-- _drafts/
| | `--- 2020-04-01-bored.md
| |-- 2020-01-01-new-year.md
| |-- 2020-02-01-corona-what.md
| `-- 2020-03-01-stuck-at-home.md
|-- feeds/
| `-- posts.md
|-- assets/
| `-- style.css
|-- _templates/
| |-- atom.xml
| `-- main.html
`-- _includes/
|-- header.html
|-- footer.html
`-- meta.html
Aquí está el directorio de compilación resultante.
dst/
|-- index.html
|-- about.html
|-- posts.html
|-- posts/
| |--- 2020-01-01-new-year.html
| |--- 2020-02-01-corona-what.html
| `--- 2020-03-01-stuck-at-home.html
|-- feeds/
| `--- posts.html
`-- assets/
`--- style.css
Nota: los archivos y directorios que comiencen con un guión bajo _
serán descartados.
Los archivos Markdown se convertirán en archivos HTML, listos como páginas web. Las excepciones son rutas de archivos que coinciden con patrones en un archivo ./_ignore
, como un archivo .gitignore
.
pdssg espera que los archivos Markdown tengan un bloque frontal YAML, que es un bloque de metadatos YAML rodeado por un par de ---
, que precede al resto del contenido del archivo.
El frontmatter debe tener al menos un valor title
, que se utilizará para crear un encabezado de título <h1>
. Los valores author
y date
son comunes y se recomiendan cuando corresponda.
Ejemplo de un archivo Markdown:
---
title : My Webpage Title
author : John Smith
date : 2020-12-30
---
## Subheading
contents...
Como en el ejemplo, los directorios _includes
y _templates
se utilizarán para generar los archivos HTML y Atom. Luego son descartados.
Para los archivos en _templates
:
atom.xml
se utiliza para crear documentos HTML.main.html
se utiliza para crear feeds Atom. Para los archivos en _includes
:
meta.html
se inserta en el encabezado del documento dentro de las etiquetas <meta>
.header.html
se inserta en el cuerpo dentro de las etiquetas <body>
, antes del contenido principal.footer.html
se inserta en el cuerpo dentro de las etiquetas <body>
, después del contenido principal.Los feeds Atom son feeds tipo RSS basados en un formato de distribución más nuevo y más sólido. Básicamente, se utilizan como RSS y se denominan como tales. Los feeds Atom permiten a los lectores suscribirse al nuevo contenido de un sitio web, como un blog.
pdssg puede crear feeds Atom a partir de directorios, con los archivos del directorio como entradas de feed. Para hacer esto, necesita crear un directorio específico para sus feeds y crear un "archivo semilla Atom" como tal:
./feeds/
) y escriba su ruta en el archivo de configuración _feeds
./posts/
)../feeds/posts/
)..md
a la ruta (por ejemplo, ./feeds/posts.md
). Consulte el sitio de ejemplo anterior para una demostración (el directorio posts/
).
El archivo semilla Atom se convertirá en un archivo feed Atom. Este feed resultante existirá en la nueva ruta pero con una extensión .xml
en lugar de .md
. En este ejemplo, el feed atómico aparecerá en example.com/feeds/posts.xml
. Tenga en cuenta que el archivo ./posts.md
no es necesario para un feed, solo un directorio.
NOTA: Las entradas Atom están ordenadas alfanuméricamente por sus nombres de archivo correspondientes, no por la date
especificada en su contenido YAML.
Este proyecto nació de un desafío personal, para mi propio sitio. A petición de un bloguero amigo, lo limpié y lo hice público.
Contáctame: t.me/torresjrjr