กว่าจะเข้าใจ(ไม่ค่อยเข้าใจหรอก)ก็ใช้เวลาเยอะเหมือนกัน

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 ใหม่แล้วก็เปลี่ยนชื่อไปเรื่อยๆ เป็นอันจบพิธี