目次
php模板引擎技术简单实现,php模板引擎
ホームページ バックエンド開発 PHPチュートリアル PHP テンプレート エンジン テクノロジの簡単な実装、PHP テンプレート エンジン_PHP チュートリアル

PHP テンプレート エンジン テクノロジの簡単な実装、PHP テンプレート エンジン_PHP チュートリアル

Jul 12, 2016 am 08:57 AM
テンプレートエンジン

php模板引擎技术简单实现,php模板引擎

用了smarty,tp过后,也想了解了解其模板技术是怎么实现,于是写一个简单的模板类,大致就是读取模板文件->替换模板文件的内容->保存或者静态化

 

tpl.class.php主要解析

  assign 方法实现

1

2

3

4

5

6

7

8

9

10

11

12

13

14

<span>        /*</span><span>*

          * 模板赋值操作

          * @param mixed $tpl_var 如果是字符串,就作为数组索引,如果是数组,就循环赋值

          * @param mixed $tpl_value 当$tpl_var为string时的值,默认为 null

          </span><span>*/</span>

        <span>public</span> function assign($tpl_var,$tpl_value=<span>null</span><span>){

            </span><span>if</span>(is_array($tpl_var) && count($tpl_var) > <span>0</span><span>){

                </span><span>foreach</span> ($tpl_var <span>as</span> $k =><span> $v) {

                    $</span><span>this</span>->tpl_vars[$k] =<span> $v;

                }

            }elseif($tpl_var){

                $</span><span>this</span>->tpl_vars[$tpl_var] =<span> $tpl_value;

            }

        }</span>

ログイン後にコピー

fetch 方法实现

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

<span>/*</span><span>*

   * 生成编译文件

   * @param string $tplFile 模板路径

   * @param string $comFile 编译路径

   * @return string

  </span><span>*/</span>

<span>private</span><span> function fetch($tplFile,$comFile){

 

    </span><span>//</span><span>判断编译文件是否需要重新生成(编译文件是否存在或者模板文件修改时间大于编译文件的修改时间)</span>

    <span>if</span>(!file_exists($comFile) || filemtime($tplFile) ><span> filemtime($comFile)){

        </span><span>//</span><span>编译,此处也可以使用ob_start()进行静态化</span>

        $content = $<span>this</span>-><span>tplReplace(file_get_contents($tplFile));

        file_put_contents($comFile, $content);

    }

 

}            </span>

ログイン後にコピー

简单编译方法:按照规则进行正则替换

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

<span>/*</span><span>*

  * 编译文件

  * @param string $content 待编译的内容

  * @return string

  </span><span>*/</span>

<span>private</span><span> function tplReplace($content){

    </span><span>//</span><span>转义左右定界符 正则表达式字符</span>

    $left = preg_quote($<span>this</span>->left_delimiter,<span>'</span><span>/</span><span>'</span><span>);

    $right </span>= preg_quote($<span>this</span>->right_delimiter,<span>'</span><span>/</span><span>'</span><span>);

 

    </span><span>//</span><span>简单模拟编译 变量</span>

    $pattern =<span> array(

            </span><span>//例如</span><span>{$test}</span>

            <span>'</span><span>/</span><span>'</span>.$left.<span>'</span><span>\$([a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)</span><span>'</span>.$right.<span>'</span><span>/i</span><span>'</span><span>

        );

 

    $replace </span>=<span> array(

            </span><span>'</span><span><?php echo $this->tpl_vars[\'${1}\']; ?></span><span>'</span><span>

        );

 

    </span><span>//</span><span>正则处理</span>

    <span>return</span><span> preg_replace($pattern, $replace, $content);

}</span>

ログイン後にコピー

display = fetch+echo

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

<span>/*</span><span>*

  * 输出内容

  * @param string $fileName 模板文件名

  </span><span>*/</span>

<span>public</span><span> function display($fileName){

    </span><span>//</span><span>模板路径</span>

    $tplFile = $<span>this</span>->template_dir.<span>'</span><span>/</span><span>'</span><span>.$fileName;

 

    </span><span>//</span><span>判断模板是否存在</span>

    <span>if</span>(!<span>file_exists($tplFile)){

        $</span><span>this</span>->errorMessage = <span>'</span><span>模板文件不存在</span><span>'</span><span>;

        </span><span>return</span> <span>false</span><span>;

    }

 

    </span><span>//</span><span>编译后的文件</span>

    $comFile = $<span>this</span>->compile_dir.<span>'</span><span>/</span><span>'</span>.md5($fileName).<span>'</span><span>.php</span><span>'</span><span>;

 

    $</span><span>this</span>-><span>fetch($tplFile,$comFile);

    <br />       include $comFile;

}</span>

ログイン後にコピー

其他属性

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

<span>        //</span><span>模板文件存放位置</span>

        <span>private</span> $template_dir = <span>'</span><span>templates</span><span>'</span><span>;

 

        </span><span>//</span><span>编译文件存放位置</span>

        <span>private</span> $compile_dir = <span>'</span><span>compiles</span><span>'</span><span>;

 

        </span><span>//</span><span>左定界符</span>

        <span>private</span> $left_delimiter = <span>'</span><span>{</span><span>'</span><span>;

 

        </span><span>//</span><span>右定界符 </span>

        <span>private</span> $right_delimiter = <span>'</span><span>}</span><span>'</span><span>;

 

        </span><span>//</span><span>内部临时变量,存储用户赋值</span>

        <span>private</span> $tpl_vars =<span> array();

 

        </span><span>//</span><span>错误信息</span>

        <span>private</span> $errorMessage = <span>''</span><span>;

 

        </span><span>/*</span><span>*

          * 修改类属性的值

          * @param array $configs 需要修改的相关属性及值

          * @return bool

          </span><span>*/</span>

        <span>public</span><span> function setConfigs(array $configs){

            </span><span>if</span>(count($configs) > <span>0</span><span>){

                </span><span>foreach</span> ($configs <span>as</span> $k =><span> $v) {

                    </span><span>if</span>(isset($<span>this</span>-><span>$k))

                        $</span><span>this</span>->$k =<span> $v;

                }

                </span><span>return</span> <span>true</span><span>;

            }

            </span><span>return</span> <span>false</span><span>;

        }</span>

ログイン後にコピー

测试

模板文件 testTpl.html

1

2

3

4

5

6

7

8

9

10

<!DOCTYPE html>

<html lang=<span>"</span><span>en</span><span>"</span>>

<head>

    <meta charset=<span>"</span><span>UTF-8</span><span>"</span>>

    <title>test_tpl_demo</title>

</head>

<body><span>

    {$name}:{$age}:{$message}

</span></body>

</html>

ログイン後にコピー

运行文件 test_tpl.php

1

2

3

4

5

6

7

8

9

10

11

12

13

<?<span>php

    require </span><span>'</span><span>Tpl.class.php</span><span>'</span><span>;

     

    $tpl </span>= <span>new</span><span> Tpl();

    $tplarr </span>=<span> array(

            </span><span>'</span><span>name</span><span>'</span>=><span>'</span><span>waited</span><span>'</span><span>,

            </span><span>'</span><span>age</span><span>'</span>=><span>'</span><span>100</span><span>'</span><span>

        );

    $tpl</span>-><span>assign($tplarr);

    $tpl</span>->assign(<span>'</span><span>message</span><span>'</span>,<span>'</span><span>this is a demo</span><span>'</span><span>);

    $tpl</span>->display(<span>'</span><span>testTpl.html</span><span>'</span><span>);

 

</span>?>

ログイン後にコピー

输出:waited:100:this is a demo

生成编译文件:972fa4d270e295005c36c1dbc7e6a56c.php

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/1107665.htmlTechArticlephp模板引擎技术简单实现,php模板引擎 用了smarty,tp过后,也想了解了解其模板技术是怎么实现,于是写一个简单的模板类,大致就是读取模...
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PHP プログラミングにおける一般的なテンプレート エンジンは何ですか? PHP プログラミングにおける一般的なテンプレート エンジンは何ですか? Jun 12, 2023 am 09:50 AM

近年、PHP プログラミングのテンプレート エンジンは PHP 開発の重要な部分となっており、プログラマーによるページの開発と管理が容易になりました。この記事では、PHP プログラミングにおける一般的なテンプレート エンジンを紹介します。 SmartySmarty は一般的に使用される PHP テンプレート エンジンで、キャッシュされたテンプレート、プラグイン モジュール、カスタム関数などの一連の機能をサポートしています。 Smarty の構文は非常に柔軟で、PHP 変数と HTML タグを組み合わせる問題を解決できるため、PHP 言語はテンプレート化されたデザインにより適しています。しかも、Sさん

Golang テンプレート エンジンの使い方を学ぶ: Golang でテンプレートを使用するための基本ガイド Golang テンプレート エンジンの使い方を学ぶ: Golang でテンプレートを使用するための基本ガイド Jan 20, 2024 am 10:13 AM

Golang テンプレート エンジン スタート ガイド: Golang でテンプレートを使用する方法、特定のコード サンプルが必要です はじめに: テンプレート エンジンは、データとテンプレートを結合し、HTML、テキスト、またはその他の形式でドキュメントを生成できるツールです。 Golang では、組み込みのテンプレート パッケージ (html/template) を使用して、テンプレート エンジンの機能を実装できます。この記事では、Golang のテンプレート エンジンの使用方法と具体的なコード例を詳しく紹介します。 1. テンプレート エンジンの基本概念は、その使用方法を理解することです。

ThinkPHP6 テンプレート エンジン使用ガイド: 絶妙なフロントエンド インターフェイスの作成 ThinkPHP6 テンプレート エンジン使用ガイド: 絶妙なフロントエンド インターフェイスの作成 Aug 26, 2023 pm 11:09 PM

ThinkPHP6 テンプレート エンジン使用ガイド: 絶妙なフロントエンド インターフェイスの作成 はじめに: Web アプリケーションの開発に伴い、フロントエンド インターフェイスの設計と開発がますます重要になってきています。開発者として、フロントエンド インターフェイスの作成と管理に役立つ強力なテンプレート エンジンを使用する必要があります。 ThinkPHP6 のテンプレート エンジンは、このニーズを満たす強力なツールです。この記事では、ThinkPHP6 テンプレート エンジンを使用して美しいフロントエンド インターフェイスを作成する方法を紹介します。パート 1: ThinkPHP6 テンプレート エンジンをインストールする

Fat-Free フレームワークでテンプレート エンジン Blade を使用するにはどうすればよいですか? Fat-Free フレームワークでテンプレート エンジン Blade を使用するにはどうすればよいですか? Jun 03, 2023 pm 08:40 PM

Fat-Free Framework は、Web アプリケーションを構築するためのシンプルで柔軟なツールを提供するように設計された軽量の PHP フレームワークです。ルーティング、データベース アクセス、キャッシュなど、多くの便利な機能が含まれています。 Fat-Free フレームワークでは、Blade テンプレート エンジンを使用すると、テンプレートの管理とレンダリングがより便利になります。 Blade は Laravel フレームワークのテンプレート エンジンであり、強力な構文とテンプレート継承機能を提供します。この記事では、Fat-Free フレームワークで Bl を使用する方法を説明します。

Go のテンプレート エンジン: 完全ガイド Go のテンプレート エンジン: 完全ガイド Jun 17, 2023 pm 12:55 PM

インターネット技術の発展に伴い、Web アプリケーションの需要も増加しています。 Web 開発者は、多くの場合、テンプレート エンジンを使用して動的な Web ページを生成します。この記事では、新しいテンプレート エンジンである Go 言語テンプレート エンジンについて説明します。 Go 言語テンプレート エンジンとは何ですか? Go 言語は、Google によって開発された高度なプログラミング言語です。その構文は簡潔かつ明確なので、学習と使用が簡単です。 Go 言語テンプレート エンジンは、Go 言語で HTML テンプレートを生成するために使用されるテンプレート システムです。 Go言語のテンプレートエンジンは「標準ライブラリ」と呼ばれます。

PHP のテンプレート エンジン Smarty に関する予備調査 PHP のテンプレート エンジン Smarty に関する予備調査 May 11, 2023 pm 05:15 PM

現在、Web サイト開発は重要なコンポーネント テンプレート エンジンから切り離せません。テンプレート エンジンとは、ページ テンプレートとデータを組み合わせて特定の形式の HTML コードを生成するツールを指します。テンプレート エンジンはコードの重複を大幅に削減し、ページのダイナミクスを向上させることができるため、さまざまな Web サイト開発フレームワークにおいて、テンプレート エンジンは不可欠なコンポーネントです。最も一般的で人気のあるテンプレート エンジンの 1 つは Smarty です。 Smarty は DSL (DomainSpecif

PHP で最高のテンプレート エンジン PHP で最高のテンプレート エンジン May 24, 2023 pm 04:01 PM

PHP は Web 開発で広く使用されている言語で、小規模な Web サイトを開発する場合でも、大規模なシステムを開発する場合でも、PHP は非常に人気があり便利です。 PHP 開発プロセスでは、ロジック層とデータ層を分離する必要があり、これにはテンプレート エンジンを使用する必要があります。テンプレート エンジンは、データとテンプレート ファイルを結合して最終的な HTML ファイルを生成するものとして単純に理解できます。この記事では、PHP で利用できる最高のテンプレート エンジンをいくつか紹介します。 SmartySmarty は、PHP で最も人気のあるテンプレート エンジンの 1 つです。

JavaScript開発におけるテンプレートエンジンの選択と使用経験の共有 JavaScript開発におけるテンプレートエンジンの選択と使用経験の共有 Nov 04, 2023 am 11:42 AM

JavaScript 開発におけるテンプレート エンジンの選択と使用に関する経験の共有 はじめに: 最新のフロントエンド開発では、テンプレート エンジン (TemplateEngine) が重要な役割を果たします。これらにより、開発者は大量の動的データをより効率的に整理および管理し、データをインターフェイスのプレゼンテーションから効果的に分離できるようになります。同時に、適切なテンプレート エンジンを選択すると、開発者により良い開発エクスペリエンスとパフォーマンスの最適化がもたらされます。しかし、数多くの JavaScript テンプレート エンジンの中で、どれを選択すればよいでしょうか?キャッチ

See all articles