phalconのview(voltエンジン) vol3


前回、phalconのview(voltエンジン) vol2に引き続き、phalconのvoltエンジンに触れていきます。

Viewの統合

Viewの統合(他のviewの読み込み)には、partialを利用するものとincludeを利用するものがあります。一番の違いは、partialは実行時に毎回読み込まれます。includeはコンパイル時に読み込まれ、キャッシュファイルに展開されるので、読み込まれるファイルを頻繁に更新する場合はpartialがオススメです。また、partialはvolt以外で書かれたテンプレートも読み込めるが、includeはvoltテンプレートのみとなります。

partial
//partials/footer.volt
<p>footer partials</p>

//volt
<footer>
	{{ partial("partials/footer") }}
</footer>

//コンパイルされたphp
<footer>
	<?php echo $this->partial('partials/footer'); ?>
</footer>

//出力されるhtml
<footer>
	<p>footer partials</p>
</footer>
include
//partials/footer2.volt
<p>footer include</p>

//volt
<footer>
	{% include "partials/footer2.volt" %}
</footer>

//コンパイルされたphp
<footer>
	<p>footer include</p>
</footer>
//キャッシュファイルの段階で読み込まれ展開されています。

//出力されるhtml
<footer>
	<p>footer include</p>
</footer>
テンプレートに引数渡して利用
//partials/footer.volt
<p>footer partials<span>{{ footertext }}</span></p>

//volt
<footer>
	{{ partial("partials/footer", ['footertext': "テキスト変数"]) }}
</footer>

//コンパイルされたphp
<footer>
	<?php echo $this->partial('partials/footer', array('footertext' => 'テキスト変数')); ?>
</footer>

//出力されるhtml
<footer>
	<p>footer partials<span>テキスト変数</span></p>
</footer>

Viewの継承

テンプレートのインターフェイスを作成し、そのファイルを拡張することで再利用性を高めることができます。

extends
//volt
//base.volt テンプレートインターフェイス
<div>
	<h2>{% block h2_tag %}{% endblock %}</h2>
	<div>
		{% block content %}{% endblock %}
	</div>
</div>
//上記のようにblockタグを利用しbaseテンプレートを作成します。

//子volt
{% extends "index/base.volt" %}
{% block h2_tag %}タイトル{% endblock %}
{% block content %}テキストテキストテキストテキスト{% endblock %}
//actionは違うがレイアウトを同じにしたい場合に有用です。

//コンパイルされたphp
<div>
	<h2>タイトル</h2>
	<div>
		テキストテキストテキストテキスト
	</div>
</div>

//出力されるhtml
<div>
	<h2>タイトル</h2>
	<div>
		テキストテキストテキストテキスト
	</div>
</div>

オリジナルのビルド関数やフィルターを追加する

ビルド関数
$di->set('volt', function($view,$di){
	$volt = new VoltEngine($view,$di);
	$volt->setOptions(array("compiledPath"=>APP_PATH."cache/volt/"));
	$compiler = $volt->getCompiler();
	return $volt;
},true);

内に記述します。

php関数をそのまま利用し、voltの関数として利用する場合は

$compiler->addFunction('shuffle', 'str_shuffle');

とします。

独自処理を追加する場合は

$compiler->addFunction(
    'contains_text',
    function ($resolvedArgs, $exprArgs) {
        if (function_exists('mb_stripos')) {
            return 'mb_stripos(' . $resolvedArgs . ')';
        } else {
            return 'stripos(' . $resolvedArgs . ')';
        }
    }
);
フィルター
$di->set('volt', function($view,$di){
	$volt = new VoltEngine($view,$di);
	$volt->setOptions(array("compiledPath"=>APP_PATH."cache/volt/"));
	$compiler = $volt->getCompiler();
	return $volt;
},true);

内に記述します。

php関数をそのまま利用し、フィルターとして利用する場合は

$compiler->addFilter('hash', 'md5');

とします。

独自処理を追加する場合は

$compiler->addFilter(
    'int',
    function ($resolvedArgs, $exprArgs) {
        return 'intval(' . $resolvedArgs . ')';
    }
);

投稿日: 2016年2月11日
カテゴリー: phalcon|php | 投稿者: