新しいPHPixieテンプレートのスナック

画像

PHPixieの別のライブラリが今日利用可能になりました 。今回はテンプレートエンジンです。 前バージョンと同様に、PHP自体が言語として使用されますが、テンプレート継承へのブロックアプローチを含む新しい機能が追加されました。 これについては後で説明し、今度は最も美味しいもの、つまり任意の形式のコンパイルについて説明します。 PHPixieテンプレートを使用すると、ほぼすべての形式を使用でき、PHPに変換するコンパイラと、ファイルのアップロード、キャッシュなどを提供するだけです。 あなたのために行われます。 また、これは、1つのプロジェクトで複数の形式を同時に使用できることを意味します。



それでは、テンプレートHAMLで友達を作りましょう。 これを行うには、 mthaml / mthamlパッケージを使用します





//composer.json { "require": { "phpixie/template": "3.*@dev", "phpixie/slice": "3.*@dev", "mthaml/mthaml": "1.7.0" } }
      
      







最も単純なラッパーを作成します。



 <?php class HamlFormat implements \PHPixie\Template\Formats\Format { protected $mtHaml; public function __construct() { $this->mtHaml = new \MtHaml\Environment('php'); } //      public function handledExtensions() { return array('haml'); } //  public function compile($file) { $contents = file_get_contents($file); return $this->mtHaml->compileString($contents, $file); } }
      
      







コンストラクタを介してテンプレート自体に新しい形式を転送するだけです。



 //       //   ,     $slice = new \PHPixie\Slice(); $config = $slice->arrayData(array( 'resolver' => array( 'locator' => array( //   'directory' => __DIR__.'/templates/', 'defaultExtension' => 'haml', ) ), 'compiler' => array( //    'cacheDirectory' => > __DIR__.'/cache/', ) )); $template = new \PHPixie\Template($slice, $config, array(), array( new HamlCompiler() ));
      
      







これで、すべてのhamlテンプレートが自動的にコンパイルおよびキャッシュされます。 したがって、継承や拡張など、ライブラリの他のすべての機能を保持しながら、任意の言語を発明または適応できます。



継承

前のバージョンでは、1つのテンプレートを別のテンプレートに接続する唯一の方法はを含めることでした。 つまり、途中で必要なテンプレートを接続することで、ページのレンダリングを上から下に移動する必要がありました。 このアプローチの欠点は、接続されたテンプレートが親の何も変更できないことです。 今、私たちが利用できるものを見てみましょう:



 // layout.php <html> <title> <?php $this->block('title'); ?> </title> <body> <?php $this->childContent(); ?> </body> </html>
      
      







 // fairy.php <?php $this->layout('layout'); ?> <?php $this->startBlock('title'); ?> Fairy page <?php $this->endBlock(); ?> <h2>Hello <?php $_($name); ?></h2>
      
      







fairy.phpテンプレートは、親テンプレートのブロックをオーバーライドする機能でlayout.phpを拡張します。 Twigを使用する人は、このアプローチに非常に精通しています。 インクルードを使用することを好む人のために、これはまだ可能です:

 include $this->resolve('fairy');
      
      







パターン検索

多くの場合、テンプレートエンジンにはテンプレート検索メカニズムがあり、テンプレートが必要な場合はテンプレートが見つかりませんが、代わりに別のテンプレートが使用されます。 多くの場合、これは古いトピックに基づいて新しいトピックを作成するときに必要です。 PHPixieテンプレートでは、1つのアプローチだけでなく、3つのロケーターの組み合わせを使用して検索をカスタマイズできます。







この設定を見てください:

 <?php $config = $slice->arrayData([ 'resolver' => [ 'locator' => [ 'type' => 'prefix', 'locators' => [ 'Site' => [ 'directory' => __DIR__.'/site/', ], 'Theme' => [ 'type' => 'group', 'locators' => [ [ 'directory' => __DIR__.'/templates/', ], [ 'directory' => __DIR__.'/fallback/', ], ] ] ] ] ] ]);
      
      







したがって、 Site ::レイアウトテンプレートはsite /フォルダーで、 Theme :: homeテンプレート/およびフォールバック/フォルダーで検索されます。



拡張機能

拡張機能は、テンプレートに追加の機能を追加するクラスです。 例として、文字列の出力とエスケープに使用されるHTML拡張機能を見てみましょう。



 class HTML implements \PHPixie\Template\Extensions\Extension { public function name() { return 'html'; } //  \      public function methods() { return array('escape', 'output'); } //         //      $_($name)  $this->output($name) public function aliases() { return array( '_' => 'output' ); } //  public function escape($string) { return htmlspecialchars($string, ENT_QUOTES, 'UTF-8'); } public function output($string) { echo $this->escape($string); } }
      
      







このような拡張機能は、形式と同様に、コンストラクターを介して渡すことができます。



デモ

DIYテンプレートを自分で試すには:

 git clone https://github.com/phpixie/template cd template/examples #      curl -sS https://getcomposer.org/installer | php php composer.phar install php quickstart.php
      
      







ところで、PHPixieの他のすべてのライブラリと同様に、テストで100%のコードカバレッジが得られ、5.3より古いバージョンのPHP(新しい7とHHVMを含む)で動作します。



All Articles