Smarty Template Engine หรือเรียกสั้นๆว่า smarty เป็นชุด Class Library ที่สร้างขึ้น เพื่อมาจัดการส่วนการแสดงผล  หรือ Presentation Layer หรือ Views ใน MVC ที่มีประสิทธิภาพยอดเยี่ยม และใช้งานง่าย

ลองดูจาก blog ที่คุณ pomcob เขียนถึง smarty ไว้ที่ http://www.phpzealots.com/node/23 ส่วนผมขอเขียนถึงการเริ่มต้นนำมาใช้งานน้ะครับ

ข้อความจำอย่างหนึ่ง เผื่อบางท่านที่อาจจะยังนึกไม่ออก ว่าทำไมต้องใช้ smarty

smarty จะทำให้เราแยกโปรแกรม php ออกจาก html แยกออกจากกันอย่างสิ้นเชิงเลยน้ะครับ แยก folder กันด้วย โดยที่ฝั่ง php ก็ทำงาน ไปเอาข้อมูล ไป query database ไป ได้ข้อมูลมา เช่น array ของข้อมูลลูกค้า ก็โยน (assign) ข้อมูลนี้ให้ smarty ส่วน smarty ก็เอาข้อมูลไปแสดง ไปเช็คว่าข้อมูลมีค่าไหม ถ้าไม่มีก็ขึ้นข้อความว่า "Not found" หรืออื่นๆ หรือถ้ามีก็แสดง list ออกมา มันจะทำให้เวลาที่เราต้องการแก้ไขหน้าตาของ web app แล้ว เราไม่ต้องไปยุ่งกับ code php ของเรา ก็แก้ที่ฝั่ง html แค่นั้นพอ ยังงี้แล้ว ทำให้เราเขียน 1 โปรแกรม แต่เอาไปรันได้ หลาย templates เลยทีเดียว หรือโปรแกรมแบบที่เขาแยก themes เลือก themes ได้ ใช้ smarty แล้วช่วยได้มากมายเลยครับ

ในการนำ smarty มาใช้ เราสามารถ ดาวน์โหลด แล้วเอามาวางใน folder ใดๆ ใน app ของเรา แล้วก็ include หรือ require และเรียกใช้งานได้ทันที

ตัวอย่างขั้นตอนการใช้งาน (ใน Windows) เช่น:

  1. ดาวน์โหลดไฟล์ smarty ลองดูตรง "Latest Stable Release" แล้วดาวน์โหลดมา ในที่นี้ผมดาวน์โหลด Smarty 2.6.18 Source March 7th, 2007
  2. ทำการแตก zip ไฟล์ (.tar.gz ก็เป็น zip ไฟล์แบบหนึ่ง ไม่ต้องตกใจ สามารถใช้ WinZip หรือ WinRar แตกได้สบายๆ) จะได้ folder ชื่อ Smarty-2.6.18 มา
  3. copy Smarty-2.6.18 ทั้ง folder ไปวางไว้ใน folder library ของคุณ หรือถ้าไม่มี ก็วางไว้ที่เดียวกับที่ app อยู่ แล้วเปลี่ยนชื่อจาก Smarty-2.6.18 เป็น Smarty ก็พอ จะได้จำง่ายๆ จากนั้นก็ลองเขียน app ง่ายๆ ดูเลย

ตัวอย่างโปรแกรม PHP

File: helloSmarty.php
--------------------
<?php
    include "Smarty/libs/Smarty.class.php";
   
    // สร้าง Smarty instance
    $smarty = new Smarty;

    // เซตที่อยู่ของ template
    $smarty->template_dir   = 'templates';
    // เซตที่อยู่ของไฟล์ template ที่ compile แล้ว
    $smarty->compile_dir    = 'templates_c';

    // assign ค่าให้ pattern 'message' (หรือจะเรียกว่า "ตัวแปร ของ smarty" ก็คงไม่ผิดอะไร)
    // เวลาเราอ้าง pattern นี้ใน template file จะอ้างเป็น $message
    $smarty->assign('message', 'Hello Smarty!');
    // สั่งแสดงผล โดยใช้ template file ที่ระบุ
    $smarty->display('helloSmarty.html');
?>

ตัวอย่าง Template File

File: templates/helloSmarty.html
--------------------
<html xmlns="http://www.w3.org/1999/xhtml">
 <head>
  <title>Test Smarty - phpzealots.com</title>
  <meta name="generator" content="editplus" />
 </head>

 <body>
    <h1>{$message}</h1>
 </body>
</html>

เสร็จแล้วลองเรียกรัน helloSmarty.php ดูครับ

อันนี้เป็นการใช้งาน Smarty แบบเบื้องต้นจริงๆ น้ะครับ ถ้าใช้งานจริง คุณอาจจะเก็บ library ของ Smarty (ที่อยู่ใน libs ทั้งหมด) ออกมาไว้ที่ folder Smarty แล้วย้าย folder Smarty นี้ไปไว้ใน library ของคุณ และอ้าง include_path มาหา เวลาเอาไปใช้งานจะได้ไม่ต้อง include ชื่อ folder ยาวๆ

ส่วนการใช้งานขั้นลึกๆ เดี๋ยวจะค่อยๆ ตามมา หรือถ้าใจร้อนก็อ่านใน docs ของ smarty ได้เลยครับ ถ้าเริ่มได้แล้ว ไปใช้งานต่อ โดยอิงจาก manual หลัก ผมว่าน่าจะไปได้สวยน้ะคับ :)