2009-09-14 12 views
9

私はCMSを書くつもりですが、今はすべてのアイデアを書き留めています。テンプレート言語を使用してウェブサイトのページを解析し、テンプレートタグをコンテンツアイテムに置き換えるか、まっすぐなPHPでサイトを開発し、CMSが役立つデータ構造を生成させるかどうかは、たとえば:テンプレート言語とストレートPHP

{navigation: products} 

foreach($cms_label['products'] as $product) { 

    echo '<li class="product_nav">'. 
     '<a href="products/{$product.id}">{$product.name}</a>'. 
     "</li>\n"; 

} 

前者はきれいですが、それは言語を発明し、加えて表示する前にすべてのページを解析する伴うだろう。後者はあまりクリーンではありませんが、CMSがすべてのコードのデータを提供しただけでもうまくいくと思います。しかし、これは論理とプレゼンテーションを混在させると考えられますか?テンプレートタグに似たPHP関数を使用しています。

<?php navigation('products'); ?> 

あなたの考えはなんですか?

私は、特定の場所にページを含める、または順序付けられていないリストを書き込むより複雑なことを行う必要はありません。残りの部分はCSSによって処理されます。

+1

これまでに何度も尋ねられてきました。 – MitMaro

+0

Dup:http://stackoverflow.com/questions/731743/php-vs-template-engine http://stackoverflow.com/questions/436014/why-should-i-use-templating-system-in-php http://stackoverflow.com/questions/62605/php-as-a-template-language-or-some-other-php-templating-script – MitMaro

答えて

13

PHPのテンプレート言語は、「Inner-Platform Effect」というパターンの例です。 SmartyはPHP用のテンプレートフレームワークの一例ですが、Smartyの本を執筆したHasin Hayderも、Smarty is deadと言っています。もう使用する必要はありません。

テンプレート言語を開発するには、たとえばCMS以外のデザイナーやコンテンツエディタを使用していて、PHPの複雑さを圧倒したくない場合など、十分な理由が考えられます。あなたのウェブサイトを破壊する可能性のあるコードを書いてください)。

あなたはそれを目標として説明していないので、PHPをページテンプレート言語として使用することをお勧めします。独自の新しい言語を開発する必要がなく、特定の種類の動的コンテンツが必要な稀なケースに柔軟性を提供しますので、作業量は少なくなります。

HTML出力のブロックをカプセル化するPHP関数を記述しないでください。代わりに、include()を使用してHTMLの断片を取り込みます。このテクニックは時々「部分」と呼ばれます。

symfony、Kohana、Solar、CodeIgniter、Zend FrameworkなどのMVCフレームワークを使用して、残りのアプリケーションコードとPHPテンプレートコードの分離を徹底することができます。

+0

私はそれをcodeigniter上に構築しています。また、HTMLの一部をPHPで指定する必要がある場合はどうしますか?リストを出力するためには(私の例のように)インクルードを使うことは不要であると思いました。 「some-specific-navigation.html」を書き出してそれを含める必要はありません。ページに関しては、それらは即座に生成されません。 –

+1

私は、すべてのHTMLをテンプレートファイルに保存していますが、PHP関数(例: 'navigation()のように記述します)はテンプレートにデータを提供するためだけです。また、テンプレート内にHTMLタグをエコーすることもありません。リテラルなHTMLタグが必要なときは ''ブロックから脱落してください。 –

+0

私はちょうど '{$product.name}'と書いたほうが「」 –

2

Smarty- http://smarty.php.net Smartyは非常に強力なテンプレートエンジンで、両方の世界を最大限に活用できます。カスタムモジュールとプラグインを幅広くサポートしています。

私はSmartyとPHPでカスタムCMSを構築しましたが、それについて言いたいことは何もありません。私は長い時間のために非常に満足してSmartyのユーザーだったこの

<h1>{$pagetitle}</h1> 

{insert tag="navigation"} 
+0

私はSmartyよりDwoo [dwoo.org]をお勧めします。スマイの機能の大部分は、膨らみなしで持っています。 – MitMaro

+0

+1私はSmartyをいくつかのプロジェクトに使用していましたが、それはもう少し前です。チェックアウトするために他にもエンジンがあるかもしれません(Dwoo、MitMaroのように)。私の経験では、テンプレート言語の重要な懸案事項は、ビジネスロジックをそれらに浸透させないようにすることです。これは通常、表示したい情報だけがテンプレートに提供され、テンプレートコードに書式設定と表示構造を残しておくことを保証する少し余分な作業を意味します。 – yukondude

7

のようなものが

PHPコードはSmartyのは、この

<?php 
// my cms 

$smarty = new Smarty(); 
. 
. 
$smarty->display('home.tpl'); 

?> 

テンプレートコードのように見える使用することです、私はしないでください専門のテンプレート言語をこれ以上信じてはいけません。

テンプレート言語は、プレゼンテーションコードに不適切なロジックを付けることを妨げません。テンプレート言語で不正なコードを書き込むだけです。

テンプレートでPHPを使用する独自の小さなテンプレートシステムをロールするのはかなり簡単です。次に、さまざまなヘルパーを作成してテンプレートコードをきれいにします( "navigation()"関数のように)。

私はZend_Viewのアプローチがかなり良いと思います。 Symfonyのビューレイヤーのものはかなりきちんとしていますが、少し威圧的かもしれません。そこから何かを得るためにフレームワークを使う必要はありません。例のテンプレートコードの一部を見て、あなたを刺激するものを見てください。

ボトムライン:テンプレート用の特別な言語は忘れてしまいます。ビュー・スクリプトに複雑さを取り入れ、再利用可能なヘルパーに複雑性を考慮して、ビュー・コードに優れたデザイン感覚を適用するだけです。

7

ホイールを再活性化することは、ほとんどの場合、悪い考えです。

PHPはすでにテンプレート言語です。自分で実装する必要はありません。

Smartyに関しては、phpのための最も完全なテンプレートシステムであり、それでもやはり悪い考えです。

テーマに関する記事のカップル:Hasin Hayderによって

  • Once upon a time there was Smarty!。彼は実際にスマートに本を書いたし、彼はそれをお勧めしていない。

    • phpSavantそれは使用しています:あなたがでより良い表情を行ってテンプレートを見たい場合はハリー・Fuecks(PHPのアンソロジーの第1版の作者)

    によって

  • Php and Templates phpコードを作成し、依然として懸念の分離を促進します。

最終的な目的は、誰もが、テンプレート言語の最も重要な用途の一つは何か言及した理由は、私は疑問に思うビジネスロジックとプレゼンテーションの分離

1

を促進することにより、維持するために、簡単にコードを持つことはもちろんです。自動出力エスケープ。

それはとても{$名}のようなディレクティブを提供テンプレート言語は、適切な文字セットとすべてのもので、$名ははhtmlspecialcharsを通過自動的であることを確認する必要があり、はhtmlspecialchars()ここまたはそこを忘れることは簡単です。

もちろん、これはまた、例えば、変数出力などのための異なる「コンテキスト」を指定できることを意味します。アラート( 'Hi {$ name | context = singlequotes}!');テンプレートインタプリタは$ nameの内容をエスケープして、エスケープするXML(デフォルトでなければならない)の代わりにシングルクォートから抜け出すことは不可能です。

このような状況はまた、INT(番号を強制的に)のようなものを含むことができ、そしてまた、出力を、他等

私の2セントフォーマットするために追加のパラメータを受け入れるように拡張することができます。これを可能にするオープンソースのソリューションがあるかどうかはわかりません(これについて聞くことに興味があります!)、私は職場でこのようなもののために自分の通訳を転がしました。結果として得られる「中間コード」は純粋なPHPであるため、「Smartyや他のtplシステムのように」キャッシュすることも非常に簡単です。

+0

これは私が以前考えなかった良い点です。しかし、これはテンプレートタグの代わりにPHP関数と同じように簡単に行うことができませんでしたか? –

+0

はい、要点は、htmlspecialchars()を呼び出すか、

  • 11. 多言語PHPサイト
  • 12. PHP言語(ユニット)テスト
  • 13. Djangoテンプレート、テンプレート変数を使ってテンプレート言語を渡す
  • 14. C#とPHPの多言語ファイル管理
  • 15. Ajaxとphpで言語を選択
  • 16. SagePayテンプレートにない多言語 - テキスト
  • 17. よりよいテンプレート言語が必要
  • 18. ビジネスユーザー用のJava用テンプレート言語
  • 19. 最速のJava Webテンプレート言語
  • 20. Djangoテンプレート言語の任意のルーピング
  • 21. Tracの電子メール通知テンプレート言語
  • 22. ストレート
  • 23. 私はスクリプト言語を使用することはできません環境には、ストレートのhtmlとファイル
  • 24. 言語ファイル内のPHP? Codegintier
  • 25. PHPでの言語翻訳
  • 26. 多言語PHPスクリプト質問
  • 27. 多言語用PHP preg_match
  • 28. PHP - 初心者言語
  • 29. データベース言語からPHPへ
  • 30. 高レベル言語と低レベル言語?