2011-01-22 11 views
3

私はphpコードでいくつかのテンプレートエンジンを使用するかどうかを決定しています。 今、私はスマイをよく見ます。純粋なPHPを使用する場合、SmartyがPHPで使用したり、より優れたものを提供してくれますか?

正直言って、そのメリットは私には明らかではありません。

私の印象は、当初からあまり良くありません。 私はデモアプリケーションを試しました:http://www.smarty.net/sampleapp1。そして当初から私は注意書きを得ました。私はフォームに値を渡すことでこれを修正しました。これを推測しながら 私はそれがコードのデバッグ複雑にすることを理解

// adding a guestbook entry 
$guestbook->displayForm(); 

から

// adding a guestbook entry 
$guestbook->displayForm(array('Name' => '', 'Comment' => '')); 

にコードを変更します。 これはまた、もう一つの言語を学ぶこともできます。それは簡単ですが、必要がなければ新しいものを学ぶのは簡単ではありません。 代わりに、PHP自体を使用することです。

構文の比較http://www.smarty.net/syntax_comparisonは私にとって最も面白いです:記号の数を計算します....しかし、私はPHPに精通しています。これは簡単に書くことができ、Smartyは私には新しいものです。そして、私はWebデザイナーにとっては、単純なPHP構造を学ぶのがとても難しいとは思っていません。そしてSmartyはこの点でもっと簡単です。私が間違っている場合は、ここでウェブデザイナーの声を聞くのが良いでしょう。

Smartyはコードを解析しますが、実際これは時間のオーバーヘッドです。

しかし同時に、多くの人がそれを使用しています。それで、私はこれの理由を理解したいのですが? 利点はどこですか?何か不足していますか?

Smartyの良い選択肢が分かっていれば、知っておいた方が良いでしょう。 ありがとう!

UPDATE:How to use Smarty better with PHP?

私はまた、被験者に質問を発見しました。一般的には、Smartyを使用しないこともあります。しかし、これは1.5歳です。おそらく何か変わったでしょうか?

答えて

4

私はそれがオーバーヘッドの原因であることに同意する、私はSmartyを使用したプロジェクトで働いていた、それは悪夢だった。あなたが得ることができる2つの利点は、

です。PHPに精通していないデザイナーは、コーディングスキルを必要とせずにHTMLを使いこなすことができます。しかし、それは最終的にSmartyを最初に勉強する必要があるという意味ではありませんか?私は本当に何のポイントも見ません。

2:テンプレート分離のために、Smartyを使用するのと同じ方法で、PHP代替構文を使用することができます。その巨大プログラミング言語の能力を失うことはありません。代替構文の例:

<div>Product list</div> 
<?php foreach($products as $product): ?> 

<div>Product: <?php echo $product->name; ?> </div> 
<div>Price: <?php echo $product->price; ?> </div> 
<?php if($product->discountPercentage): ?> 
<div> 
Discount: <?php echo $product->price * $product->discountPercentage/100; ?> off! </div> 
<?php endif; ?> 

<?php endforeach; ?> 
+1

あなたの意見で私は完全に同意します。しかし、Smartyを使った実際のプロジェクトでの経験があるため、あなたのポイントは非常に価値があります。ありがとう!そして、私は、代替構文に関してまったく同じようにしています。また、<?phpを<?それをより簡単にするために – sergtk

+0

ええ、正しい。これによりさらに簡単になります。 – rahmanisback

+0

私は全く同意します!テンプレートエンジンにはポインタはまったくありません。それらを使用して、Webデザイナーが新しい言語の学習を避けることができるようにします。しかし、彼らは最初にスマートを研究しなければならない。また、テンプレートエンジンを使用すると、サイトが非常に重くなり、キャッシュが必要になります。 – Shoe

2

私はそれを実稼働環境で使用しています。私はそれほど多くはありません。

あなたのコードの見た目(ない重要でない懸念)に関係している場合は、Smartyのは、物事は少しクリーナー見えるようにすることができます:

<?php echo $some_var; ?> 

対を:

{$some_var} 

これにより、テンプレートファイルをより読みやすくすることができます。

コントローラとビューロジックをより厳密に分離します。

文法はまっすぐなので(それ以降のバージョンではそうです)、それほど大きな問題ではありません。

は、それはあなたのコントロールとビューの間魔法の分離層である場合にのみので、デバッグを複雑にすることができますが、完璧な世界であなたは.....別途とにかく

欠点をそれぞれを検証することでしょうか?

- いくつかの以前のSmartyのバージョンはシンプルされているはずのループや他のもののためにいくつかのばかげた構文を持っていたなど、-Obviously

あなたが今に対処するための全体の他のライブラリを持っている含まれます:私は、カップルがあると思います。

あなたはこのように、テンプレートのどこかに簡単なJavaScriptのステートメントを配置する必要があり-When:

<script type='text/javascript'> 
    $(document).ready(function(){ 
     //foo 
    }); 
</script> 

[OK]を、あなたの代わりに、インラインのJSファイルにそれを含めるかもしれませんが、例ところがたくさんありますあなたはちょうどjsの行のそれらのカップルが必要です。 Smartyのは、中括弧を好きではない、あなたはこのようになります醜いタグでそれらをラップする必要があります。その場合の

{literal}{\literal} 

任意のクリーナーあなたのコードを作るために多く....

場合私は選択しなければならなかった、おそらくちょうど非標準の短い形式のタグを使用し、それで済むだろう。

+1

答えをありがとう。あなたの投稿はテンプレートエンジンを使わないようもっと納得させるものです:) Procは "SMARTYは純粋なPHPではない"のように見えますが、もっと良いものが必要です:)そしてちょっとしたメモ:<?php echo $ some_var; ?> = some_var?>と書き直すことができます。 – sergtk

+2

smartyは、あなたが{$ some_var}を書くことしか許さないのであれば、<?= $ some_var?>は無意味です。皆さんは、Webデザイナーが皆あなたが考えるように愚かではないことをよく理解しています。ウェブデザイナーに教えることは、「エコー」は「出力」を意味することはそれほど難しくありません。 Webデザイナーに試してみてください。 – Shoe

0

Smartyを広く使用しています。

私はそれを言うには、用語で DIS-有利である:

1. Parsing of smarty templates to PHP which make things slow 
2. Your learning ablity to cope-up with smarty syntax. 

それは意味で有利である:表現的ロジックからビジネスロジックの

  1. 分離。
  2. 表示ヘルパーが必要な場合は、DRYの原則に役立ちます。 (erb - RORのヘルパーのように)

あなたの製品が大規模で進行中の製品になることがない限り、PHPで可能な場合は、Smartyを使用しないでください。

+0

利点#1:PHP自体で簡単に行うことができます。 – Shoe

0

Smartyは私の最新のプロジェクトに試してみたいと思っていました。私はドキュメンテーションに深く掘り下げず、ちょっと単純なサイトで使用するための実用的な知識を得ただけです。ここに私の感想は、私が働いているので、遠

良い

ほとんどのサイトであると、本プロジェクトでは、ページからページにかなり類似した構造(テンプレート)に従う、含まれています。以前は、ファイル構造のどこかに更新された空白のテンプレートを保存して、HTMLまたはPHPを追加するためのケースバイケースでした。 Smartyの素晴らしい点の1つは、この一般的なテンプレートをSmartyテンプレートディレクトリに保存して、プレゼンテーションページのテンプレートの{extends}関数を使用して入力できることです。むしろ、そう

{extends file="myTemplate.tpl"} 
{block name=packageTitle}Simple Template{/block} 
{block name=meta_description}This is a simple Smarty Template test{/block} 
{block name=additionalHeaders} 
    <link rel="stylesheet" type="text/css" href="/css/smarty_test.css"/> 
{/block} 

{block name=pageText1} 
    <p>Hello, {$name}! This is a Smarty Test.</p> 
{/block} 
{block name=pageText2} 
<p>This is some more text....</p> 
{/block} 

`

<head> 
    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" /> 
    <meta http-equiv="Description" content="{block name=meta_description}{/block}" /> 
    <title>My Smarty Site - {block name=pageTitle}{/block}</title> 
    {block name=additionalHeaders}{/block} 
</head> 
    <body> 
     <div id="headerDIV"> 
      <div id="nav-box"> 
       <!-- Nav would go here --> 
      </div> 
     </div><!-- end #headerDIV --> 
     <div id="mainContainer"> 
      <div id="generalContent"> 
        <div id="pageTitle"> 
         {block name=pageTitle}{/block} 
        </div> 
       {block name=pageText1}{/block} 
       <div id="page-bottom"> 
        {block name=pageText2}{/block} 
       </div> 
      </div> <!-- end #generalContent --> 
     </div> <!-- end #mainContainer --> 
    </body> 

` 、その後、そのように取り込ま - 例えば、これは、保存したテンプレート(行方不明のdoctype、SO私に頭痛を与えて)だろう同様のページごとにテンプレートを何度も何度もコピーするよりも、Smartyを使ってそのページのコンテンツを拡張するだけです。そのもう一つの利点は、そのテンプレートのいくつかの側面を変更する必要がある場合です。複数のページを変更するのではなく、私はちょうど1つを変更します(はい、多くのPHPを使用するのと同じです)。

悪い

私はSmartyのは、組み込み関数をたくさん持っているし、本当にあなたがその構文を学習する必要があり、それを最大限に活用するために、いくつかのクールなものを行うことができますことを知っていますが。 PHPをすでに知っていれば、同じ最終結果を達成するために全く新しいことを学んでいます。ロジックとデザインの分離は、動的なページをたくさん作成する必要があるまでは素晴らしいです。そしてSmarty構文を使って多くの条件文やループなどをテンプレートに追加すると、 PHPを使用します。

Smartyについてもう少し詳しく学んでいきたいと思います。なぜなら、これは私が出会った多くのアプリで使用されており、仕事の要件としてリストされているからです。私自身のプロジェクト。

関連する問題