2011-01-22 83 views
3

我決定是否在php代碼中使用某些模板引擎。 現在我仔細看看Smarty。當使用PHP或更好地使用純PHP時,Smarty給了哪些好處?

說實話,我不清楚它的好處。

我的印象從一開始就不是很好。 我試圖通過演示應用程序: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的項目中工作,這是一場噩夢。你可以得到的兩個好處是:

1:不熟悉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

我完全同意!模板引擎根本沒有指針。你用它們來讓網頁設計師能夠避免學習一種新的語言。然而,他們必須先學習聰明。同樣使用模板引擎會讓你的網站太沉重,你需要緩存! – Shoe

2

我在生產環境中使用它,我會說:不是很多。

如果你關心你的代碼的樣子(並非不重要的關注),Smarty的可以讓事情看起來有點清潔:

<?php echo $some_var; ?> 

與:

{$some_var} 

這可以使您的模板文件更具可讀性。

它還強制控制器和視圖邏輯之間的更嚴格的分離。 (因爲您必須確保將所有相關變量傳遞給smarty對象)

語法足夠簡單(對於更高版本更是如此),所以這不是什麼大問題。

它可以調試複雜,如果僅僅是因爲它是你的控制和視圖之間神奇的分離層,但在一個完美的世界裏,你將被驗證每個單獨反正.....

缺點?我想,有一對夫婦:

-Obviously你現在有一個整體的其他庫來處理,包括等

- 一些以前的Smarty版本有for循環和其他的東西有些可笑的語法,應該是簡單。

- 當你需要把一個簡單的JavaScript語句的地方在您的模板,像這樣:

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

OK,你可能包括在一個js文件,而不是內聯,但有很多情況下的你只需要那些幾行js。智者不喜歡大括號,你必須將它們包裝在一個醜陋的標籤,看起來像這樣:

{literal}{\literal} 
在這種情況下,這麼多,讓你的代碼的任何清潔劑

....

如果我不得不選擇,我可能只會使用非標準的短格式標籤並完成它。

+1

感謝您的回答。你的文章讓我更加確信不要使用任何模板引擎:) Proc看起來像「SMARTY並不比純PHP更糟」,但我需要更好的東西:)而只是小小的註釋:<?php echo $ some_var; ?>可以重寫爲<?= $ some_var?>。 – sergtk

+2

如果smarty只允許你寫{$ some_var},而不是<?= $ some_var?>是非常沒有意義的。你們更瞭解網頁設計師並不像你們所想的那麼愚蠢。教給網頁設計師「回聲」意味着「輸出」並不難。給網頁設計師一個嘗試... – 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的一個好處是,您可以將此通用模板存儲在Smarty模板目錄中,並使用演示文稿頁面模板中的{extends}函數來填充它。例如,這將是保存的模板(缺少DOCTYPE,SO讓我頭疼) -

`

<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> 

` 然後填充像這樣:

{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} 

因此,而比對每個類似頁面一遍又一遍地複製我的模板,我只需使用Smarty將其擴展到特定頁面的內容即可。另一個好處是當我需要改變該模板的某個方面時;而不是改變多個頁面,我改變了那一個(是的,類似於使用大量的PHP包括)。

雖然我知道Smarty的有很多內置的功能,可以做一些很酷的事情,要真正獲得最大的它,你必須要學會它的語法。而且,如果您已經知道PHP,那麼您正在學習一些全新的東西來實現相同的最終結果。邏輯和設計的分離是很好的,直到你需要製作非常動態的頁面,然後你會發現你用Smarty語法向模板添加了很多條件語句,循環等,你意識到你可能只是使用PHP。

我的計劃是學習更多關於Smarty的知識,僅僅因爲它用在我遇到的很多應用程序中,並且已被列爲工作要求,但我未看到自己將來會使用它我自己的項目。

相關問題