กว่าจะเข้าใจ(ไม่ค่อยเข้าใจหรอก)ก็ใช้เวลาเยอะเหมือนกัน
Archetypes มันก็ Template นั่นแหละ
วันก่อนขึ้นบล็อกเสร็จแล้วจึงหาวิธีให้เวลาเขียนบล็อกใหม่ง่ายขึ้น จึงได้มารู้จักฟีเจอร์ Archetypes ของ Hugo ที่มันก็คือ template นั่นแหละ
ผมสร้าง archetype ชื่อ posts.md
แล้วใส่ไว้ในโฟลเดอร์ archetype ใน hugo project ของเราแล้วใช้คำสั่ง
hugo new posts/นี่คือบล็อกแรก.md
แล้วเราจะได้ นี่คือบล็อกแรก.md
ใน posts
content
posts
- นี่คือบล็อกแรก.md
ต่อมาผมต้องการมากขึ้นอีก ต้องการให้มันแยกเป็นโฟลเดอร์ลงไปด้วย และมันต้องอยู่ในโฟลเดอร์ posts ไม่งั้นจะใช้ไม่ได้ (ไม่รู้เรื่องโค้ดจริงๆ จังๆ เลยแก้ไม่ได้) ความคิดแรกของผมคือใช้คำสั่ง
hugo new posts/cat1/ทดสอบ.md
ผลคือมันไปสร้างไฟล์ ทดสอบ.md ที่ content/posts/category1/ทดสอบ.md
แต่เทมเพลทดันใช้ของ default ซะงั้น ที่ผมต้องการคือให้ใช้เทมเพลทที่สร้างไว้ด้วย ไอเดียถัดไปของผมคือขยับพวกเทมเพลทใน archetypes ใส่ไว้ในแต่ละโพลเดอร์ ผลออกมาเละกว่าเดิมอีก คำสั่งไม่ทำงานเลยทีนี้ ผมจึงหยุดแล้วกลับไปอ่าน docs อีกครั้ง จึงเจอว่ามันมี --kind
อยู่ ผมก็ลองเลย
hugo new --kind category1 posts/cat1/ทดสอบ.md
คราวนี้ผลลัพท์ออกมาตามที่ต้องการแล้ว (เย่) แล้วก็จัดการแยกเทมเพลทของแต่ละหัวข้อไว้ เวลาจเรียกใช้ก็ใช้ hugo new --kind [ชื่อ archetype] โฟลเดอร์/โฟลเดอร์/ชื่อไฟล์.md
ยาวไปแฮะ สั้นลงกว่านี้ได้ไหมหว่า?
แต่เดิมรู้จักคำสั่ง alias
อยู่แล้วว่าเป็นการตั่งชื่อเล่นทางลัดในการรันคำสั่ง ผมก็จัดเลย
alias hugocat1="hugo new --kind category1"
คำสั่งก็จะเหลือ hugocat1 posts/category1/ทดสอบ.md
สั่นลงมาก แต่ยังยาวๆ อยู่ จะรวบ posts/category1/ทดสอบ.md
เข้าไปด้วยยังไงดี ไอเดียของผมคืออยากจะพิมพ์แค่ชื่อไฟล์เฉยๆ พอหาข้อมูลแล้วก็เจอกับ function
function
function เนี่ย เข้าใจมันเหมือน alias แต่ซับซ้อนกว่า แล้วต้องเอาไปใส่่ใน .bashrc
รายละเอียดไม่ได้เข้าใจมาก แต่ดูโครงสร้างคร่าวๆ แล้วก็จับประกอบออกมาได้เป็นโค้ดด่านล่าง
hugocat1 () {
hugo new --kind category1 posts/cat1/"$@" ;
}
ลองแล้วผมก็จัดการโหลดส่วนที่แก้ไปด้วยคำสั่ง source .bashrc
จากนั้นก็ใช้คำสั่ง hugocat1 ทดสอบ.md
แล้วก็บู้ม ได้ออกมาตามที่ต้องการแล้ว! ทีนี้ต่อไปก็สร้าง archetype ใหม่แล้วก็เปลี่ยนชื่อไปเรื่อยๆ เป็นอันจบพิธี