1. 程式人生 > >smarty模板原理

smarty模板原理

文件夾 har 路徑 2個 edi 原理 gin lena 但是

模板主要是用來讓前端和後端分離的,前臺頁面只是一個前臺頁面,後臺頁面用php代碼寫邏輯,寫完邏輯拿到前臺顯示。

一、寫法

一般需要以下:寫3個頁面:

1.顯示頁面aa.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>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>無標題文檔</title>
</head>
<body>
<{$a}>
</body>
</html>
技術分享

2.類文件Smarty.class.php

技術分享
<?php
class Smarty//寫出類的名字
{
    public $left = "<{";//代表左分隔符,在用phpcms套模板的時候,這個頁面裏面所有嵌入php的代碼都是在{}裏面的。phpcms默認的是{},但是用{}容易出現問題,因為本身的靜態頁面裏面就有{}。這裏分隔符再用{}的話會混淆。所以這裏選擇用<{}>。
    public $right = "}>";//代表右分隔符,默認的是},把{}拿到前段頁面顯示,將{}裏面的內容解析出來。
    
    public $attr = array();//定義一個數組,先默認是空的。裏面存儲註冊變量。
    
    function assign($name,$value)//向smarty裏面註冊變量的方法。裏面需要2個參數,第一個參數是變量名,第二個參數是變量值。
    {
        $this->attr[$name] = $value;//方法調用類裏面的數組方法,把傳過來的變量名當做索引,把傳過來的變量值當做數組裏面的值,存到數組裏面,相當於往數組裏面添加一個變量。
    }
    
    function display($filename)//調用模板顯示的方法,()裏面是靜態頁面的路徑。
    {
        //操作步驟
        //1.讀取靜態頁面所有的內容,把內容存到變量str裏面。
        $str = file_get_contents($filename);
        //2.替換內容,獲取的內容可能是網頁的源代碼,會比較長。找到標記的裏面的內容,然後替換。替換原理是根據正則表達式找到源代碼裏面<{}>分隔符裏面的內容,然後將<{}>裏面的內容替換成數組attr裏面的內容。替換完內容之後,替換完的頁面會變成數組裏面存的,數組裏面有可能存變量,例如存的是catid,那麽這個頁面就變成了動態的頁面。
        //3.強替換完的頁面保存到某一個位置。
        
        //4.將替換完的頁面加載到當前頁面,用include或者require加載到當前頁面。
    }
}
技術分享

3.註入頁面

技術分享
<?php
//這是一個純php頁面,裏面只有邏輯,沒有前臺顯示代碼。
$a = 10;
include("./Smarty.class.php");//引入Smarty類
$smarty = new Smarty();//新建一個smarty對象
$smarty->assign("a",$a);//調用assign方法,裏面寫一個變量,變量名為a,變量值為$a。把這個變量註冊進去。

$smarty->display("aa.html");//把一個模板aa.html拿進來。
技術分享

二、示例

1.類的頁面

技術分享
<?php

define("ROOT",str_replace("\\","/",dirname(__FILE__)).‘/‘); //常量ROOT中指定項目根目錄。使用define定義一個常量,常量的名字為ROOT,常量的值為後面的內容,意思是獲取文件的路徑後,將目錄裏面的"\"替換成"/"。將windows裏面的路徑修改成網頁裏面的文件的路徑。

//echo str_replace("\\","/",dirname(__FILE__)).‘/‘; //獲取當前文件所在的位置

require ROOT.‘libs/Smarty.class.php‘; //加載Smarty類文件
$smarty = new Smarty(); //實例化Smarty對象


define("CSS_PATH","/project/css/");//定義常量,將css文件放到根目錄中project/css文件夾下。
define("JS_PATH","/project/js/");//定義常量,將js文件放到根目錄中project/js文件夾下。

//$smarty -> auto_literal = false; //就可以讓定界符號使用空格
$smarty->setTemplateDir(ROOT.‘templates/‘); //設置所有模板文件存放位置
//$smarty->addTemplateDir(ROOT.‘templates2/‘); //添加一個模板文件夾
$smarty->setCompileDir(ROOT.‘templates_c/‘); //設置編譯過的模板存放的目錄
$smarty->addPluginsDir(ROOT.‘plugins/‘); //設置為模板擴充插件存放目錄
$smarty->setCacheDir(ROOT.‘cache/‘); //設置緩存文件存放目錄
$smarty->setConfigDir(ROOT.‘configs/‘); //設置模板配置文件存放目錄

$smarty->caching = false; //設置Smarty緩存開關功能
$smarty->cache_lifetime = 60*60*24; //設置緩存模板有效時間一天

$smarty->left_delimiter = ‘<{‘; //設置模板語言中的左結束符
$smarty->right_delimiter = ‘}>‘; //設置模板語言中的右結束符

?>
技術分享

2.註入頁面

技術分享
<?php
//引入配置文件
include("../init.inc.php");//init.inc.php裏面已經造smarty對象了。

$a = "hello";
$smarty->assign("ceshi",$a);//註入變量
$smarty->display("test.html");//調用模板文件來顯示
技術分享

3.顯示頁面

技術分享
<!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>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>無標題文檔</title>
</head>
<body>
<{$ceshi}>
</body>
</html>
技術分享

運行的時候要運行註入頁面,註入頁面把顯示頁面拿來使用顯示內容,並不是直接走顯示頁面。直接運行顯示頁面的話只會顯示<{$ceshi}>。

技術分享

smarty模板原理