摘要:先貼下目錄結構模版編譯后的目錄模版源文件夾山寨類文件源文件文件夾編譯之后文件夾需要替換的左邊標記需要替換的左邊標記當前正在編譯的模版文件名正在讀取的模版文件模版變量池把用到的變量放入到變量池子中取出一條變量,用于下面的正則替換
先貼下目錄結構:
ls compiled/ index.php source/ ss.class.PHP compiled 模版編譯后的目錄 index.php source 模版源文件夾 ss.clsss.php 山寨類smarty文件
ss.clsss.php
templateDir=$templateDir; $this->compileDir=$compileDir; if(!empty($leftTag))$this->leftTag=$leftTag; if(!empty($rightTag))$this->rightTag=$rightTag; if(!empty($templateExtName))$this->templateExtName=$templateExtName; } // 把用到的變量放入到變量池子中 public function assign($tag,$var){ $this->varPool[$tag]=$var; } // 取出一條變量,用于下面的str_replace正則替換 public function getVar($tag){ return $this->varPool[$tag]; } //獲取模版源文件 public function getSourceTemplate($templateName){ $this->currentTemp=$templateName; // 拼接完整文件名 $sourceFileName=$this->templateDir.$this->currentTemp.$this->templateExtName; $this->outputHtml=file_get_contents($sourceFileName); } // 編譯 public function compileTemplate($templateName=null){ // 獲取當前需要編譯的模版 $templateName=empty($templateName)?$this->currentTemp:$templateName; // $pattern="/{#($[a-zA-Z_]w+)#}/";// 符合php變量命名 //preg_quote 可對用戶界定的左右定界符中出現. + * ? [ ^ ] $ ( ) { } = ! < > | : -進行轉義 $pattern="/".preg_quote($this->leftTag); //前后加上空格匹配任意次匹配類似{# $name #}
$pattern.=" *$([a-zA-Z_]w*) *"; $pattern.=preg_quote($this->rightTag)."/"; // $1寫成1也可以 ,$1為正則的匹配單元,或者可以說是總(子)模式 $this->outputHtml=preg_replace($pattern, "getVar("$1");?>", $this->outputHtml); // 注意不要用雙引號,會解析getvar Template::$getVar報notice錯誤 $this->outputHtml=preg_replace($pattern, "getVar(1);?>", $this->outputHtml); $compileFileName=$this->compileDir.md5($templateName).$this->templateExtName; file_put_contents($compileFileName, $this->outputHtml); } // 輸出 public function display($templateName=null){ $templateName=empty($templateName)?$this->currentTemp:$templateName; include($this->compileDir.md5($templateName).$this->templateExtName); } }
簡單調用如下:(index.php中內容)
assign("name","iamtb"); $test->assign("pageTitle","tbtbt"); $test->getSourceTemplate("index"); $test->compileTemplate("index"); $test->display("index");
既然你看到這里,其實這篇文章寫的更好
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/21328.html
摘要:目錄前言問題的提出模板引擎和結合的實現編譯原理相關模版引擎的詞法分析語法分析與抽象語法樹代碼生成完整的結語前言本文嘗試構建一個前端模板引擎,并且把這個引擎和進行結合。于是就構思了一個方案,在前端模板引擎上做手腳。 作者:戴嘉華 轉載請注明出處并保留原文鏈接( https://github.com/livoras/blog/issues/14 )和作者信息。 目錄 前言 問題的提出...
摘要:頁面調試騰訊開發維護的代碼調試發布,錯誤監控上報,用戶問題定位。同樣是由騰訊開發維護的代碼調試工具,是針對移動端的調試工具。前端業務代碼工具庫。動畫庫動畫庫,也是目前通用的動畫庫。 本人微信公眾號:前端修煉之路,歡迎關注 本篇文章整理自己使用過的和看到過的一些插件和工具,方便日后自己查找和使用。 另外,感謝白小明,文中很多的工具來源于此。 彈出框 layer:http://layer....
摘要:而框架中最常用的兩個視圖引擎是和。實際上這些上下文對象就是會在視圖中使用到的變量。其實視圖緩存并不是緩存視圖實際上它緩存的視圖路徑。根據默認視圖引擎將缺少拓展名的視圖文件補充完整。實際上存在由不同組織維護的兩個不同版本的。 showImg(https://segmentfault.com/img/remote/1460000010821004);前面的內容大都是關于 Express 框...
摘要:的簡介是一個基于的模板引擎。使用,也可以寫成。所以,應該使用規范的格式書寫現在知道變量是而不是。如當頁面中包含,如果對象有值,將顯示的值,如果不存在對象同,則在頁面中將顯示字符。 velocity的簡介 Velocity是一個基于java的模板引擎(template engine)。它允許任何人僅僅簡單的使用模板語言(template language)來引用由java代碼定義的對象,...
摘要:的簡介是一個基于的模板引擎。使用,也可以寫成。所以,應該使用規范的格式書寫現在知道變量是而不是。如當頁面中包含,如果對象有值,將顯示的值,如果不存在對象同,則在頁面中將顯示字符。 velocity的簡介 Velocity是一個基于java的模板引擎(template engine)。它允許任何人僅僅簡單的使用模板語言(template language)來引用由java代碼定義的對象,...
閱讀 2060·2021-11-23 09:51
閱讀 3353·2021-09-28 09:36
閱讀 1120·2021-09-08 09:35
閱讀 1758·2021-07-23 10:23
閱讀 3259·2019-08-30 15:54
閱讀 2998·2019-08-29 17:05
閱讀 438·2019-08-29 13:23
閱讀 1294·2019-08-28 17:51