成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

代碼解釋類似smart模版引擎原理

forrest23 / 2661人閱讀

摘要:先貼下目錄結(jié)構(gòu)模版編譯后的目錄模版源文件夾山寨類文件源文件文件夾編譯之后文件夾需要替換的左邊標記需要替換的左邊標記當前正在編譯的模版文件名正在讀取的模版文件模版變量池把用到的變量放入到變量池子中取出一條變量,用于下面的正則替換

先貼下目錄結(jié)構(gòu):

 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 可對用戶界定的左右定界符中出現(xiàn).  + * ? [ ^ ] $ ( ) { } = ! < > | : -進行轉(zhuǎn)義
            $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); } }

簡單調(diào)用如下:(index.php中內(nèi)容)

assign("name","iamtb");

    $test->assign("pageTitle","tbtbt");

    $test->getSourceTemplate("index");

    $test->compileTemplate("index");

    $test->display("index");

既然你看到這里,其實這篇文章寫的更好

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/21328.html

相關(guān)文章

  • 構(gòu)建一個使用 Virtual-DOM 的前端模版引擎

    摘要:目錄前言問題的提出模板引擎和結(jié)合的實現(xiàn)編譯原理相關(guān)模版引擎的詞法分析語法分析與抽象語法樹代碼生成完整的結(jié)語前言本文嘗試構(gòu)建一個前端模板引擎,并且把這個引擎和進行結(jié)合。于是就構(gòu)思了一個方案,在前端模板引擎上做手腳。 作者:戴嘉華 轉(zhuǎn)載請注明出處并保留原文鏈接( https://github.com/livoras/blog/issues/14 )和作者信息。 目錄 前言 問題的提出...

    imccl 評論0 收藏0
  • 前端常用插件、工具類庫匯總

    摘要:頁面調(diào)試騰訊開發(fā)維護的代碼調(diào)試發(fā)布,錯誤監(jiān)控上報,用戶問題定位。同樣是由騰訊開發(fā)維護的代碼調(diào)試工具,是針對移動端的調(diào)試工具。前端業(yè)務(wù)代碼工具庫。動畫庫動畫庫,也是目前通用的動畫庫。 本人微信公眾號:前端修煉之路,歡迎關(guān)注 本篇文章整理自己使用過的和看到過的一些插件和工具,方便日后自己查找和使用。 另外,感謝白小明,文中很多的工具來源于此。 彈出框 layer:http://layer....

    GitCafe 評論0 收藏0
  • Express 實戰(zhàn)(七):視圖與模板:Pug 和 EJS

    摘要:而框架中最常用的兩個視圖引擎是和。實際上這些上下文對象就是會在視圖中使用到的變量。其實視圖緩存并不是緩存視圖實際上它緩存的視圖路徑。根據(jù)默認視圖引擎將缺少拓展名的視圖文件補充完整。實際上存在由不同組織維護的兩個不同版本的。 showImg(https://segmentfault.com/img/remote/1460000010821004);前面的內(nèi)容大都是關(guān)于 Express 框...

    wmui 評論0 收藏0
  • velocity的基本使用 && 實例講解

    摘要:的簡介是一個基于的模板引擎。使用,也可以寫成。所以,應(yīng)該使用規(guī)范的格式書寫現(xiàn)在知道變量是而不是。如當頁面中包含,如果對象有值,將顯示的值,如果不存在對象同,則在頁面中將顯示字符。 velocity的簡介 Velocity是一個基于java的模板引擎(template engine)。它允許任何人僅僅簡單的使用模板語言(template language)來引用由java代碼定義的對象,...

    zhunjiee 評論0 收藏0
  • velocity的基本使用 && 實例講解

    摘要:的簡介是一個基于的模板引擎。使用,也可以寫成。所以,應(yīng)該使用規(guī)范的格式書寫現(xiàn)在知道變量是而不是。如當頁面中包含,如果對象有值,將顯示的值,如果不存在對象同,則在頁面中將顯示字符。 velocity的簡介 Velocity是一個基于java的模板引擎(template engine)。它允許任何人僅僅簡單的使用模板語言(template language)來引用由java代碼定義的對象,...

    scq000 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<