ด้วยความที่ใช้ 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 { }
แล้วทำการ overide method ของ Zend_View ด้วยส่วนหนึ่ง เพื่อผสานเอา smarty เข้ามา อ่านรายละเอียดได้ที่นี่ วิธีนี้ก็เหมือนการเอา smarty มาผสาน (intregate) เข้ากับ Zend_View โดยเรายังสามารถใช้ความสามารถของ Zend_View ได้อย่างเต็มที่ และเขียน template ได้แบบ smarty แต่วิธีนี้ จะยุ่งหน่อยตอนที่จะ overide method บางส่วนของ Zend_View เช่น ในบทความที่ไปดูมา เขาต้อง overide method ต่างๆ ได้แก่ __construct(), _run(), assign(), escape(), output() และ isCached() และตอนเรียกใช้งานก็จะใช้ในแบบของ Zend_View คนที่ติด smarty (อย่างผม) ที่วันๆ นั่งเรียก assign() ก็ต้องมีปรับกระบวนกันนิดหน่อย
2. ปิด Zend_View ซะ แล้วก็ใช้ Smarty แทน
อีกสาย เค้ามองว่า เค้าไม่ชอบ Zend_View ลองอ่านได้ที่นี่ และเทอดทูล smarty ว่าเป็น template engine ที่ดีที่สุดในโลก (โลกของคนรัสเซีย หรือเปล่าหว่า อิอิ)
ข้อความต้นฉบับ ".... Zend_View has ability to use your own filters and helper functions, but with Smarty you don't need them because Smarty has its own plugins, filters, modifiers. Just forget about Zend_View and use best template engine for PHP in the world!"
อีกเหตุผลคือ เขามองว่า เขาจะไม่ใช้ Zend_View จะใช้ smarty เท่านั้น จึงไม่มีเหตุผลที่จะต้อง extends (ดังที่เราจะทราบอยู่แล้วว่า การ extends มาจาก class แม่นั้น จะสืบทอดทุกอย่าง (ที่ไม่ใช่ private) มาจากแม่ด้วย) สายนี้เขาจึงแนะนำให้ปิด การเรียกใช้ Zend_View โดยให้เซตค่า 'noViewRenderer' เป็น true ใน Zend_Controller_Front เช่น
... $frontController->setParam('noViewRenderer', true); ...
แล้วในตอน implement action ต่างๆ ใน controller ก็เรียกใช้งาน smarty แล้วการ assign() หรือ fetch() หรือ display() ที่เราคุ้นเคย ก็จะได้เหมือนเดิม ลองดูรายละเอียดได้ที่นี่
โดยส่วนตัวผมเอง ผมก็ใช้แบบสายที่ 2 คือปิด Zend_View และใช้ smarty แทน ไม่ใช่ไม่ชอบ Zend_View หรืออะไรหรอกน้ะครับ แต่ผมชอบ smarty มากกว่า และ smarty ก็เก่งมาก ทั้งยังมี plugins ส่วนตัวที่เขียนเก็บเอาไว้บ้างนิดหน่อย ถ้าจะทิ้งไปก็เสียดาย :)
แต่ท่านไหนจะใช้อะไร อย่างไร ก็แล้วแต่ชอบ แล้วแต่วาระ โอกาส และสิ่งแวดล้อมของงานก็แล้วกันน้ะครับ :)
- roteee's blog
- Login or register to post comments
- 805 reads
ลองทำตามแบบที่ 2 แต่ยัง งงๆ อยู่เลยค่ะ
ขอความกรุณา สอนแบบละเอียด step by step เลยได้ป่ะคะ
ขอบคุณล่วงหน้าเลย
ผมก็ลองตามแบบที่สองแล้วครับ งงเหมือนกันติดตรง
อยากให้ช่วยสอนแบบละเอียดทีครับ ขอบคุณล่วงหน้าครับ
ไม่ได้เข้ามานาน เพิ่งเห็นว่ามีคำถาม ... เดี๋ยวขอว่างแล้วจะมาเขียนอธิบายต่อน้ะคับ
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
เซือในสิ่งที่เฮ็ด เฮ็ดในสิ่งที่เซือ...
แล้วผมจะรอนะคัฟ ยังไงก็ขอบคุณท่าน roteee ไว้ล่วงหน้าเลยนะคัฟ ขอบคุณค๊าฟ ^ /\^
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
เซือในสิ่งที่เฮ็ด เฮ็ดในสิ่งที่เซือ...