smarty模板原理
阿新 • • 發佈:2017-07-16
文件夾 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模板原理