בניית אתר סטטי בעזרת הוגו

איך לבנות אתר סטטי בעברית בעזרת הוגו ו-Wowchemy

אתר סטטי מול אתר דינמי

כיום, חלק גדול מאתרי האינטרנט הינם אתרים דינמיים הבנויים על מערכות כגון וורדפרס. באתר דינמי, בכל כניסה השרת שולף מידע ממסד נתונים, מעבד ומחשב את העמוד המבוקש, לפני שליחתו למשתמש. לעומת זאת, אתר סטטי מורכב אך ורק מקבצים כמו HTML, CSS, JavaScript, וכו׳. זאת אומרת שהשרת לא צריך לבצע שום עיבוד חוץ מלהעביר למשתמש את הקבצים להצגתם.

עבור אתרים פשוטים (למשל בלוגים אישיים כמו האתר שלפניכם) שלא דורשים הצגת תוכן דינמי למשתמש, בניית אתר סטטי יכולה להיות מאוד אטרקטיבית. אתר סטטי לרוב יהיה מהיר יותר, האחסון יהיה זול יותר (חברות כמו גיטהאב ונטליפיי אפילו מציעות אחסון בחינם לאתרים סטטיים), ואתר סטטי דורש הרבה פחות תחזוקה של אבטחת האתר (לרן בר-זיק יש מאמר מצוין על אבטחת אתרי וורדפרס למי שמתעניין).

בחירת הכלי והתבנית

קיימים מספר כלים ("מחוללים") פופולאריים לבניית אתר סטטי, כמו למשל ג׳קיל וגטסבי. לאחר מעט התלבטות, בסופו של דבר החלטתי ליצור את האתר הזה עם הוגו. הוגו מתבסס על שפת התכנות GO, ויש לו קהל משתמשים רחב (עם כמעט 47 אלף כוכבים בגיטהאב בעת כתיבת הפוסט). בין משתמשי הוגו נמצאת חברת 1Password, שבנתה את עמוד הבית, עמודי התמיכה והבלוג שלה בעזרת הוגו.

בחרתי בתבנית בשם Wowchemy (בעבר נקראה Academic), שמכילה מגוון רחב של פיצ׳רים נחמדים כמו חיפוש, גלריות תמונות, תמיכה ב-LaTeX ואפילו CMS בסיסי.

ל-Wowchemy יש שלוש תבניות קיימות שמספקות נקודת התחלה טובה. את האתר אחסנתי בקלות ובחינם בנטליפיי לפי מדריך ההתקנה של התבנית. האתר בנטליפיי מסתנכרן באופן אוטומטי עם כל שינוי שנעשה ב-repository בגיטהאב.

הצגת עברית

על מנת שהאתר יוצג בעברית כראוי, צריך קודם כל להגדיר את שפת האתר לעברית. ב-config/_default/languages.yaml יש להגדיר:

he:
  languageCode: he

וב-config/_default/config.yaml להגדיר defaultContentLanguage: he.

במידה ואתם משתמשים בגרסה ישנה יותר של Wowchemy שלא מכילה תרגום לעברית, יש להעתיק מה-repository של Wowchemy את קובץ התרגום לתוך i18n/he.yaml באתר שלכם.

עדכון: במקום הפתרון שמוצע מטה, פתרון טוב יותר להתאמת האתר עבור מבנה מימין לשמאל הוא בעזרת המודול שיצרתי, שמשתמש ב-RTLCSS.

כעת, התבנית אמורה להיות מוצגת בעברית עם מבנה מימין לשמאל, אולם יתכן שחלקים מסוימים עדיין לא יהיו מוצגים כראוי. כדי לבצע שינויים ב-CSS ולתקן זאת, יש ליצור קובץ assets/scss/custom.scss ולכתוב בו את השינויים.

להלן השינויים שעשיתי עד כה (אשמח לקבל הצעות לשיפור):

// changes to _content.scss
ul.share li {
  margin-left: 8px;
  margin-right: 0;
}

ul.share li:last-of-type {
  margin-left: 0;
  margin-right: 0;
}

// changes to _nav.scss
.dropdown-menu {
  text-align: right !important;
}

.navbar-toggler {
  padding-left: 1rem;
}

#navbar-main .main-menu-item {
  text-align: right !important;
  padding-left: 0;
}

ul.nav-icons li {
  padding-left: 1rem;
  padding-right: 0;
}

ul.nav-icons li:last-of-type {
  padding-left: 0;
  padding-right: 0;
}

.ml-auto, .mx-auto {
  margin-left: 0!important;
  margin-right: auto!important;
}

// changes to _widgets.scss
.network-icon li {
  margin-left: 10px;
  margin-right: 0;
}

.network-icon li:last-of-type {
  margin-left: 0;
  margin-right: 0;
}

// fix author profile pic
.mr-3, .mx-3 {
  margin-right: 0!important;
  margin-left: 1rem!important;
}

// changes to _search.scss
.col-search-close {
  text-align: left;
}

// fix alert
div.alert>div:first-child::before {
  left: 0;
  right: -2rem;
}

div.alert>div {
  margin-left: 0;
  margin-right: 2rem;
}

// make sure code block dir is ltr
pre, code {
  text-align: left;
  direction: ltr;
}

// fix tags margin
.badge-light {
  margin-right: 0;
  margin-left: 8px;
}

.article-tags > .badge-light:last-child {
  margin-left: 0;
}

הטמעת תגובות

עדכון: החלטתי להחליף באתר את Disqus במערכת תגובות אחרת בשם Staticman. הסבר על הטמעת Staticman באתר פרסמתי במאמר חדש.

להוגו קיימת תמיכה בהטמעת תגובות של Disqus. בקובץ config/_default/params.yaml יש לשנות תחת comments: את ערך provider: ל-disqus, ותחת disqus: ב-shortname: לשים את ה-shortname שלכם.

כדי שממשק התגובות של Disqus יוצג בעברית, יש להעתיק מה-repository של Wowchemy את wowchemy/layouts/partials/comments/disqus.html לתוך layouts/partials/comments/disqus.html באתר שלכם, ומתחת לשורה var disqus_config = function () { הוסיפו:

this.language = "he";

אם נעזרתם במדריך הזה, או אם יש לכם כל שאלה/טענה, אשמח שתוסיפו את תגובתכם למטה.

מקורות נוספים שיכולים לעזור:

פז כהן-אברמוביץ׳
פז כהן-אברמוביץ׳
חובב טכנולוגיה, סטודנט למדעי המחשב באוניברסיטה הפתוחה

4 תגובות

היי

היי
21/09/2021

היי,
ממה שאני רואה באפשרויות של DISQUS הוא לא תומך בעברית,
איך השתמשת בו?

תודה
פז כהן-אברמוביץ׳

מחבר פז כהן-אברמוביץ׳
בתגובה ל-היי

21/09/2021

האמת היא ש-Disqus כן תומך בעברית, פשוט האפשרות לא מופיעה בממשק באתר.
כפי שמוסבר כאן: https://help.disqus.com/en/articles/1717203-multi-lingual-websites ניתן להגדיר את השפה דרך ה-JavaScript, ואם מגדירים this.language = "he"; כפי שהראתי במאמר פה, ה-Disqus יעבוד בעברית.
BaggyPants

BaggyPants
20/06/2022

אהבתי מאוד, תודה על המידע!

יש לי שאלה לגבי הכתיבה - בסוף הוגו מבוסס על קבצי markdown כדי לכתוב את התוכן של הבלוג - איפה אתה אוהב לכתוב את התוכן שלך? שמתי לב שלכתוב מארקדאון בעברית זה דיי לא נוח, תהיתי איך אתה פתרת את זה :)
פז כהן-אברמוביץ׳

מחבר פז כהן-אברמוביץ׳
בתגובה ל-BaggyPants

20/06/2022

Netlify CMS נוח גם בעברית.
אבל בדרך כלל אני כותב בגוגל דוקס ואז ממיר למארקדאון בעזרת תוסף "Docs to Markdown".
יש גם תוכנה בשם Typora שניתן להגדיר לטקסט מימין לשמאל, אבל היא בתשלום.

השארת תגובה

תודה!

התגובה נשלחה ותפורסם ברגע שתאושר.

אוקיי

אופס!

שליחת התגובה נכשלה. אנא נסו שוב.

אוקיי

הבא

קשור