Smarty::template engine ที่ทันตแพทย์ส่วนใหญ่เลือกใช้
ช่วงนี้มีหลายคนถามผมมาเกี่ยวกับเรื่องของ “Template Engine” หลายคน ก็เลยคิดว่าน่าจะทำเป็นบทความเล็กๆ ซะหน่อย เพราะถ้าเป็น บทความใหญ่ๆ รับรองเรื่องมันยาว แน่นอน
พูดถึง Template Engine นั้นมีหลายตัวมาก เลยทั้ง bTemplate, FastTemplate, TemplatePower, TBS (TinyButStrong), PatTemplate, etc.
เรียกได้ว่ามีมากมายเยอะแยะไปหมด แต่ที่ชนะใจผมและ คนทั่วโลก ทิ้งห่างแบบไม่เห็นฝุ่น รวมทั้งได้รับการรับรองจาก PHP โดยตรงก็คือ “Smarty Template Engine” นั่นเอง ด้วยความที่ตัวมันทำงานได้ยืดหยุ่น มีคนใช้เยอะ ทำให้มีการแชร์ข้อมูลมาก พัฒนาอย่างต่อเนื่อง ที่สำคัญ Absolutely Free ทำให้หลายๆ คนเลือกที่จะใช้มันสำหรับ พัฒนาโปรเจคใหญ่ๆ วันนี้ผมก็เลยจะมาแนะนำคร่าวๆ สักหน่อย
ประโยชน์ของ Template Engine
ประโยชน์ของระบบ Template นั้นมีมากมายเลยล่ะ โดยผมแบ่งออกเป็น ข้อใหญ่ๆ ได้ดังนี้
1.สามารถแยก Code ออกจาก Design ได้ ทำให้การทำงานทั้ง 2 ฝั่งไม่ต้องรองานกัน
2.สามารถทำระบบ แยก Theme แบบหลายๆตัว ได้เป็นอย่างดี (นึกถึงระบบ WP)
3.ทำให้โคดสั้นลงเพราะไม่จำเป็นต้องมาแทรก html ใดๆ ในหน้า Code และสะดวกต่อการ debug เพราะไม่ต้องมานั่งไล่โคดไป ดู html ไป
4.สามารถพัฒนาต่อได้ง่ายในกรณี สับมือกันทำหรือ ต่อยอด เพราะโคดที่ต้องแก้ มีแค่ภาษาโปรแกรมมิ่ง
5.ไม่ต้องเรียกตัวแปร ซ้ำซ้อน ในกรณีที่ มีการใช้ตัวแปร นั้นๆ หลายจุด
6.มี plugins เสริมต่างๆ ทำให้ลดเวลาในการพัฒนา เช่น (cache, thumnail, captcha, paging, tags, ajax, calendar)
7.สามารถพัฒนา Software ให้ดูเป็นมืออาชีพ และโคด มีความสวยงาม
ความเข้าใจเบื้องต้น
การใช้งานนั้นก็ไม่ยากเลยครับ ก่อนอื่นให้ดาวน์โหลด โปรแกรมจากที่นี่ Smarty Download
ก่อนจะทำงานกับ Smarty เราจะต้องมีความเข้าใจระบบของมันสักเล็กน้อย การทำงานของ Smarty นั้น เป็นระบบที่ อ้างอิง Template จาก โฟลเดอร์
/templates/
เมื่ออ่านค่าได้ทั้งหมดแล้วจะถูก Compile ออกมาเป็น php เก็บไว้ในโฟลเดอร์
/templates_c/
ซึ่งโฟลเดอร์พวกนี้เราสามารถแก้ตำแหน่ง ของมันได้ ที่ต้องทำแบบนี้เพราะจะได้ลดเวลา ในการอ่านข้อมูลและ แสดงผล ไม่ต้องมาทำซ้ำทุกๆ ครั้ง อันนี้เป็นจุดที่ผมคิดว่าเหนือกว่า Template Engine ยี่ห้ออื่นๆ
รูปแบบการใช้งานเบื้องต้น
-
<?php
-
include (’smarty/Smarty.class.php’); // include ตาม path
-
$smarty = new Smarty(); // เรียก Obj
-
$smarty->compile_check = true; // ตั้งค่า ว่าจะให้ re-compile หรือไม่ ถ้าระบบนิ่งแล้ว ตังเป็น false ไปเลย จะช่วยลดการใช้งาน ทรัพยากรระบบได้
-
-
$smarty->assign(‘title’, ‘Introduce Smarty’); // ทดลอง assign ค่า แบบ single
-
$smarty->assign(array(‘charset’=>‘utf-8′, ‘keywords’=>‘1, 2, 3′)); // ทดลอง assign ค่าแบบ multiple
-
-
$smarty->display(‘index.tpl’); // อันนี้จะเป็นการเรียกไฟล์ที่ อยู่ใน /templates/index.tpl มาใช้งาน
-
?>
-
<html>
-
<head>
-
<title>{$title}</title>
-
<meta http-equiv="content-type" content="text/html; charset={$charset}" />
-
<meta name="keywords" content="{$keywords}" />
-
</head>
-
<body>
-
-
{foreach from=$year item=x}
-
{$x}
-
-
{/foreach}
-
-
</body>
-
</html>
การใช้คำสั่งเปรียบเทียบค่า
หลายๆคนที่เขียนโปรแกรมมาคงจะชินกับการเทียบค่า โดยใช้ พวกคำสั่ง if, else ดีอยู่แล้ว แต่คราวนี้เราจะย้ายคำสั่งพวกนี้มาเขียนใน tpl แทนครับ !
-
<?php
-
#include smarty
-
#
-
#
-
$smarty-assign(‘currentpage’, $currentpage);
-
$smarty->display(‘condition.tpl’);
-
?>
-
<html>
-
….
-
-
<ul>
-
<li>{if $currenpage eq ‘index.php’}<b>Home</b>{else}Home{/if}</li>
-
<li></li>
-
<li></li>
-
</ul>
-
-
….
-
</html>
นี่เป็นการเปรียบเทียบค่าง่ายๆ ในไฟล์ tpl ครับ ซึ่งสามารถเรียกได้เหมือนการเขียนโปรแกรมบน php เลย ลองศึกษา ตารางค่าการเปรียเทียบเพิ่มเติมจากที่นี่
http://smarty.php.net/manual/en/language.function.if.php
นอกจากค่าพื้นฐานพวกนี้แล้ว Smarty ยังมี คุณสมบัติ ในการนำ Function เข้าไปใช้ หลายรูปแบบ ทั้งแบบ modifier, function, block, outputfilter, prefilter, postfilter
โดยที่บางคำสั่งของ php เราสามารถนำเข้าไปใช้ได้โดยตรง อาทิเช่น in_array, arry_key_exists, etc.
การสร้าง function ขึ้นเองเพื่อใช้งานร่วมกับ smarty
การสร้าง Function เพื่อเอาไปใช้ในไฟล์ TPL ของ Smarty ทำได้หลายแบบมากๆ
1.Block
การสร้าง แบบ Block นั้นคือเราจะทำการสร้างฟังก์ชั่นมาเพื่อให้ ข้อมูลใน block ทั้งหมดทำงานตามที่ Function กำหนด เช่น
// block.php
-
<?php
-
…
-
function dupContent($params, $content, &$smarty, &$repeat) {
-
return $content;
-
}
-
-
$smarty->register_block("dubContent", "dupContent");
-
…
-
?>
// block.tpl
-
<html…
-
-
{dupContent num=2}
-
Hello Smarty
-
{/dupContent}
-
-
…html>
จากตัวอย่างข้างบนถ้าเรารัน โปรแกรมเราก็จะได้ค่าออกมาเป็น
Hello Smarty Hello Smarty
—————————————————-
2.Function
การสร้าง Function เพื่อเข้าไปใช้ในไฟล์ tpl ก็ไม่ยากอีกเช่นกันออกจะง่ายกว่าด้วยซ้ำลองมาดูตัวอย่างกัน
// function.php
-
<?php
-
…
-
function timer($params) {
-
}
-
-
$smarty->register_function("timer", "timer");
-
…
-
?>
// function.tpl
-
<html…
-
{timer format="d/m/Y H:i:s"}
-
…html>
จากตัวอย่างด้านบนเราจะได้ค่าออกมาเป็นเวลาปัจจุบันในรูปแบบ dd/mm/yyyy hh:mm:ss
—————————————————-
3.modifier
เป็นการสร้าง function เพื่อไปเปลี่ยนแปลงค่าปัจจุบัน โดยไม่จำเป็นต้องนำเข้าตัวแปร เป็น array ตัวอย่างเช่น
// modifier.php
-
<?php
-
…
-
function hello($str, $var1, $var2) {
-
return $var1.‘ ‘.$var2.‘ ‘.$str;
-
}
-
-
$smarty->register_modifier(‘hello’, ‘hello’);
-
$smarty->assign(‘myname’, ‘Tee++;’);
-
…
-
?>
// modifier.tpl
-
<html…
-
{$myname|hello:’Posted by ‘:’Mr.’}
-
…html>
จากตัวอย่างนี้เราจะได้ค่าออกมาเป็น “Posted by Mr.Tee++;”
—————————————————-
นอกจากนี้ยังมีการสร้าง function เข้าไปใช้งานอีก 3 รูปแบบคือ
1.prefilter
เป็นอีกรูปแบบนึงโดยการใช้งานเราจะสร้าง function และ register โดยใช้คำสั่ง register_prefilter(“function_name”)
โดยไฟล์ tpl ทั้งหมดจะถูกทำงานก่อนที่จะ compile
2.postfilter
คล้ายๆ prefilter แต่ทำงานหลังการ compile
3.outputfilter
คล้ายๆ 2 ตัวบนแต่จะทำงานก่อนที่ไฟล์ tpl จะถูกแสดงผล
ถ้าใครสนใจอยากศึกษาต่อผมขอแนะนำให้ไปโหลด CHM manual มาดูเลยครับ จาก http://smarty.php.net/
You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.
ดีมากเลยครับผม ผมกำลังหาเรื่องนี้อยู่เข้าใจมากเลย ครับ ขอ xml feed อ่านทุกเรื่องเลย นะครับ
ผมใช้ Codeigniter มันก็ใช้ของ Smarty เนี้ยและเป็น Concept ดีมากๆครับ
[...] โดยเฉพาะ ตัวเป้งๆ ของ PHP ที่ชื่อว่า Smarty แต่นั่นมันใน Server Side Script ครับ [...]
คือไม่มีรูปให้ดูหรือครับว่า มันใช้ทำไรหรือ ไม่เข้าในซักที ฮา ไม่ได้เป็นเด็กไอที แต่อยากรู้ ว่ามันใช้ตอนไหน เห็นอธิบายระดับปานกลางถึงสูง เลยไม่เข้าใจ ฮา
[...] เพื่อง Google ละกันนะครับ สำหรับเรื่อง Smarty นั้นผมเคยเขียนปบบ คร่าวๆ [...]