2010-11-08 64 views
0
<if a == 5 && b < 4> 
    one 
<else> 
    <if a != 5> 
     two 
    <else> 
     <if a == 5 || $b == 5> 
      three 
     </if> 
    </if> 
</if> 

如何我可以從它得到一些變量:PHP模板條件

[0] = "a == 5 && b < 4" 
[1] = "one" 
[2] = "a != 5" 
[3] = "two" 
[4] = "a == 5 || $b == 5" 
[5] = "three" 

還是建議你將如何使模板中的條件是什麼?

回答

5

我一般都沒有反對模板系統,但爲什麼不使用普通的PHP呢?

<?php if ($a == 5 && ($b < 4)): ?> 
    one 
<?php elseif ($a != 5): ?> 
.... 

我沒有看到痛苦地重建PHP內部解析和評估邏輯的好處。

如果你真的需要這個,我會用Smarty。

+0

不要把言語放在Isis的口中,但在PHP中這樣做意味着它會使應用程序代碼容易受到愚蠢的語法錯誤和/或通過調用全局PHP函數來打破MVC模式。當然,在這種情況下,爲什麼不使用Smarty或其他模板引擎? – 2010-11-08 13:59:33

+0

@Victor是的,但看着這個所需的邏輯量...如果真的需要,我會用Smarty(更新:正如你已經說過的) – 2010-11-08 14:00:31

2

只要您開始向您的模板語言引入流控制結構(如果,循環...),您就失去了簡單地通過對變量應用搜索和替換來應用模板的能力。您需要開始解析模板以提取依賴於條件的部分,並在需要發生時單獨重新插入它們。

你可能最終什麼事做的是應用初始解析步,輪流:

Template "main" : FOO <if a> BAR </if> QUX 

分爲:

Template "main" : FOO {temp-if-a} QUX 
Template "temp" : BAR 

然後,如果a是真的,你將適用模板temp和存儲將其轉換爲變量{temp-if-a},同時呈現模板main。如果a爲假,您將不會爲{temp-if-a}提供值。

其他控制流結構可以用這個提取 - 獨立應用 - 替換序列,包括嵌套的(只是讓您的模板應用程序算法遞歸地工作)。

+0

+1來解釋解析基礎知識 – 2010-11-08 14:01:27