PHPのテンプレートシステムを統合するのに最適/最も簡単なものは何ですか?それを使用する利点は何ですか?
私は現在まったく使用していませんが、プレゼンテーションからコンテンツをもう少し分離するのに役立つかもしれないと考えています.
PHP は、それ自体が非常に優れたテンプレート言語です。ほとんどの主要な PHP フレームワークは、この理由から、個別のテンプレート言語を使用していません。
(似たような) MVC を使用していることを確認し、ビュー ファイル内でデータ アクセスやビジネス ロジックを実行しないでください。
私も Smarty を広範囲に使用してきましたが、通常の PHP に比べてほとんど利点がありません。デザイナーにとっては少し良いように見えるかもしれませんが、欠点は、テンプレートの実装者であるあなたにとっての柔軟性です。三重にネストされた配列をループするようなことは、単純な PHP よりも難しくなります。
高速で、使いやすく、インストールも簡単です (共有ホスティング環境でも)。また、検証用 XHTML を使用する必要がないこともありますが、これは便利な場合があります (ただし、有効な XHTML を必要とするテンプレート エンジンの方がおそらく高速であると思います)。
コンテンツを 1 つの場所に配置し、別の場所でコードを作成するのは非常に便利です。
さらに、HTML だけに限定されません。私は Smarty を使用してXMLとSQLを生成しました。
PHPTALに賭けます。
ファイルの構文をチェックし、出力が適切なエスケープを備えた整形式のXMLであることを確認します。これにより、プログラマーが毎回心配することなく、ページがXSS攻撃に対して安全になります。
SmartyおよびrawPHPは、エスケープを自動的に処理しません。つまり、すべてのecho $foo
or ${foo}
(|escape}
またhtmlspecialchars()
はなし)がHTMLインジェクションの脆弱性であるか、少なくとも整形式性を損なう可能性があります。
PHPTALには、HTML / XMLの動作に適合する優れた構文があります。たとえば、タグで何かを条件付きでラップする場合は、繰り返す必要はありません。
<strong tal:omit-tag="condition">
xxx
</strong>
それよりも:
{if condition}<strong>{/if}
xxx
{if condition-again!}</strong>{/if}
また、構文は過度に冗長ではなくXMLです(ほとんどの場合、属性のみが追加されます)。HTMLとカスタムタグのような構造の醜い組み合わせはありません。
Alex の発言をフォローアップするには、Rasmus Lerdorf の記事The no-framework PHP MVC framework を参照することをお勧めします。
Rasmus Lerdorf は PHP を作成した人物です。
おそらく、テンプレート エンジンを使用する最も説得力のある理由は、xss の脆弱性を軽減または排除できるデフォルトの出力エスケープです。
Mark の経験に加えて、私は Smarty が拡張に適していることを発見しました。簡単で柔軟な Smarty に基づいたビルトイン ビューを備えた (企業向けの) MVC フレームワークを構築しました。利用可能なテンプレート ヘルパー関数のホストも非常に簡単に拡張できます。
それはあなたの焦点に依存します: 異なるテンプレート エンジンは、異なるものに適しています。Smartyは、一部のものに比べて比較的重く、PHP よりも単純ですがより制限された構文を定義します。たとえば、グラフィック デザイナーにテンプレートの作成を依頼する場合など、プログラミング言語に似ていない構文を使用することには利点があります。
Savant3などのテンプレート エンジン、またはZend FrameworkのZend_Viewコンポーネントで使用されるテンプレート エンジンは軽量であり、構文として PHP を使用します。これにより、テンプレートの機能と柔軟性が向上しますが、ビジネス ロジックをテンプレートから除外することについては規律を守る必要があります。また、デザイナーがテンプレートを作成する場合、PHP 構文はデザイナーにとって複雑すぎる可能性があります。
個人的には、個別の PHP/HTML ファイルを使用するというアイデアが気に入っています。必要に応じて他の HTML エディター (DreamWeaver など) を使用できます。また、PHP は知らないが HTML は知っている人でも、別の言語を学ばなくてもテンプレートを編集できるようになります。
私は何年も Smarty を使用してきましたが、いくつかの単純な php の方がはるかに簡単な、特別な smarty 構文が邪魔になってイライラしました。PHP 自体は、その中核をなすテンプレート言語です。私は、php API がすべてのプレゼンテーション ロジックに十分に適していることを学びました。
したがって、Savant3 とその子孫である Zend_View は優れたソリューションです。Smarty と同様に、反復タスク用のプラグインを簡単に作成できます。