01/10/2018, 16:57

MVC CMS - Tích hợp smarty template vào ứng dụng

Thì như các bạn đã biết thì Smarty là một template khá mạnh mẽ và nó cũng rất chi là dễ dùng. Bản thân mình cũng dùng nó tính tới thời điểm này cũng được gần chục năm rồi nên tình yêu với nó là bât diệt :). Nếu bạn chưa biết Smarty là gì thì bạn có thể vào thẳng website của nó http://www.smarty.ne ...

Thì như các bạn đã biết thì Smarty là một template khá mạnh mẽ và nó cũng rất chi là dễ dùng. Bản thân mình cũng dùng nó tính tới thời điểm này cũng được gần chục năm rồi nên tình yêu với nó là bât diệt :). Nếu bạn chưa biết Smarty là gì thì bạn có thể vào thẳng website của nó http://www.smarty.net để tìm hiểu hoặc nên Google Search Smarty là biết ngay. Hoặc bạn cũng có thể tim hiểu ngay trên website của www.chiasephp.net cũng có một loạt bài viết về Smarty Engine.

Thì trong nội dung bài viết này mình không nói về Smarty nữa nhé. Mình sẽ tập chung về làm sao ta có thể tích hợp nó vào ứng dụng của mình.

1. Download Smarty template engine.

Truy cập vào http://www.smarty.net/ để download package Smarty. Sau khi download về các bạn giải nén và copy chúng vào một folder trong project của bạn ở đây mình sẽ copy chúng vào thư mục /core/smarty

2. Config Smarty template engine.

Sau khi các bạn copy xong thì Smarty chưa chạy được đâu nhé. Bạn cần phải có một bước nữa là config nó nữa. Thì trong bài viết này Hướng dẫn sử dụng Smarty template mình đã hướng dẫn các bạn rồi trong bài viết này mình sẽ không nói lại nữa nhé.

Thì thực ra smarty nó không yêu cầu cái gì quá phức tạp trong ứng dụng của bạn chỉ cần chứa hai folder là.

  • templates Chứa đựng các file template, trong thư mục này cũng có thể tạo thêm các thư mục con
  • templates_c Chứa các templates được Smarty compiled
  • config Chứa các tệp tin configs
  • cache Chứa các templates Cache

Trong đó hai folder config và cache là tuy chọn có cũng được không có cũng không sao. Ta cần định khai báo một số hằng số cho TzCMS.

Bạn mở file /core/global.php

/*
|------------------------------
| Include path to smarty library
|------------------------------
*/
define("DIR_SMARTY", DIR_CORE."/smarty");
/*
|------------------------------
| Include path to template file
|------------------------------
*/
define('DIR_TEMPLATES', DIR_APPLICATION . '/templates');
define('DIR_TEMPLATES_C', DIR_APPLICATION . '/templates_c');
/*
|------------------------------
| Smarty debug
|------------------------------
*/
define("SMARTY_DEBUG", 	false);
/*
|------------------------------
| Kiểm tra template có thay đổi không, nếu có, nạp dữ liệu mới
|------------------------------
*/
define("COMPILE_CHECK", true);
/*
|------------------------------
| Caching
|------------------------------
*/
define("SMARTY_CACHING", false);
require(DIR_SMARTY.'/Smarty.class.php');
function smarty_block_dynamic($param, $content, &$smarty) {
	return $content;
}
$smarty = new Smarty();
$smarty->compile_check = COMPILE_CHECK;
$smarty->debugging = SMARTY_DEBUG;
$smarty->template_dir = DIR_TEMPLATES;
$smarty->compile_dir = DIR_TEMPLATES_C;
$smarty->config_dir = DIR_APPLICATION."/conf";
$smarty->config_overwrite = true;
$smarty->allow_php_tag = true;
$smarty->caching = SMARTY_CACHING; 

Như vậy là mình đã tích hợp gần xong smarty vào TzCMS. Tiếp theo là trong folder /application/templates/ mình tạo một file index.html.

Thì file này sẽ là Master Layout trong TzCMS.

Bạn mở file core/bootstrap.php và thêm vài hai dòng code sau.

$cache_id = md5($_SERVER['REQUEST_URI']);
$smarty->display(DIR_TEMPLATES."/index.html", $cache_id);

Thì đoạn code trên có ý nghĩa là Smarty sẽ hiển thị trong file template /application/templates/index.html

Bây giờ thì bạn có thể test smarty được rồi !!

Bây giờ mình sẽ khai báo một biến mảng $assign_list biến này sẽ biến thành một cái kho lưu trữ tất cả các key và value mà chúng ta muốn assign ra ngoài.

Khi bạn muốn assign một biến $controller bạn thường viết như sau.

$smarty->assign('controller', $controller);

Bạn có thể viết như sau nếu sử dụng $assign_list.

$assign_list['controller'] = $controller;
/*
|----------------------------------------
| Các assign khác phải được viết trên câu
| lệnh này. $smarty->assign($assign_list);
|----------------------------------------
*/
$smarty->assign($assign_list);

Final /core/bootstrap.php

<?php if (!defined('ABSPATH')) exit('No direct script access allowed'); 
	/*
	|------------------------------------------------------------
	| TzCMS - Content management system website
	| @Author	: Dev Team (buivanthiem.it@gmail.com)
	| @Date		: 2009/1/18
	| @Version	: 2.1.1
	| @Copyright (c) TzCMS. All Rights Reserved,
	|------------------------------------------------------------
	| Email: info@chiasephp.net
	| Website: http://www.chiasephp.net
	| -----------------------------------------------------------
	*/
	require_once DIR_CORE."/global.php";
	/*
	|---------------------------------------
	| Get controller & action
	|---------------------------------------
	*/
	$controller = strtolower(Input::get('c', 'home'));
	$action = strtolower(Input::get('a', 'default'));
	/*
	|---------------------------------------
	| Core constructor
	|---------------------------------------
	*/
	$core = Core::getInstance();
	
	require(DIR_APPLICATION.'/_header.php');
	/*
	|---------------------------------------
	| Run controller
	|---------------------------------------
	*/
	$controllerInstance = Controller::getInstance(
		array(
			'controller' => $controller,
			'action'	=> $action
		)
	);
	$controllerInstance->run();
	require(DIR_APPLICATION.'/_footer.php');
	
	$assign_list['controller'] = $controller;
	$assign_list['action'] = $action;
	$assign_list['core'] = $core;
	$smarty->assign($assign_list);
	
	$cache_id = md5($_SERVER['REQUEST_URI']);
	$smarty->display(DIR_TEMPLATES."/index.html", $cache_id);
?>

File /application/templates/index.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>TzCMS</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
   	Controller {$controller}
</body>
</html>

Tổng kết.

Trong bài viết này mình chỉ dừng ở phần hướng dẫn tích hợp smarty template vào ứng dụng của mình và ở đây là TzCMS. Trong bài viết tiếp theo mình sẽ hướng dẫn các bạn viết thư viện xử lý template nhé.

0