วิธีติดตั้ง Smarty 3.1.7 กับ CodeIgniter 2.1.0

ผมหาทางติดตั้ง  Smarty 3.1.7 เพื่อให้ใช้งานได้กับ CodeIgniter 2.1.0  ได้  โดยมีขั้นดังนี้

  1. ดาวน์โหลดและติดตั้ง CodeIgniter ตามปกติ
  2. การติดตั้ง Smarty จะดำเนินการโดยใช้ Ci-Smarty  ที่พัฒนาขึ้นโดยคุณ Dwayne Charrington   ให้ดาวน์โหลดและติดตั้งลงใน CodeIgniter ในข้อ 1.  แล้วให้ทำการทดสอบว่าสามารถใช้งาน Smarty ได้จริง
  3. เนื่องจากในขณะที่เขียนบทความนี้ Smarty ที่ิติดตั้งใน Ci-Smarty เป็นเวอร์ชัน 3.1.1 เราจึงต้องมีการแก้ไขปรับแก้ไฟล์  โดยโครงสร้างไฟล์ของ Ci-Smarty มีดังภาพข้างล่างนี้
  4. เราต้องปรับแก้ 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;
?>