Hugo: Um Gerador de Sites Estáticos #
Um site estático consiste em um aplicativo da Web simples, no qual o conteúdo exposto é o mesmo para todos os que acessam, como blogs, periódicos, portfólios e portais de notícias. No entanto, no WordPress encontramos uma plataforma muito robusta para tal, já no tumblr e no blogger encontramos o oposto: é por isso que usamos o Hugo, um gerador de site estático.
Pré-requisitos#
Breves noções de HTML e Markdown.
Configurando Hugo#
- Baixe e extraia o Hugo do diretório
Hugo/bin/
; - Vá para o diretório
Hugo/PATH/
.
Criando o Site#
No terminal, use o comando hugo new site site_name
.
Adicionar Tópico#
- Em Hugo Themes, clone o repositório git do tema e ponha-o no diretório
site_name/themes/
; Em
config.toml
, inclua a tag:theme = "theme_name"
Configurações adicionais podem ser necessárias dependendo do tema.
Hospedando Localmente#
Na raiz do projeto (site), use o comando no terminal: hugo server
.
Criando Arquivo de Conteúdo#
- Vá para a raiz do projeto;
- Use o comando no terminal
hugo new file.md
para criar um arquivo emcontent/
; - Use o comando no terminal
hugo new directory/file.md
para criar um arquivo emcontent/directory/
.
A árvore de diretórios em content/
corresponde à navegação nas URLs.
Carregando Rascunhos#
In the terminal, use the command: hugo server -D
.
Tipos de Páginas#
- Single Pages: Páginas responsáveis pelo conteúdo de um arquivo Markdown;
- List Pages: Páginas responsáveis por indexar arquivos Markdown.
Lembre-se
Hugo pode indexar os arquivos localizados em content/
e seus subdiretórios. No entanto, não pode indexar mais. Para fazer isso, você deve criar um arquivo _index.md
usando o seguinte comando no terminal: hugo new content/sub-subdiretório/ _index.md
.
Front Matter#
Corresponde ao conjunto de metadados localizado na parte superior do arquivo de remarcação usado para melhorar a organização do site. Eles têm a seguinte estrutura:
YAML:
--- config: value ---
TOML:
config = value
JSON:
{ config: value }
Arquétipos#
Modelo padrão do Front Matter ao criar um arquivo. Se houver modificações, somente os novos arquivos serão alterados. Podemos criar padrões que não são padrão:
- Crie um novo arquivo Markdown em
archetypes/
; - Crie um diretório em
content/
com o mesmo nome do arquétipo escolhido; - Crie arquivos nesse diretório, que seguirá o padrão escolhido.
Shortcodes#
Em vez de escrever código HTML, Hugo permite que você use atalhos pré-definidos. Aqui está a sintaxe:
Sem Markdown:
{{ < name params > }}
Com Markdown:
{{ % name params % }}
Podemos parafrasear códigos para sintaxe:
{{ < filename > }}
Nós podemos passar parâmetros:
Referenciador:
{{ < shortcode color = 'blue'> }}
Referenciado (shortcode):
{{ .Get color }}
Podemos definir escopos:
Referenciador:
{{ < shortcode > }} ... {{ < shortcode > }}
Referenciado (shortcode):
{{ .Inner }}
Podemos inserir o comando markdown no escopo do referenciador:
{{ % shortcode % }} ... {{ % shortcode % }}
Taxonomia#
Podemos gerar links automaticamente para agrupamento de acordo com tags e categorias (list pages).
Tags:
--- .... tags: ["t1", ..., "tn"] ... ---
Categories:
--- ... categories: ["c1", ..., "cn"] ... ---
Podemos até gerar taxonomias personalizadas:
No config.toml, nós configuramos:
[taxonomies] ... mood = "types"
E nós usamos a nova taxonomia dessa forma:
--- ... types: ["type1", ..., "typen"] ... ---
Modelos (Templates)#
Eles são definidos em layouts/_default/
. Neste diretório, somos apresentados aos arquivos responsáveis pelas listas e páginas únicas. Mais informações sobre templates, clique aqui.
Pagina Inicial#
Definido por tema como padrão. Mas nós podemos definir o nosso em layouts/index.html
.
Seção#
Um diretório de conteúdo pode ser indexado a partir de um modelo em si. Para fazer isso, simplesmente crie um novo arquivo HTML em layouts/diretório/
.
Base e Blocos#
Podemos tornar o projeto mais modular e poderoso usando a seguinte lógica: temos uma base que é preenchida com blocos. Nós usamos a seguinte sintaxe:
Na Base:
... {{block "name". }} {{end}} ...
Nos Blocos:
... {{define "name"}} {{end}} ...
Mais informações sobre templates, clique aqui.
Variáveis#
Nos modelos HTML, podemos usar o que foi definido no cabeçalho da marcação como variáveis. Nós usamos a seguinte sintaxe:
Built-ins:
{{.var}}
Personalizadas:
{{ .Params.var }}
Também podemos definir e acessar variáveis criadas no próprio modelo:
Definindo:
{{ $ myVar: = value }}
Acessando:
{{ $ myVar }}
Mais informações sobre variáveis, clique aqui.
Funções#
Podemos usar funções em HTML por meio da sintaxe:
{{ function params }}
Algumas funções: truncate
, add
, sub
, singularize
.
Podemos executar iterações da seguinte maneira:
{{ range .array }} ... {{ end }}
Mais informações sobre funções, clique aqui.
Conditionals#
Algumas operações que podemos usar são: and
, eq
, lt
, le
, gt
, ge
, not
. A sintaxe é a seguinte:
{{ if params operation }} ... {{ else if ... }} ... {{ else }} ... {{ end }}
Lembre-se
Os parênteses podem ser usados para precedência. Além disso, podemos usar condicionais em HTML.
Banco de Dados#
Usamos o diretório data/
para depositar arquivos que servem como banco de dados. Esses arquivos podem ser YAML, TOML ou JSON. Neles, nós iteramos sobre seus dados da seguinte forma:
{{ range .Site.Data.File }}
Parciais#
Podemos modularizar o layout da seguinte forma:
- Criamos o diretório
layouts/partials/
; - Crie o arquivo parcial;
- Injete templates em
layouts/_default/
.
Em partials/header.html
:
<h1> {{ .Title }} </ h1>
...
Em _default/single.html
:
{{ partial "header". }} ...
Também podemos manipular variáveis personalizáveis:
Em partials/header.html
:
<h1> {{ .myTitle }} </h1>
<p> {{ .myDate }} </ p>
Em _default/single.html
:
{{ partial "header" (dict "myTitle" "TITLE" "myDate" "DD / MM / YYYY") }}
Construindo o Site#
Para gerar o site, basta acessar a raiz do projeto e usar o seguinte comando no terminal: hugo
.
Um diretório public/
será gerado, agora basta hospedá-lo em um servidor web.