ระหว่างที่กำลังตามหา CMS ที่ใช้กับ MongoDB ก็ไปพบกับเจ้า LocomotiveCMS เข้าจากการที่ดูคร่าวๆ ก็ถือว่าดูดีกว่าหลายตัวที่พบมา document ดูใช้ได้ หน้าตาเว็บก็ดูดีทีเดียว เลยเลือกมาลองใช้ดูซักหน่อย ด้วยความที่พัฒนามาจาก Ruby on Rails และมีแนวคิดที่ค่อนข้างแต่ต่างกับ CMS ตัวอื่นๆ เช่น Drupal, Wordpress, Joomla เลยอยากเขียนบันทึกไว้สักหน่อย เผื่อจะมีประโยชน์กับคนอื่นๆ

ดองไว้นานแล้ว รู้สึกใช้ไปใช้มาแล้วมันไม่ใช่ ขอตัดจบแค่นี้เลยแล้วกัน

1. จุดเริ่มต้น

LocomotiveCMS ก็เหมือนกับโครงการโอเพ่นซอร์สอื่นๆ ที่ล้วนเกิดจากความต้องการของนักพัฒนาเผื่อที่จะสร้างสิ่งที่ตอบสนองกับความต้องการของตนเองและเป็นสิ่งที่ยังไม่มีอยู่ในท้องตลาด

มาดูความต้องการเริ่มต้นของเค้ากันครับ

  • ต้องสามารถสร้าง multi-site ได้ด้วย instance เดียว
  • content editor ต้องไม่ใช้ความพยายามมากนักในการจัดการ template ที่อาจทำให้ เว็บไซต์พังได้
  • ไม่จำเป็นต้องใช้ความรู้ Ruby on Rails
  • ต้องสามารถพัฒนาต่อยอดหรือปรับแต่งได้อย่างสวยงาม
  • หลังบ้านต้องแหล่ม!
  • ต้องไม่มี code smell

2. ฟีเจอร์พื้นฐาน

  • Multi sites
  • Flexible content types
  • Front-end inline editing (Aloha editor)
  • Content localization
  • Restful API
  • Haml / Sass
  • Liquid templating langage

3. ทดลองใช้

วิธีลองติดตั้งง่ายๆ ก็ใช้ heroku จะรวดเร็วกว่า สมมติว่าติดตั้งเสร็จเรียบร้อยแล้ว :) เราไปต่อกันเลย

3.1 layout

layout ของ Rails แอพโดยปกติจะเป็นแบบนี้

+- Views    
+- layout
    +- application
+- mysite
    +- index
    +- first page
    +- second page

แต่ของ LocomotiveCMS จะเป็นแบบนี้

+- Pages
+- index
    +- first page
    +- second page

index จะเปรียบเสมือน master layout ของเพจ (ใช้ Liquid template)

<html>
<head>
  <title>My index page</title>
</head>
<body>
  <header>
    layout header
  </header>
  <div id="content">
    {% block content %}
      the content of the index page
    {% endblock %}
  </div>
  <footer>
    layout footer
  </footer>
</body>

หน้าอื่นๆ ก็เพียงแค่กำหนดส่วน content ที่ต้องการ override (สามารถใส่กี่ block ก็ได้ ตราบใดที่ชื่อไม่ซ้ำกัน) ดูเพิ่มเติมที่ http://doc.locomotivecms.com/templates/tags#block-section

{% extends parent %}

{% block content %}
  the content of this page
{% endblock %}

หรือสามารถสร้าง layout อื่นๆ ที่ไม่ได้ extends จาก index ก็ได้เช่นกัน โดยเรียก {% extends <layout_name> %} แทน {% extends parent %}

3.2 Snippets

เปรียบเสมือน partials ใน Rails โดยสามารถเรียกใช้ใน template ได้ว่า {% include 'sidebar' %} เป็นต้น

4. ข้อดี

  • open source
  • ผู้พัฒนาเน้นเรื่องโค้ดที่ดี
  • deploy บน heroku ง่ายมากกกก ได้ CMS ฟรีๆ มาใช้อย่างรวดเร็ว
  • รองรับ custom content type
  • มี command-line tool ให้ใช้
  • รองรับ multi-language

5. ข้อด้อย

  • ต้องสร้าง template เอง
  • ยังไม่ support Rails 4 (soon)
  • learning-curve สูง ลืมสิ่งที่เคยใช้มาไปได้เลย

อ้างอิง: