Smarty templating engine integration for Codeigniter 3.0+ with inbuilt theming and asset management.
Tag: Smarty
วิธีติดตั้ง Smarty 3.1.7 กับ CodeIgniter 2.1.0
ผมหาทางติดตั้ง Smarty 3.1.7 เพื่อให้ใช้งานได้กับ CodeIgniter 2.1.0 ได้ โดยมีขั้นดังนี้
- ดาวน์โหลดและติดตั้ง CodeIgniter ตามปกติ
- การติดตั้ง Smarty จะดำเนินการโดยใช้ Ci-Smarty ที่พัฒนาขึ้นโดยคุณ Dwayne Charrington ให้ดาวน์โหลดและติดตั้งลงใน CodeIgniter ในข้อ 1. แล้วให้ทำการทดสอบว่าสามารถใช้งาน Smarty ได้จริง
- เนื่องจากในขณะที่เขียนบทความนี้ Smarty ที่ิติดตั้งใน Ci-Smarty เป็นเวอร์ชัน 3.1.1 เราจึงต้องมีการแก้ไขปรับแก้ไฟล์ โดยโครงสร้างไฟล์ของ Ci-Smarty มีดังภาพข้างล่างนี้
- เราต้องปรับแก้ 3 ส่วน ตามที่ลูกศรชี้ไว้
- ส่วนที่ 1 แก้ไขไฟล์ smarty.php ในไดเรกทอรี config โดยให้แก้ตัวแปร $config[‘cache_status’] ให้มีค่าเป็น TRUE จากเดิมที่เป็น 1 เนื่องจากในไฟล์ libraries/Smarty.php ตรวจสอบค่า $config[‘cache_status’] ว่าเป็น TRUE หรือไม่
$config['cache_status'] = TRUE;
และให้เพิ่ม 2 บรรทัดต่อไปนี้ที่ท้ายไฟล์ เพื่อจะได้เป็นการบังคับให้ให้มีการ compile template ทุกครั้งในระหว่างที่เรากำลังพัฒนาโปรแกรม และเมื่อจะนำไปใช้งานจริงก็ควรกำหนดค่าให้เป็น FALSE ทั้ง 2 ตัวแปร
$config['compile_check'] = TRUE; $config['force_compile'] = TRUE;
- ส่วนที่ 2 แก้ไขไฟล์ Smarty.net ในไดเรอกทอรี libraries โดยให้เพิ่ม 2 คำสั่งต่อไปนี้ใต้บรรทัดที่มี $this->template_ext เพื่อนำค่าจากการแก้ไขส่วนที่ 1 มาใช้งาน
$this->compile_check = config_item('compile_check'); $this->force_compile = config_item('force_compile');
หลังจากนั้นให้ทำการ comment ในคำสั่งส่วนที่จะทำการเพิ่ม helper ต่างๆ โดยใส่เครื่องหมาย /* และ */ ครอบเอาไว้ สาเหตุที่ต้อง comment ไว้ก็เพราะเมื่อเรา upgrade Smarty เป็น 3.1.7 แล้ว คำสั่งในส่วนนี้จะทำให้เกิด error (หากอยากทราบว่าเป็นอย่างไรก็ปล่อยไว้ได้)
/* // Add all helpers to plugins_dir $helpers = glob(APPPATH . 'helpers/', GLOB_ONLYDIR | GLOB_MARK); foreach ($helpers as $helper) { $this->plugins_dir[] = $helper; } */
- ส่วนที่ 3 ให้ทำการดาวน์โหลด Smarty 3.1.7 แล้วแตกไฟล์และคัดลอกเอาไฟล์และไดเรกทอรีภายใต้ libs มาทับของเดิมใน third_party/Smarty/ ทั้งหมด
ขอขอบคุณ คุณ Dwayne Charrington ที่ได้พัฒนา Ci-Smarty ไว้ครับ ขั้นตอนข้างบนนี้จะไม่จำเป็นเมื่อ Ci-Smarty มีการ update ครับ และผมไม่รับประกันความเสี่ยงที่เกิดขึ้น รวมทั้งปัญหาที่ตามมาใดๆ ทั้งสิ้นครับ!
Happy Coding Year! 😀
วิธีการเรียก Smarty library แบบง่าย
ผมบังเิอิญไปเจอวิธีการที่จะเรียก Smarty library ที่น่าสนใจ สะดวกมากเวลาที่กำลังพัฒนาโปรแกรม เพราะไม่ต้องระบุ path เลย แต่เมื่อพัฒนาโปรแกรมเสร็จแล้วก็ควรแก้ไข path ให้ถูกต้องครับ
<?php // SMARTY Section define('SMARTY_DIR',str_replace("\","/",getcwd()).'/Smarty-2.6.19/libs/'); require_once(SMARTY_DIR . 'Smarty.class.php'); $smarty = new Smarty(); $smarty->template_dir = str_replace("\","/",getcwd()).'/templates/'; $smarty->compile_dir = str_replace("\","/",getcwd()).'/templates_c/'; $smarty->config_dir = str_replace("\","/",getcwd()).'/configs/'; $smarty->cache_dir = str_replace("\","/",getcwd()).'/cache/'; //** un-comment the following line to show the debug console //$smarty->debugging = true; ?>