smarty

Smarty หรือ Zend_View ?

บทความเดิม บทความแรกๆ ที่ผมเขียนเกี่ยวกับการนำ Smarty มาใช้ร่วมกับ Zend Framework

แต่หลังจากที่ผมไ ด้ลองใข้ Zend_View ซักระยะนึง ขออนุญาต แสดงความคิดเห็นต่อคำถามที่ว่า "จะใช้ Smarty หรือ Zend_View ดี?" ซักเล็กน้อย

ความเห็นส่วนตัวน้ะครับ ถ้าใครที่ไม่เคยใช้ Smarty (หรือใช้แต่ยังไม่ติด) ก็ลองใช้ Zend_View ไปเลยก็น่าจะดีน้ะ เพราะว่าจะได้ไม่ต้องศึกษาและใช้ libs หลายเจ้า หรือถ้าอยากหัดใ:ช้ Smarty อันนั้นก็คงไม่ว่ากัน

Zend Framework and Smarty Integration

เกริ่นนำ

ทำไมต้องใช้ Smarty ทำไมไม่ใช้ Zend_View ไปเลย??

นั่นหน่ะสิครับ ... โดยส่วนตัว ผมก็ไม่กล้าฟันธงน้ะครับว่าทำไม เพราะอะไร ผมคิดว่า ก็แล้วแต่ความชอบ และความเหมาะสมกับงานของใครของมัน ก็แล้วกัน :)

mb_truncate จำกัดขนาดของ string ใน smarty แบบ multi-byte

เป็น modifier ที่แปลงจาก modifier truncate มา เพราะว่า truncate อันเก่า เวลาเอามาตัด UTF-8 ภาษาไทย แล้วตัดไม่เนียน มักจะมี ?? ติดท้ายมาอยู่เรื่อยๆ เนื่องจาก truncate อันเก่าทำงานในโหมด ASCII ก็เลยทำงานออกมาอย่างนั้น

แต่สำหรับใครใช้ truncate กับ UTF-8 ภาษาไทย ลองเอา mb_truncate นี้ไปใช้ดูคับ ผมปรับจาก truncate ตัวเก่า ก็ไม่ได้ทำอะไรมาก ก็เปลียน string function ให้เป็น multi-byte string function แทน และตอนนี้ fixed encoding ไว้ที่ UTF-8 ถ้าใครทำงานกับ encoding แบบอื่น ไม่ใช่ UTF-8 ก็ต้องเอาไปปรับเพิ่มเอง

 

การแสดงข้อมูลเป็นแถวละ x colums ด้วย smarty

ในการนำข้อมูลไปแสดงในหน้าเว็บ มักจะต้องแสดงเป็น row-column อยู่เสมอๆ ซึ่งวิธีการก็คงจะมีหลากหลายวิธี แต่ผมจะขอเสนออีกวิธี ที่มักจะใช้อยู่เป็นประจำๆ

ส่วนของข้อมูล

ผมชอบมอง data structure ให้เหมือนๆ กับ การแสดงผล เช่น ถ้าผมมีข้อมูล

{literal} ใน Smarty Template เพื่อให้ Smarty ignore การ Compile Template บางส่วน

จาก forum ที่ถามเรื่องการใช้ Smarty + Ajax ทำให้ผมจับประเด็นได้อย่างหนึ่ง สำหรับคนที่เพิ่งเริ่มใช้ smarty หรือยังสแกนอ่าน manual ไม่หมด ทำให้ไม่รู้ว่าใน smarty นั้นมี function {literal} เอาไว้สำหรับให้ smarty ข้าม code ที่อยู่ใน {literal} นี้ ในกรณีที่เราอยากจะเขียน code ต่างๆ ที่อาจจะไป match กับ syntax ของ smarty แต่ไม่อยากให้ smarty มา compile เช่นการเขียน code java script ใน smarty template เป็นต้น

ปกติ basic syntax ของ smarty template นั้น tag ของ smarty จะขึ้นต้นด้วย { และจบด้วย } (นอกจากคุณจะเซตให้เป็นอย่างอื่น) ตัวอย่างเช่น

ตัวอย่างที่ 1: Smarty Template อย่างง่าย

 

การปรับใช้ Smarty Template Engine ใน Zend Framework

ด้วยความที่ใช้ smarty มาเป็น template engine จนติด พอผมมาเริ่มใช้ zend framework ก็เลยหาอ่านบทความว่า จะเอา smarty นี้มาใช้ร่วมกันได้ไหม เพราะว่า มีหลายอย่างที่ทำกับ smarty แล้วง่ายดี และยังไม่อยากจะปรับทุกสิ่งทุกอย่าง เข้า Zend_View (จริงๆ แล้วจะบอกว่าขี้เกียจก็ไม่ผิด) ซึ่งก็พบว่า สามารถเอามาใช้ร่วมกันได้ ไม่มีปัญหา เพราะทาง zend เค้าออกแบบ framework ตัวนี้มาให้ยืดหยุ่นมากทีเดียว เราสามารถจะเพิ่มเติม หรือปิดไม่ใช้ อะไรก็ได้

และพอเริ่มจะเอา smarty มาใช้จริงๆ ก็เริ่มหาอ่านว่าชาวบ้านเขาทำกันยังงัย ก็พบที่เขาถกกันอยู่ 2 สายหลักๆ ดังนี้

1. Extends Zend_View และผสาน Smarty เข้าไป

สร้าง View เป็นของตัวเอง เช่นอาจจะชื่อ Smarty_View โดย extends มาจาก Zend_View (หรือ Zend_View_Abstract) เช่น

class Smarty_View extends Zend_View_Abstract
{
}

เราจะนำ smarty (template engine) มาใช้งานได้อย่างไร?

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

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

Tag ของ smarty ใน HTML templates ช่างกวนใจเสียเหลือเกิน

ขอเกริ่นนำนิดหน่อยน้ะครับ ดังจะทราบกันดีอยู่แล้ว (หรือถ้าไม่ทราบ ก็เปิด manual แล้วดูที่ Chapter 3. Basic Syntax) ว่า syntax ของ Smarty หรือ tag ของ smarty นั้น ต้องขึ้นต้นด้วย { และจบด้วย } เช่น

{assign var="myFirstMessage" value="Hwllo World!"}
<b>{$myFirstMessage}</b>

Smarty (Template Engine)

Smarty (Template Engine) - Why use it?

เว็บไซต์ : http://smarty.php.net/
Download : http://smarty.php.net/download.php
เอกสารการใช้งาน : http://smarty.php.net/docs.php

ทำไมต้อง Smarty ?
[เรียบเรียงจากเว็บไซต์ ของ Smarty โดยตรง - ผ่านทักษะภาษาอังกฤษในระดับ C-- ของผม]
ถ้าเก่งภาษาอังกฤษ แนะนำให้อ่านโดยตรงที่นี่นะคับ http://smarty.php.net/whyuse.php

วัตถุประสงค์หลักสำหรับการออกแบบโปรแกรม Smarty ขึ้นมานั้น ก็ เพื่อต้องการแยกการทำงานในส่วนของ การแสดงผล (Presentation Layers) ออกจาก ส่วนของ การประมวลผล ข้อมูล(Business Logic Layers) อย่างชัดเจน ซึ่ง โดย ส่วนใหญ่ แล้ว โปรแกรมการประมวลผล และ การแสดงผลจะ ใช้ รูปแบบ ของ ภาษาที่ ต่างกัน ค่อน ข้างชัดเจ นอยู่แล้ว

โดย ที่การ แสดง ผล เราจะ ใช้ ภาษา HTML ส่วนการ ประมวลผล เราจะใช้ ภาษา PHP



©2007-2010 PHPZealots.com. All right reserved.
Syndicate content