Isriya Paireepairit / mk / markpeak
A Thai tech geek. Co-founder of Blognone and SIU. Blogging on almost everything.
เป็นงานที่ทำไว้เมื่อ 1-2 สัปดาห์ก่อน มาจดวิธีการไว้กันลืม
เรื่องมีอยู่ว่ามีคำขาด (เรียกให้สวยว่า "ข้อเสนอแนะ") จากสปอนเซอร์ของโครงการ Thailand Political Base ว่า "ทำเว็บให้มันสวยกว่านี้หน่อยซิ" ผมเลยจำเป็นต้องมายุ่งกับ MediaWiki ซึ่งเป็น CMS ที่ซับซ้อนมากตัวหนึ่งที่เคยจับมา
(เหตุผลที่สำคัญอันหนึ่งก็คือ MediaWiki เป็น CMS เพื่อ Wikipedia เท่านั้น period ถ้าเอาไปใช้อย่างอื่นจะลำบากมาก แต่ในกรณีของ Thailand Political Base จะไม่เข้าข่ายเพราะว่ามีลักษณะเป็นสารานุกรมเหมือนกัน) ผมคิดว่าจุดอ่อนของ หน้าแรกเดิม คือหน้ามันยาวมาก (เป็นผลสะสมมาจากการแก้ไขหน้าที่ไม่มีทิศทางชัดเจน เนื้อหาเลยงอกเพิ่มเรื่อยๆ เกิดอาการรักพี่เสียดายน้อง เนื้อหาใหม่เข้ามา เนื้อหาเก่าก็ไม่อยากตัด)
วิธีแก้ไขก็ไม่ต้องคิดเอง เอา best practice ของ Wikipedia มาเลย นั่นคือ หน้าแรกแบบ 2 คอลัมน์ และแสดงเนื้อหาสลับไปเรื่อยๆ
วิธีนี้จะมีข้อดีคือ
เรื่องการ expose เนื้อหาเป็นสิ่งสำคัญสำหรับเว็บไซต์แนว Wikipedia เพราะจุดชี้เป็นชี้ตายจะอยู่ที่จำนวนครั้งของการแก้ไขเนื้อหา ซึ่งเขียนเป็นสูตร (ของผมเอง) ได้ดังนี้
participation number = participation rate * impression
โดยความเชื่อส่วนตัวของผมนั้น participation rate ค่อนข้างจะคงที่ (อาจจะต่างไปบ้างตามวัฒนธรรม เช่น อเมริกาอาจจะเยอะกว่าไทย แต่โดยทั่วไปแล้ว ใน demographic หนึ่งๆ แล้วมักจะคงที่) ดังนั้นจุดพลิกผันจึงอยู่ที่ impression
การทำหน้าแบบ 2 คอลัมน์ไม่ใช่เรื่องยาก วิเคราะห์ว่าควรจะมีเนื้อหาอะไรบ้าง (ผลลัพธ์: มี 8 กรอบ) แล้วก็ลอกโค้ดของหน้าแรก Wikipedia มาเลย
อันยากคือทำยังไงให้มัน random เฉพาะเนื้อหาที่เรากำหนด
กลไกของ Wikipedia นั้นใช้ระบบ Template ปกติแล้ว Template ที่ใช้แสดงข้อมูลทั่วไปก็ตรงไปตรงมา แต่มันจะเริ่มยากตรงที่ว่า Template สามารถเรียกซ้อนๆ กันได้ และไม่มีวิธี trace แบบสะดวกสบายว่า Template dependency เป็นยังไง ต้องลองก็อปปี้ Template มาแล้วเรียกต่อกันไปเรื่อยๆๆๆ
ตัว Template ที่ใช้ในการ random ของ Wikipedia นั้นชื่อว่า Template:Rand ถ้าดูโค้ดจะสั้นๆ แต่งงฉิบหาย
หลังจากใช้เวลาครึ่งวันในการแกะโค้ด ผมก็เริ่มเข้าใจกลไกการทำงานของ Rand และการสุ่มเนื้อหาหน้าแรก และพบว่าวิธีการแบบนี้มันซับซ้อนสุดๆ เราไม่ได้ต้องการขนาดนั้น ทำเองดีกว่า
หลักการ
MediaWiki มีสิ่งที่เรียกว่า Template Inclusion หรือการดึงเนื้อหา "บางส่วน" จากหน้าที่ต้องการ ไปใส่ที่หน้าอื่นได้ (ถ้าเป็นภาษา Drupal จะใกล้เคียงกับ block หรือ snippet แต่ไม่เหมือนกันเสียทีเดียว)
วิธีการใส่ inclusion คือใส่แท็กนี้ลงไปในเนื้อหาของ MediaWiki
{{:Pagename}}
คำว่า "หน้าที่ต้องการ" หมายถึงหน้าใดๆ ก็ได้ใน MediaWiki ไม่ต้องตั้งค่าอะไรเป็นพิเศษที่หน้านั้น
ทริคคือเราต้องตั้งชื่อหน้าให้มีตัวเลข แล้วใช้วิธีสุ่มตัวเลขนั้น เช่น
Pagename/1<br/> Pagename/2 <br/>
เราก็ไปสร้างหน้าทำนองนี้ไว้จำนวนหนึ่ง (ตัวอย่าง คณะรัฐมนตรี/1 ไปจนถึง คณะรัฐมนตรี/6)
จากนั้นในหน้าแรก (หน้าที่ต้องการ include เนื้อหาอื่นเข้ามา) ก็ใส่โค้ดแบบนี้ครับ
{{:คณะรัฐมนตรี/{{#expr:{{mod|{{#time:U}}|6}} + 1}}}}
(บรรทัดเดียวนี่ล่ะคิดตั้งนาน)
อธิบายโค้ด
เท่านี้ก็เรียบร้อย
ผลลัพธ์ (ต้องลอง reload ด้วยจึงจะเห็นภาพ)
บทสรุป: ตอนเรียนควรตั้งใจเรียนวิชาคณิตศาสตร์ทั่วไป และอัลกอริธึมพื้นฐานด้วย มันเหมือนจะไม่ได้ใช้ แต่ก็ได้ใช้
ป.ล. โลโก้วาดโดยคุณเม่น มีคนบอกว่าเหมือนโลโก้ธรรมศาสตร์ ผมก็ว่างั้น
Add new comment