How to use smarty template engine !.

เริ่มโดย Tee++;, 10 กรกฎาคม 2007, 23:48:42

หัวข้อก่อนหน้า - หัวข้อถัดไป

0 สมาชิก และ 1 ผู้มาเยือน กำลังดูหัวข้อนี้

Tee++;

บทนำ
ช่วงนี้มีหลายคนถามผมมาเกี่ยวกับเรื่องของ "Template Engine" หลายคน ก็เลยคิดว่าน่าจะทำเป็นบทความเล็กๆ ซะหน่อย เพราะถ้าเป็น บทความใหญ่ๆ รับรองเรื่องมันยาว แน่นอน

พูดถึง Template Engine นั้นมีหลายตัวมาก เลยทั้ง bTemplate, FastTemplate, TemplatePower, TBS (TinyButStrong), PatTemplate, etc.

เรียกได้ว่ามีมากมายเยอะแยะไปหมด แต่ที่ชนะใจผมและ คนทั่วโลก ทิ้งห่างแบบไม่เห็นฝุ่น รวมทั้งได้รับการรับรองจาก PHP โดยตรงก็คือ "Smarty Template Engine" นั่นเอง ด้วยความที่ตัวมันทำงานได้ยืดหยุ่น มีคนใช้เยอะ ทำให้มีการแชร์ข้อมูลมาก พัฒนาอย่างต่อเนื่อง ที่สำคัญ Absolutely Free ทำให้หลายๆ คนเลือกที่จะใช้มันสำหรับ พัฒนาโปรเจคใหญ่ๆ วันนี้ผมก็เลยจะมาแนะนำคร่าวๆ ถึง PEAR ตัวนี้สักหน่อย

ประโยชน์ของ 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 ยี่ห้ออื่นๆ

รูปแบบการใช้งานเบื้องต้น

<!-- ไฟล์ test.php -->
<?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->assign('years', array('2004', '2005', '2006')); // ทดลอง assign ค่า แบบ array

$smarty->display('index.tpl'); // อันนี้จะเป็นการเรียกไฟล์ที่ อยู่ใน /templates/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}<br />
{/foreach}

</body>
</html>
-----------------------------------------------------

เอาละครับ นี่เป็นแค่บทเรียกน้ำย่อย ยังไม่ได้ เข้าลึกถึงรายละเอียด 1 ใน 100 เลย Template Engine ตัวนี้มีความสามารถแบบ สุดๆ ไปเลยครับ จะค่อยๆ มาเขียนถึงการใช้งานในระดับ ต่างๆ อีกที ถ้าใครใจร้อนแนะนำให้ โหลด manual มาอ่านก่อนได้ที่

http://smarty.php.net/distributions/manual/en/Smarty-2.6.7-docs.chm

ปล.การเขียนโปรแกรมนั้นไม่ได้ยากเพียงแต่คุณต้องให้เวลากับมัน
[direct=http://laravel.in.th]Laravel in Thai[/direct]
[direct=http://jquerytips.com]jQueryTips by Tee++;[/direct]
[direct=https://www.facebook.com/jQueryTips]jQueryTips Page[/direct]
[direct=https://www.facebook.com/Laravel.in.th]Laravel in Thai Page[/direct]
[direct=https://twitter.com/Teepluss]Teepluss's Twitter[/direct]


Tee++;

#1
หายไปหลายวันได้ฤกษ์มา อัพเดทกันเสียที หลายวันมานี้ถ้าใครสนใจ PEAR ตัวนี้จริงๆ คงได้ไปดาวน์โหลด manual มาศึกษาไปบ้างแล้ว รับรองได้ถ้าอ่านจบ ก็สามารถใช้งานมันได้อย่างเต็มที่แล้วล่ะครับ ตอนนี้ผมเริ่มศึกษาผมก็ใช้เวลา 2 วันเต็มๆ นั่งอ่านนั่งลอง manual ของมันทุกคำสั่ง แป๊บเดียวเท่านั้นล่ะ ใช้คล่องเลย

วันนี้จะมาต่อกันเรื่องของการใช้งานคำสั่งในการ เปรียบเทียบ นี่เป็นอีกข้อดีของ Smarty ครับ PEAR ตัวอื่นๆ คำสั่งพวกนี้น้อยมากๆ แต่ไม่ใช้ Smarty

หลายๆคนที่เขียนโปรแกรมมาคงจะชินกับการเทียบค่า โดยใช้ พวกคำสั่ง if, else ดีอยู่แล้ว แต่คราวนี้เราจะย้ายคำสั่งพวกนี้มาเขียนใน tpl แทนครับ !

<!-- index.php -->
<?php
#include smarty
#
#
$currentpage = basename($_SERVER['PHP_SELF']);
$smarty-assign('currentpage', $currentpage);
$smarty->display('condition.tpl');
?>

<!-- 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.

และคุณสมบัติที่ผมชอบที่สุดของ PEAR ตัวนี้คือการทำ cache โดยที่เราเลือกทำเป็นบางส่วน หรือ ทั้งหมดก็ได้ พวกนี้จะมากล่าว ในคราวหน้าครับ

ปล.ดูจากเวลาและพื้นที่แล้วผมคงจะให้ข้อมูล PEAR ตัวนี้ได้อย่างคร่าวๆ เป็นแน่ ถ้าสนใจจริงๆ ลองอ่าน manual นะ ถ้าไม่เข้าใจก็เอามาปรึกษา คุยกันอีกที
[direct=http://laravel.in.th]Laravel in Thai[/direct]
[direct=http://jquerytips.com]jQueryTips by Tee++;[/direct]
[direct=https://www.facebook.com/jQueryTips]jQueryTips Page[/direct]
[direct=https://www.facebook.com/Laravel.in.th]Laravel in Thai Page[/direct]
[direct=https://twitter.com/Teepluss]Teepluss's Twitter[/direct]


Tee++;

#2
เออ วุ้ย ลืมกระทู้นี้ไปเลย วันนี้มาต่อซะหน่อย เอาเรื่องอะไรดีล่ะ เอาเป็นการสร้าง Function เพื่อไปใช้ใน Template ดีกว่า

การสร้าง Function เพื่อเอาไปใช้ในไฟล์ TPL ของ Smarty ทำได้หลายแบบมากๆ

1.Block
การสร้าง แบบ Block นั้นคือเราจะทำการสร้างฟังก์ชั่นมาเพื่อให้ ข้อมูลใน block ทั้งหมดทำงานตามที่ Function กำหนด เช่น

// block.php
<?php
...
function dupContent($params, $content, &$smarty, &$repeat) {
$content = str_repeat($content, $params['num');
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) {
return date($params['format'], time());
}

$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&nbsp;':'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 จะถูกแสดงผล

****ข้อมูลเพิ่มเติมหาอ่านได้ที่ manual ของ smarty ครับ****
[direct=http://laravel.in.th]Laravel in Thai[/direct]
[direct=http://jquerytips.com]jQueryTips by Tee++;[/direct]
[direct=https://www.facebook.com/jQueryTips]jQueryTips Page[/direct]
[direct=https://www.facebook.com/Laravel.in.th]Laravel in Thai Page[/direct]
[direct=https://twitter.com/Teepluss]Teepluss's Twitter[/direct]


Tee++;

[direct=http://laravel.in.th]Laravel in Thai[/direct]
[direct=http://jquerytips.com]jQueryTips by Tee++;[/direct]
[direct=https://www.facebook.com/jQueryTips]jQueryTips Page[/direct]
[direct=https://www.facebook.com/Laravel.in.th]Laravel in Thai Page[/direct]
[direct=https://twitter.com/Teepluss]Teepluss's Twitter[/direct]


Tee++;

เท่านี้คิดว่า OK ที่สุดท้าย
[direct=http://laravel.in.th]Laravel in Thai[/direct]
[direct=http://jquerytips.com]jQueryTips by Tee++;[/direct]
[direct=https://www.facebook.com/jQueryTips]jQueryTips Page[/direct]
[direct=https://www.facebook.com/Laravel.in.th]Laravel in Thai Page[/direct]
[direct=https://twitter.com/Teepluss]Teepluss's Twitter[/direct]


Warrez


EThaiZone

ไม่พอบอกผมได้อีกนะครับ

รู้สึกม็อดจะสามารถแยกโพสย่อยได้อีกง่ะ

ไม่รู้จะทำได้หรือเปล่า ไม่เคยเป้นกะเขา =__="

yokey.

ขอบคุณความรู้ครับ

santi

ขอบคุณครับ ได้ความรู้อีกแล้ว  :)

kool_time

ขอบคุณคับ แต่ว่ามานโหลดมาแล้วอ่านไม่ได้ครับ เพื่อนๆเป็นแบบผมปล่าวหว่า

myong1

อ้างถึงจาก: kool_time ใน 11 กรกฎาคม 2007, 01:11:03
ขอบคุณคับ แต่ว่ามานโหลดมาแล้วอ่านไม่ได้ครับ เพื่อนๆเป็นแบบผมปล่าวหว่า

ใช่ครับ ผมก็อ่านไม่ได้ครับ

ยังไงก็ขอบคุณ คุณ Tee+ ครับ

photogang

ขอบคุณครับ ได้ความรู้ใหม่อีกแล้ว

คุณ Tee++ ปั่นกระทู้ ระวังโดน mod แบนนะครับ เดี๋ยวไม่ได้เข้าห้องลับนะ  :D

Step9

คือ มันเป็นEngine ใช้ผลิต Template หรือ Theme ใช่ป่ะครับ  ???


[direct=http://www.thaiseoboard.com/index.php/topic,315485]รับจ้างโพสเว็บ ขายสินค้าและบริการ, ขายบ้าน อสังหาริมทรัพย์[/direct] | [direct=http://www.thaiseoboard.com/index.php/topic,372074]ขายอะไรดี คำแนะนำจาก คุรุเทพ[/direct]
  |  [direct=http://www.iseehomecomplex.com/]ถ้าเพียงเรา.. มีบ้านอยู่...[/direct]

youcanberich

เคยลองแกะดูจากสคริบ phpld  งง+งง+งง และ +งง มันไปหลายต่อมากๆ  :P โยงใยกันเยอะแยะ

ขอบคุณครับ ขอนั่งแถวหน้าด้วยคน  ;D
[direct=http://www.iheartpassiveincome.com/]อยากรู้ว่าผมทำเงินวันละ $1000 ได้ยังไง คลิ๊ก![/direct]
[direct=http://www.iheartpassiveincome.com/]ผมจะสอนให้คุณหารายได้แบบยั่งยืนบนโลกออนไลน์ รับประกันคุณทำได้แน่นอน[/direct]
[direct=http://www.iheartpassiveincome.com/]เหนื่อยกับการปั่นเว็บใช่มั้ย อยากทำเงินวันละ $100 และไม่ต้องลุ้นโดนแบนรายวัน ผมมีทางออกให้ คลิ๊กครับ![/direct]

amaudy

#14
ร่วมด้วยช่วยกัน

เล่มนี้นะครับ



ดาวน์โหลดได่ที่นี่

http://rapidshare.com/files/42248499/Smarty.PHP.Template.rar.html

โชคดีนะครับ ชาติเรายังต้องการคนเขียนโปรแกรมเป็นอีกเยอะ

edit: ว่าจะอัปให้ตั้งแต่เมื่อคืนแล้ว แต่ 1. เหนื่อย ขับรถวันเดียวร่วมๆ 700 กิโลเมตร 2. เนท TT&T เน่า เข้าเวบนอกมะได้ ไม่มีที่อัปโหลดไฟล์ให้ เวบฝากไฟล์ไทยๆโฆษณาเยอะเกินเหตุ ผมไม่ใช้เพราะหงุดหงิดครับ

aomnaruk

รอฟังความรู้ใหม่อยู่ครับ

Tee++;

อ้างถึงจาก: amaudy ใน 11 กรกฎาคม 2007, 13:16:00
ร่วมด้วยช่วยกัน

เล่มนี้นะครับ



ดาวน์โหลดได่ที่นี่

http://rapidshare.com/files/42248499/Smarty.PHP.Template.rar.html

โชคดีนะครับ ชาติเรายังต้องการคนเขียนโปรแกรมเป็นอีกเยอะ

edit: ว่าจะอัปให้ตั้งแต่เมื่อคืนแล้ว แต่ 1. เหนื่อย ขับรถวันเดียวร่วมๆ 700 กิโลเมตร 2. เนท TT&T เน่า เข้าเวบนอกมะได้ ไม่มีที่อัปโหลดไฟล์ให้ เวบฝากไฟล์ไทยๆโฆษณาเยอะเกินเหตุ ผมไม่ใช้เพราะหงุดหงิดครับ

เยี่ยมไปเลยผมโหลดมาอ่านแล้วล่ะครับ ขอบคุณนะ
[direct=http://laravel.in.th]Laravel in Thai[/direct]
[direct=http://jquerytips.com]jQueryTips by Tee++;[/direct]
[direct=https://www.facebook.com/jQueryTips]jQueryTips Page[/direct]
[direct=https://www.facebook.com/Laravel.in.th]Laravel in Thai Page[/direct]
[direct=https://twitter.com/Teepluss]Teepluss's Twitter[/direct]


okgofun

ขอบคุณมากๆคับ คุณ Tee++ และคุณ amaudy  กำลังจะลองศึกษาดูพอดีเลยครับ
จะต้องทำให้ได้เดือนละอย่างต่ำ $1,000 แล้วก็ไม่โดนแบน

9nu

ขอบคุณคร้าบ ที่แบ่งปัน

Q(@3@)o

เช่นถ้าผมจะทำ เทมเพจ Wordpress เอง ใช้โปรแกรมนี้ได้เหรอ ?

แต่โหลดมาแล้วมันเหมือนเป็นสคิป มากกว่าโปรแกรมอ่ะ ชัก งงๆ  :P