Custom Output Format Di Hugo
⛾ Home ─ hugo
Jumat, 02 Desember 2022
(Diupdate: Kamis, 19 Januari 2023) -
📗
5 Menit
Disini kamu akan belajar tentang output format untuk hugo. Seperti misalnya mengkonversi halaman HTML menjadi JSON dan lain-lain.
Output format di hugo adalah cara untuk menampilkan data yang dihasilkan hugo.
Misalnya saat kita melakukan build situs hugo menggunakan perintah hugo
.
Maka hugo secara default atau bawaan akan membuat output format dalam bentuk format HTML.
Halaman yang kamu lihat saat ini juga merupakan format HTML yang dihasilkan dari Generator Hugo.
Jenis-jenis format yang didukung
Hugo memberikan banyak sekali jenis format yang dapat kita gunakan.
Mulai dari format yang bersifat tekstual seperti HTML, CSV, Javascript, JSON, PDF, XML, RSS, dan lain-lain.
Format Gambar seperti JPG, GIF, PNG, SVG, WEBP, dan lain-lain.
Sampai format video seperti 3GP, MP4, WEBM, dan lain-lain.
Nama | Type | Ekstensi File |
---|---|---|
Javascript | application/javascript | .js .jsm .mjs |
JSON | application/json | .json |
Manifest JSON | application/manifest+json | .webmanifest |
Octet Stream | application/octet-stream | none |
application/pdf | ||
RSS | application/rss+xml | .rss .xml |
TOML | application/toml | .toml |
Typescript | application/typescript | .ts |
XML | application/xml | .xml |
YAML | application/yaml | .yaml .yml |
OTF | font/otf | .otf |
TTF | font/ttf | .ttf |
BMP | image/bmp | .bmp |
GIF | image/gif | .gif |
JPEG | image/jpeg | .jpg .jpeg .jpe .jif .jfif |
PNG | image/png | .png |
SVG | image/svg+xml | .svg |
WEBP | image/webp | .webp |
Calendar | text/calendar | .ics |
CSS | text/css | .css |
CSV | text/csv | .csv |
HTML | text/html | .html |
JSX | text/jsx | .jsx |
Markdown | text/markdown | .md .markdown |
Plain | text/plain | .plain |
TSX | text/tsx | .tsx |
SASS | text/x-sass | .sass |
SCSS | text/x-scss | .scss |
3GP | video/3gpp | .3gp .3gpp |
MP4 | video/mp4 | .mp4 |
MPEG | video/mpeg | .mpg .mpeg |
OGG | video/ogg | .ogg |
WEBM | video/webm | .webm |
AVI | video/x-msvideo | .avi |
Geser ke samping -->
Tabel Output Format Lengkap
Dibawah ini adalah beberapa jenis file yang sering digunakan sebagai output format di hugo.
name | mediaType | path | baseName | rel | protocol | isPlainText | isHTML | noUgly | permalinkable |
---|---|---|---|---|---|---|---|---|---|
HTML | text/html | index | canonical | false | true | false | true | ||
AMP | text/html | amp | index | amphtml | false | true | false | true | |
CSS | text/css | styles | stylesheet | true | false | false | false | ||
CSV | text/csv | index | alternate | true | false | false | false | ||
Calendar | text/calendar | index | alternate | webcal:// | true | false | false | false | |
JSON | application/json | index | alternate | true | false | false | false | ||
MARKDOWN | text/markdown | index | alternate | true | false | false | false | ||
ROBOTS | text/plain | robots | alternate | true | false | false | false | ||
RSS | application/rss+xml | index | alternate | false | false | true | false | ||
Sitemap | application/xml | sitemap | sitemap | false | false | true | false | ||
WebAppManifest | application/manifest+json | manifest | manifest | true | false | false | false |
Geser ke samping -->
Saya tidak bisa memberikan semua informasi lengkap tentang jenis file dari tabel sebelumnya.
Alasannya adalah karena kurangnya informasi tentang informasi lengkap dari output format.
Saya sudah mencarinya di dokumentasi hugo maupun di web atau blog lainnya.
Silahkan lihat dokumentasi hugo tentang output format disini.
Mengatur output formats di hugo
Default format
Secara default, hugo memiliki beberapa output formats bawaan.
Lihat default output formats dibawah ini:
Kind | Default Output Formats |
---|---|
page |
HTML |
home |
HTML, RSS |
section |
HTML, RSS |
taxonomy |
HTML, RSS |
term |
HTML, RSS |
Kind adalah cara untuk mengindentifikasi jenis halaman.
Misalnya,
home
berarti halaman home (halaman utama dari situs).
page
berarti diartikan sebagai halaman untuk konten atau artikel.
section
halaman untuk kategori tertentu. Sepertidomain.com/posts
=> sectionnya adalah posts.
taxonomy
danterm
adalah halaman untuk taxonomy (tags, category). Lihat disini untuk detailnya.
Custom output formats hugo
Untuk membuat output formats baru atau kustom. Kita perlu mengatur output formats di file konfigurasi situs dan memanggil output format tersebut.
File config.toml:
1# Definisikan output format kustom (misalnya , SearchIndex)
2[outputs]
3 home = ["HTML", "RSS", "SearchIndex"]
4
5# Atur definisi dari output format kustom yang dibuat
6[outputFormats]
7 [outputFormats.SearchIndex]
8 mediaType = "application/json"
9 baseName = "searchindex"
10 isPlainText = true
11 notAlternative = true
Versi config.yaml:
1outputFormats:
2 SearchIndex:
3 mediaType: "application/json"
4 baseName: "searchindex"
5 isPlainText: true
6 notAlternative: true
Kemudian buat sebuah file untuk mendapatkan semua atau beberapa data dalam format kustom tersebut dan sekaligus membuatnya menjadi sebuah halaman yang dapat diakses.
Sebagai contoh, saya akan menggunakan nama list.searchindex.json sebagai wadah atau tempat untuk mendapatkan data output format yang dibuat tadi.
Buat file tersebut di dalam folder layouts/_default.
Visualisasi letak file list.searchindex.json:
1layouts
2 ├── _default
3 ├── list.searchindex.json
Contoh isi file list.searchindex.json:
1{{- $.Scratch.Add "searchindex" slice -}}
2{{- range $index, $element := (where .Site.Pages "Kind" "page") -}}
3 {{- $.Scratch.Add "searchindex" (dict "id" $index "title" $element.Title "uri" $element.Permalink "tags" $element.Params.tags "categories" $element.Params.categories "section" $element.Section "content" $element.Plain "summary" $element.Summary "year" ($element.Date.Format "2006")) -}}
4{{- end -}}
5{{- $.Scratch.Get "searchindex" | jsonify -}}
Cara diatas memanfaatkan sebuah function
.Scratch
untuk memanipulasi data (menambahkan, memnghapus, dll).Selain cara diatas, ada cara yang lebih mudah untuk mengatur output format.
Cara tersebut adalah dengan menggunakan variabel khusus untuk output format.
Lihat daftar variabel output formats dan caranya dibawah atau klik disini
Daftar properti atau parameter untuk mendefinisikan output formats
Saat membuat output format kustom, kita perlu mendefinisikan seperti apa format kustom tersebut.
name
Digunakan untuk mengidentifikasi nama dari output format. Misalnya HTML, CSS, AMP (seperti pada tabel output format lengkap).
mediaType
Jenis atau tipe format. Misalnya “text/html” atau “application/json” dan lain-lain.
path
Jalur khusus untuk output format. Kebanyakan output format tidak membutuhkan parameter path
ini.
Salah satu contoh yang menggunakan path
adalah untuk output format tipe amp
.
Kamu dapat melihatnya di tabel output format lengkap.
baseName
Digunakan untuk memberikan nama kustom untuk output format.
Kita tidak harus memberikan nama yang sama dengan nama dari file atau outputnya.
Kita dapat memberikan nama sesuai dengan apa yang kita mau.
rel
default: alternate.
Digunakan untuk memberikan nilai pada atribut rel yang biasanya digunakan pada tag html <link>
.
protocol
Digunakan untuk mengatur protocol dari output format. Contoh protocol seperti http://
, https://
, dan lain-lain.
Pastikan hanya gunakan ini jika output format memang memerlukannya.
isPlainText
Bernilai true atau false.
Digunakan sebagai pengurai (parser) untuk output format yang bersifat tekstual.
Misalnya, JSON, CSV, CSS, dan lain-lain.
Lihat di tabel output format lengkap.
isHTML
Bernilai true atau false.
Gunakan parameter ini jika output format berjenis HTML.
noUgly
Digunakan untuk mematikan url dengan nama ekstensi dari output format.
Sebagai contoh, domainku.com/datajson.json
menjadi domainku.com/datajson
.
ugly
default = true
Ini kebalikan dari noUgly
tadi.
Digunakan untuk memberikan nama ekstensi dari output format.
Sebagai contoh, domainku.com/datajson
menjadi domainku.com/datajson.son
.
Ini jarang digunakan karena secara default url yang dihasilkan dari output format memang menggunakan eksetensi dari output format itu sendiri.
Namun jika tidak ada, kamu dapat menggunakan
ugly
ini dan menetapkan nilainya ke true untuk memberikan url dengan ekstensi.
notAlternative
Bernilai true atau false.
Setting ke true
jika tidak ingin output format dimasukkan ke dalam list dari variabel .AlternativeOutputFormats.
permalinkable
Bernilai true atau false.
Setting ke true
jika ingin output format memiliki variabel .Permalink
dan .RelPermalink
.
Ini digunakan saat kita ingin output format memiliki url atau halaman yang dapat diakses.
Misalnya, domainku.com/datajson.json
.
Secara default, HTML dan AMP sudah memiliki parameter ini tanpa harus kita setting.
weight
Digunakan untuk mengurutkan output format. Gunakan ini jika ingin mengurutkan banyak output formats yang kamu buat.
Variabel untuk mendapatkan output formats
Hugo sudah menyiapkan variabel khusus untuk dapat mengatur output formats.
Kita juga dapat menggunakan page variable di output formats.
Dibawah ini adalah daftar variabel untuk output formats.
.OutputFormats
Berisi semua output format yang telah dibuat di file konfigurasi situs (config.toml).
Kamu bisa mendapatkan output format dengan .OutputFormats
yang digabungkan dengan function .Get.
Contoh penggunaannya:
Contoh, file datajson.json untuk output format json:
1{{ .RelPermalink }} > /url-halaman/
2{{ with .OutputFormats.Get "json" -}}
3{{ .RelPermalink }} > domainku.com/datajson.json
4{{- end }}
Contoh, file datahtml.html untuk output format html:
1{{ with .OutputFormats.Get "html" -}}
2{{ .RelPermalink }} > domainku.com/datahtml/
3{{- end }}
json dan html diambil berdasarkan parameter baseName dari output format.
.AlternativeOutputFormats
Ini digunakan jika kamu ingin memasukkan output format ke situs hugo.
Biasanya ini digunakan pada tag html <link>
. Misalnya, saat ingin menggunakan output formats css yang membutuhkan tag html <link>
.
Lihat contoh dibawah ini:
1// Gunakan .AlternativeOutputFormats
2{{ range .AlternativeOutputFormats -}}
3<link rel="{{ .Rel }}" type="{{ .MediaType.Type }}" href="{{ .Permalink | safeURL }}">
4{{ end -}}
5
6// Tampilan atau hasilnya
7<link rel="stylesheet" type="text/css" href="https://domainku.com/style.css">