Berkenalan Dengan Struktur Tema Hugo
Salah satu langkah pertama untuk memulai membuat sebuah tema website adalah mengenali struktur sebuah tema pada web framework yang ingin Kamu gunakan. Pada jenis web framework apapun, Kamu harus memahami dan mengenali strukturnya. Sehingga nanti ketika merancang dan membangun tema tidak akan kesulitan.
Nah, pada kesempatan kali ini Kita akan coba berkenalan dengan struktur tema dari web framework milik Hugo. Seperti yang Kita tahu, bahwa Hugo merupakan Static Site Generator paling cepat seperti yang di klaimnya.
Pada awalnya, Saya juga kebingungan dengan struktur dan direktori dari Hugo yang satu ini. Walaupun sudah membaca dokumentasinya di website resmi Hugo1, namun masih saja kurang paham secara keseluruhan. Karena masih ada beberapa yang kurang jelas dan detail, sehingga Saya harus mencobanya sendiri langsung untuk membuktikannya.
Salah satu alasan tulisan ini dibuat juga adalah sebagai arsip pribadi atau bisa membantu Kalian juga yang sedang membangun website atau blog menggunakan Hugo. Jika Kalian tertarik ingin membuat blog pribadi menggunakan Hugo , silakan baca terlebih dahulu artikel Saya sebelumnya.
Struktur Dasar Hugo
Berikut ini adalah stuktur atau direktori yang pertama kali dibuat oleh Hugo dengan perintah ini.
hugo new site nama_website
Maka, secara default Hugo akan di-generate secara otomatis struktur atau direktorinya seperti ini.
nama_website/
|-- archetypes/
|-- content/
|-- data/
|-- layouts/
|-- static/
`-- config.toml
Itu adalah struktur atau direktori standar yang diberikan Hugo pada saat pertama kali Kamu membuatnya. Namun, sebenarnya struktur tersebut bisa ditambah lagi sesuai kebutuhan.
Struktur Umum Tema Hugo
Misalnya Kamu ingin menambahkan tema pada Hugo, maka Kamu harus menambahkan folder themes
pada direktorinya. Dan semua tema Hugo disimpan pada direktori tersebut. Lalu, jika Kamu menggunakan tema, maka direktori lain pada root folder seperti archetypes
, data
, layouts
, dan static
menjadi tidak terpakai. Justru hanya direktori content
saja yang dipakai saat menggunakan tema Hugo.
Direktori seperti archetypes
, data
, layouts
, static
, dan yang lainnya akan dipakai dan di eksekusi sesuai tema yang dipilih pada pengaturan config.toml
. Sehingga direktori-direktori tersebut akan berfungsi dan bekerja sesuai temanya masing-masing.
Dibawah ini adalah struktur atau direktori sebuah website Hugo yang umum biasa dipakai untuk merancang dan membangun tema. Adapun tambahan lainnya pada sebuah struktur ini dimaksudkan untuk keperluan modifikasi tema sesuai yang Kita inginkan. Jadi struktur atau direktori ini bisa bertambah dan berkurang. Itu bisa disesuaikan sesuai kebutuhan Kalian.
Agar lebih mudah mengenali dan mempelajarinya, Saya akan singkirkan (namun tidak menghapusnya) direktori seperti archetypes
, data
, layouts
, static
, dan yang lainnya pada root folder sebagai contoh pembelajaran. Alasannya karena direktori tersebut tidak terpakai, justru yang akan dipakai ada pada folder setiap tema. Sehingga direktorinya menjadi seperti ini.
nama_website/
|-- content/
|-- public/
|-- themes/
| `-- nama_tema/
| |-- archetypes/
| | |-- blog.md
| | `-- default.md
| |-- assets/
| | |-- css/
| | | |-- bootstrap.css
| | | `-- style.css
| | `-- js/
| |-- config/
| |-- data/
| |-- i18n/
| |-- layouts/
| | |-- _default/
| | | `-- markup/
| | | | |-- render-image.html
| | | | `-- render-link.html
| | | |-- _baseof.html
| | | |-- list.html
| | | |-- single.html
| | | `-- summary.html
| | |-- partials/
| | | |-- head.html
| | | |-- header.html
| | | |-- sidebar.html
| | | |-- footer.html
| | | `-- script.html
| | |-- shortcodes/
| | |-- taxonomy/
| | | |-- category.html
| | | `-- tag.html
| | |-- hero.html
| | |-- about.html
| | |-- 404.html
| | |-- index.html
| | `-- robots.txt
| |-- resources/
| `-- static/
`-- config.toml
Penjelasan Struktur Tema Hugo
Berikut adalah penjelasan lengkap dari setiap direktori diatas, sebagai berikut :
content : Tempat disimpannya semua konten pada website Hugo, seperti artikel, halaman statis, dan yang lainnya. Konten ditulis dengan markdown format. Misalnya Saya membuat section khusus halaman blog, contact, dan about pada direktori
content
, maka akan seperti ini.
Aapabila penulisan format nama konten diawali dengan tandacontent/ |-- blog/ | |-- artikel-pertama/ | | `-- index.md | |-- artikel-kedua/ | | `-- index.md | |-- artikel-ketiga/ | | `-- index.md | `-- _index.md |-- about/ | `-- _index.md `-- contact/ `-- _index.md
_
atau underscore seperti_index.md
, maka Hugo akan menggangap bahwa konten tersebut adalah halaman list ataulist.html
. Sebaliknya, jika penulisan format nama normal tanpa_
, maka dianggap sebagai halaman single atausingle.html
.public : Direktori yang akan muncul ketika akan mengubah website menjadi halaman statis. Dan isi pada halaman inilah yang nantinya Kamu deploy atau hosting ke server websitemu. Perintah untuk membuat halaman statis pada Hugo cukup ketik saja
hugo
pada terminal.themes : Daftar tema Hugo yang ingin digunakan disimpan disini, lalu untuk menggunakannya tinggal mengaturnya pada
config.toml
.archetypes : Direktori untuk mengatur format dari konten pada front matter. Pada contoh diatas Saya membuat 2 format, satu dengan nama
_default.md
dan kedua dengan namablog.md
. Format_default.md
untuk mengatur format bawaan front matter, contohnya sepert ini.
Maka, secara otomatis akan membuat filehugo new contact.md
contact.md
pada direktoricontent/contact.md
dengan format yang telah diatur seperti ini.
Kemudian Saya akan membuat konten dengan menggunakan format--- title: "Contact" date: 2021-06-24T08:55:14+07:00 lastmod: 2021-06-24T08:55:14+07:00 draft: true ---
blog.md
, contohnya seperti ini.
Maka, secara otomatis akan membuat filehugo new blog/artikel-pertama/index.md
index.md
pada direktoricontent/blog/artikel-pertama/index.md
dengan format yang telah diatur seperti ini.--- title: "Artikel Pertama" date: 2021-06-24T08:58:23+07:00 lastmod: 2021-06-24T08:58:23+07:00 featuredPost: false draft: false author: username_penulis image: path_gambar featuredImage: false category: - Category1 tag: - Tag1 description: isi deskripsi pencarian keyword: kata kunci ---
assets : Direktori tempat untuk menyimpan aset seperti,
css
,js
, dan sejenisnya yang ingin Kamu proses lagi untuk keperluan modifikasi menggunakan Hugo Pipes2. Misalnya Kamu ingin menjadikan beberapa filecss
menjadi satu buah filecss
saat di publikasikan, maka Saya sarankan Kamu simpan asetnya disini untuk diproses lagi. Jika hanya file aset biasa, lebih baik Kamu simpan di direktoristatic
. Berikut ini adalah contoh penggunaan untuk pemanggilan aset dari direktoriassets
.
Maka, kedua file css dari direktori{{ $bootstrap := resources.Get "css/bootstrap.min.css" }} {{ $style := resources.Get "css/style.css" }} {{ $styleBundle := slice $bootstrap $style | resources.Concat "css/bundle.css" }} <link href="{{ $styleBundle.RelPermalink }}" rel="stylesheet">
assets
akan diproses lagi untuk digabungkan menjadi satu buah files css dengan namabundle.css
. Sehingga nanti saat di publikasikan akan menjadi seperti ini.<link href="https://saefulrahman.my.id/css/bundle.css" rel="stylesheet">
config : Biasanya Hugo memiliki file untuk mengatur semua variabel dan sejenisnya pada file
config.toml
. Bisa juga dengan format YAML atau JSON. Nah, jika Kamu ingin mengelompokkan pengaturannya sesuai kelompoknya agar lebih unik, maka Kamu dapat menggunakan direktori ini untuk mengaturnya. Misalnya sepert ini.config/ `-- default/ |-- config.toml |-- navbar.toml `-- content.toml
i18n : Jika pada website Hugo milikmu ingin memiliki multi bahasa, maka Kamu gunakan direktori ini sebagai tempat untuk menyimpan kamus dari bahasa apa saja yang Kamu gunakan. Misalnya Saya akan membuat file untuk bahasa inggris dengan nama
en-us.yml
, yang isinya sebagai berikut.
Untuk menggunakannya, Kamu tinggal lakukan seperti ini pada file HTML yang ingin kamu ubah sesuai bahasa yang dipilih.id: 'post.comment' translation: 'Comment' id: 'post.date' translation: 'Date' id: 'post.toc' translation: 'Table of Contents'
<span>{{ i18n "post.date" }}</span>
layouts : Direktori untuk mengatur semua struktur tema website Hugo milikmu dengan format
.html
. Seperti halaman depan, halaman artikel, kumpulan artikel, taxonomy, dan yang lainnya diatur disini._default : Untuk mengatur default layout sebuah halaman, jika sebuah halaman tidak didefinisikan layout-nya. Pada contoh diatas, saya membuat 4 buah file sebagai default dari layout tema yang Saya buat, sebagai berikut :
_baseof.html
: Untuk mengatur base layout tema. Berikut ini adalah contoh isi dari file_baseof.html
Untuk menggunakannya, tinggal seperti ini.<!DOCTYPE html> <html> {{ partial "head.html" . }} <body itemscope="itemscope" itemtype="https://schema.org/WebPage"> {{ partial "header.html" . } {{ block "main" . }} {{ end }} {{ partial "sidebar.html" . }} {{ partial "footer.html" . }} {{ partial "script.html" . }} </body> </html>
{{ partial "head.html" . }} {{ define "main" }} {{ partial "hero.html" . }} {{ partial "about.html" . }} {{ end }}
list.html
: Untuk mengatur layout bawaan dari sebuah halaman yang berisi list. Misalnya halaman post list, category list, tag list, archive list, dan yang lainnya.single.html
: Untuk mengatur layout bawaan dari sebuah single page, seperti halaman artikel.summary.html
: Saya membuat file ini untuk mengatur format ringkasan atau summary dari setiap konten artikel yang dibuat.markups : Direktori ini untuk mengatur render hook pada sebuah konten Hugo. Misalnya mengatur bentuk link dan gambar pada sebuah artikel, seperti menambahkan
nofollow
untuk external link dan menambahkan caption pada gambar. Semua format dan aturan tersebut dibuat dalam direktorimarkups
.render-link.html
: Mengatur bentuk dan format link dalam artikel. Contohnya seperti ini.<a {{ if or (strings.HasPrefix .Destination "http") (strings.HasPrefix .Destination "#") (strings.HasPrefix .Destination "/") }} href="{{ .Destination | safeURL }}" {{ if strings.HasPrefix .Destination "http" }} target="_blank" rel="nofollow noopener noreferrer" {{ end }} {{ else if strings.HasPrefix .Destination "mailto" }} href="mailto:{{ .Text | safeHTML }}" onClick="javascript:window.open('mailto:{{ .Text | safeHTML }}', 'mail'); event.preventDefault()" {{ end }} {{ with .Title}} title="{{ . }}" {{ end }}> {{ .Text | safeHTML}} </a>
render-image.html
: Mengatur bentuk dan format gambar dalam artikel. Contohnya seperti ini.{{ if .Title }} <figure> <img src="{{ .Destination | safeURL }}" alt="{{ .Text }}"> <figcaption>{{ .Title }}</figcaption> </figure> {{ else }} <img src="{{ .Destination | safeURL }}" alt="{{ .Text }}"> {{ end }}
partials : Berisi bagian-bagian kecil struktur HTML yang ingin dibuat. Disini Kamu memungkinkan untuk memecah kode-kode layout menjadi lebih kecil agar lebih efisien. Pada bagian
partials
saya membuat 6 buah file bagian kecil dari struktur website yang akan dibuat, yaituhead.html
,header.html
,sidebar.html
,footer.html
, danscript.html
.shortcodes : Pada direktori ini, Kamu bisa membuat kustom
shortcodes
buatan sendiri yang memang khusus ingin Kamu implementasikan pada website. Disini Kamu bebas berkreasi dan menentukan jenis, bentuk, desain, dan format darishortcodes
yang ingin dibuat. Misalnya, Saya akan membuat sebuah kustomalert
dengan namaalert.html
untuk menyampaikan pesan penting kepada pembaca.
Tambahkan CSS untuk mempercantik tampilannya. Lalu, untuk menggunakannya pada front matter, seperti ini.<div class="alert {{ range .Params }}{{ . }} {{ end }}"> <p>{{ .Inner | markdownify }}</p> </div>
{{< alert info >}} Contoh pesan dari alert info {{< /alert >}}
taxonomy : Untuk mengatur layout untuk halaman seperti category, tags, author, dan sejenisnya.
404.html
: Untuk mengatur layout untuk halaman 404 atau jika halaman tidak ditemukan pada website.index.html
: Untuk mengatur layout halaman utama website. Contohnya seperti ini.{{ partial "head.html" . }} {{ define "main" }} {{ partial "hero.html" . }} {{ partial "about.html" . }} {{ end }}
robots.txt
: Untuk mengatur robots pencarian, untuk memberi tahu ke robot pencarian apa saja yang boleh di-crawl dan tidak.
resources : Opsional, bisa digunakan untuk memproses file SASS tanpa preprosesor.
static : Untuk menyimpan file statis seperti gambar, file, css, js, dan font.
config.toml
: Berisi semua pengaturan atau konfigurasi website Hugo.
Seperti itulah detail penjelasan dari struktur tema pada Hugo. Semoga informasi ini bisa membantu Kalian untuk cepat memahami struktur tema Hugo. Sehingga Kalian bisa lebih cepat merancang dan membangun tema menggunakan Hugo. Silakan Kalian coba sendiri dan semoga informasi ini bermanfaat!