Header ads

Header ads
» » » Tích hợp thư viện Smarty vào CodeIgniter Framework


Smarty là một hệ thống tạo mẫu web (web template system) được viết trên nền PHP. Smarty được giới thiệu như là một công cụ cho việc chia nhỏ các quá trình thiết kế trang web. Đây là một chiến lược thiết kế cho các ứng dụng web hiện đại. Smarty tạo ra các nội dung web từ các vị trí đặc biệt được gọi là smarty tag. Các tag này được nằm trong các mẫu (template). Các tag này sẽ được xử lý và chèn vào với các code khác nhau.
Các tag này là chỉ thị cho Smarty mà có thể được bao đóng bới tag mở và tag khóa. Những hướng dẫn này có thể là biến, và được định nghĩa bởi dấu dollar ($), các chức năng, hàm logic hoặc các luồng điều khiển. Smarty cho phép các lập trình viên có thể tự định nghĩa các chức năng và truy cập sử dụng các Smarty tags Smarty là kết quả của việc tối ưu hóa và phân luồng công việc, cho phép trình diễn các trang web bằng cách chia nhỏ chúng ở đầu cuối (back-end). Ý tưởng đó đã giúp giảm thiểu rất nhiều giá thành và sự đồ sộ của các phần mềm. Dưới mỗi một ứng dụng thành công thì luôn phân chia thành 2 mảng là người thiết kế chính là lá chắn bảo về mã nguồn sau (back-end coding) và người lập trình php được bảo vệ bới mã trình diễn. Smarty hỗ trợ một vài ngôn ngữ lập trình bậc cao, bao gồm:
  • điều khiển luồng dữ liệu, foreach
  • if, elseif, else
  • biến thay đổi
  • Người dùng tạo chức năng
Bên cạnh đó, thì một trong những chức năng nổi bật của các Template Engine là hệ thống tạo mẫu cho phép thay đổi từ mẫu tới mẫu. Thông thường khi lập trình PHP bạn hay viết lẫn cả phần HTML với mã lệnh PHP trên một trang. Điều này sẽ dẫn đến rất rối nhất là khi bảo trì. Bạn là người viết ra và cũng là người bảo trì thì không sao nhưng nếu bạn viết ra sau đó người khác bảo trì. Chắc họ nhìn vào code của bạn họ sẽ ngất mất vì quá rối. Mặt khác khi làm nhiều trang web có chức năng như nhau. Chỉ khác giao diện nên nếu lập trình theo kiểu như vậy bạn phải viết lại hoàn toàn. Ngoài ra muốn code được bạn phải chờ người thiết kế giao diện cho bạn sau đó cắt ra file HTML... rồi mới code... Tất cả những điều này sẽ làm giảm năng xuất công việc của bạn đi rất nhiều. Smarty ra đời đã giải quyết được các vấn đề nêu trên. Dưới đây là một số ưu điểm của Smarty:
1.Tốc độ load trang rất nhanh (do tạo được cache)
2.Code ứng dụng của bạn trở lên trong sáng, mạch lạc và dễ bảo trì hơn rất nhiều (do tách biệt phần code và templates).
3.Hiệu quả công việc đạt tối đa (Người thiết kế và người lập trình làm việc hoàn toàn độc lập. Thay đổi giao diện website nhanh chóng...) 
4.Được sử dụng phổ biến (bên Nhật rất ưa chuộng Smarty)

Để tích hợp smarty vào CI, bạn hãy làm các bước sau:

1. Download smarty ở đây http://www.smarty.net/
2. Bạn giải nén file đã download sẽ được thư mục Smarty-3.1.13 (các con số tuỳ phiên bản của smarty, mình đang dùng phiên bản số 3.1.13)
3. Copy thư mục đa giải nén vào trong thư mục application/third_party. Lúc này bạn có Smarty.class.php ở vị trí như sau: application/third_party/Smarty-3.1.13/libs/Smarty.class.php (nhớ kiểm tra lại để bảo đảm điều này là chính xác nhé).
4. Trong thư mục application/libraries bạn thêm file Core_smarty.php với nội dung code như sau:
PHP Code:
<?php
if (!defined('BASEPATH'))
    exit(
'No direct script access allowed');
/**
 * Core_Smarty Class
 *
 * @package    CodeIgniter
 * @subpackage    Libraries
 * @category    Parser
 * @author    Truong Chuong Duong
 * @copyright    Copyright (c) 2012, Truong Chuong Duong. (http://chuongduong.net/)
 * @license    http://opensource.org/licenses/OSL-3.0 Open Software License (OSL 3.0)
 * @link    http://chuongduong.net
 * @email    info@chuongduong.net
 * @since    Version 0.1
 */
/**
 * See http://www.smarty.net/docs/en/installing.smarty.extended.tpl.
 */

require APPPATH '/third_party/Smarty-3.1.13/libs/Smarty.class.php';

class 
Core_Smarty extends Smarty {
  
    
$templateExt "php";

    function 
__construct() {
        
parent::__construct();

        
/* GHI CHU 1 */
        
$this->caching Smarty::CACHING_LIFETIME_CURRENT;
        
$smarty->setCompileCheck(false);
        
$this->setCompileDir(APPPATH 'cache' DS "smarty" DS "compile" DS);
        
$this->setCacheDir(APPPATH 'cache' DS "smarty" DS "cache" DS);
        
$this->setTemplateDir(APPPATH 'views' DS);
    }

    
/**
     * Parse a template
     *
     * Parses pseudo-variables contained in the specified template view,
     * replacing them with the data in the second param
     *
     * @param    string
     * @param    array
     * @param    bool
     * @return    string
     */
    
public function parse($template$data = array(), $return FALSE) {
        if (!empty(
$data)) {
            foreach (
$data as $key => $val) {
                
$this->assign($key$val);
            }
        }

        
/* GHI CHU 2 */
        
$cache_id $template"_" md5(json_encode($data));
        
$compile_id null;
       
        return 
$this->fetch("$template.$this->templateExt"$cache_id$compile_idnull, !$returnTRUE);
    }

    public function 
display($template NULL$cache_id NULL$compile_id NULL$parent NULL) {
        return 
$this->parse($template);
    }

    
/* GHI CHU 3 */
    
public function __set($key$value) {
        
$this->assign($key$value);
    }

}


/* GHI CHU 4 */
//Auto init and replace the default parser

$CI = & get_instance();
$CI->parser = new Core_Smarty();
$CI->view = &$CI->parser;

/* End of file Core_smarty.php */
Trong đó, bạn lưu ý một số đoạn mình có thêm chữ GHI CHU X. Cụ thể:
  • GHI CHÚ 1: Đây là đoạn khởi tạo chế độ lưu cache của smarty, nhược điểm của smarty là render chậm (như bất kỳ library render view nào khác) nên tối ưu cache sẽ tăng tốc website của bạn lên rất nhiều. Cụ thể phần này các bạn xem ở đây http://www.smarty.net/docs/en/caching.tpl
    Để đơn giản, hãy lựa chọn các kiểu hình mẫu sau:
    Chạy khi bạn đang viết code:
    PHP Code:
            $this->caching Smarty::CACHING_OFF;
            
    $smarty->setCompileCheck(false); 
    Chạy khi lên production:
    PHP Code:
            $this->caching Smarty::CACHING_LIFETIME_CURRENT;
            
    $smarty->setCompileCheck(false); 
  • GHI CHÚ 2: Do để tối ưu tốc độ tạo và kiểm tra cache nên nếu bạn chỉ có một lượng thay đổi nhỏ dữ liệu thì smarty sẽ không render lại mà nó trả về cái đã cache luôn nên kết quả có thể không như mong muốn. Ví dụ bạn render cái view tên là menu.tpl, trước khi login cũng cái menu này những sẽ có link "Login", sau khi login thì sẽ đổi thành "Logout". Tuy nhiên như thông thường, smarty sẽ trả về cả 2 đều có link "Login" do nó đã cache rằng view "menu.tpl" sẽ có kết quả là như lần đầu.
    Để tránh lỗi sai này mình đã thêm các dòng sau nhằm xác định chính xác liệu dữ liệu có thay đổi không, với mỗi dữ liệu + view tương ứng sẽ có một file cache tương ứng:
    PHP Code:
            $cache_id $template"_" md5(json_encode($data));
            
    $compile_id null
    Hãy thử và cảm nhận ;)
  • GHI CHÚ 3, GHI CHÚ 4: Mình viết phương thức này nhằm phục vụ cho những bạn đã quen hay thích phong cách assign biến vào view kiểu như của Zend thay vì quăng vào array truyền thống của CI. Cụ thể lúc này trong controller bạn có thể viết như sau:
    PHP Code:
    $this->view->bienRaView "value 1";
    $this->view->bienRaView2 = array("item 1""item 2");

    $this->view->render("view");
    //hoặc
    //$this->view->display("view");
    //$this->parser->render("view");
    //$this->parser->display("view"); 
    Thay vì kiểu truyền thống của CI:
    PHP Code:
    $data['bienRaView'] = "value 1";
    $data['bienRaView2'] = array("item 1""item 2");

    $this->view->render("view"$data); 

5. Để tự động load smarty, bạn tìm file application/config/autoload.php
Bổ sung core_smarty vào autoload libraries, lưu ý phân biệt hoa thường, tên ở đây phải hoàn toàn trùng khớp với tên file và tên class đã tạo.
$autoload['libraries'] = array('Core_smarty');

6. Vậy là xong. Bây giờ smarty đã sẵn sàng cho bạn.

About Học viện đào tạo trực tuyến

Xinh chào bạn. Tôi là Đinh Anh Tuấn - Thạc sĩ CNTT. Email: dinhanhtuan68@gmail.com .
- Nhận đào tạo trực tuyến lập trình dành cho nhà quản lý, kế toán bằng Foxpro, Access 2010, Excel, Macro Excel, Macro Word, chứng chỉ MOS cao cấp, IC3, tiếng anh, phần mềm, phần cứng .
- Nhận thiết kế phần mềm quản lý, Web, Web ứng dụng, quản lý, bán hàng,... Nhận Thiết kế bài giảng điện tử, số hóa tài liệu...
HỌC VIỆN ĐÀO TẠO TRỰC TUYẾN:TẬN TÂM-CHẤT LƯỢNG.
«
Next
Bài đăng Mới hơn
»
Previous
Bài đăng Cũ hơn