2011-05-13 91 views
0

PHP中的某些內容,如果某個變量存在,我想顯示內容。在php中模板化,不使用模板引擎

例如,對於目前的評論我要檢查如果作者已經投票的這個答覆,所以代碼將東西如下所示:

<?php if (isset($replies)): ?> 
    <?php foreach ($replies as $reply): ?> 

     <?php if (isset($already_voted)): ?> 
      <?php foreach ($already_voted as $vote): ?> 

      // if vote['id'] == $reply['id'], echo what they have already voted 

      <?php endforeach; ?> 
     <?php endif; ?> 

    <?php endforeach; ?> 
<?php endif; ?> 

會是什麼做的更簡單的方法這個,不用像smarty那樣使用臃腫的模板引擎?

(請不要評論...是的'PHP本質上是一個模板引擎'或任何沿着這些線的東西)。

+4

PHP基本上是啊,你打我! – 2011-05-13 13:59:22

+3

你當前的設置有什麼問題?這正是我所推薦的。 – 2011-05-13 14:00:52

+0

當用戶登錄時顯示此消息,當他們第一次登錄時顯示此消息可能會引起混淆...... etc – 2011-05-13 14:02:21

回答

2

我會推薦使用模板引擎(我推薦PHPTAL),但您已經非常專門地詢問了一種不使用引擎的方法。你可以只是不是它打破了那麼多的簡化你有一點PHP代碼:

<?php 
if (isset($replies)) { 
    foreach ($replies as $reply) { 

     if (isset($already_voted)) { 
     foreach ($already_voted as $vote) { 

    // if vote['id'] == $reply['id'], echo what they have already voted 

     } 
     } 

    } 
} 

當然,這幾乎是同樣的事情,你有什麼,它只是使用更少的字符。通過縮進跟蹤開放代碼塊。

請注意,至少根據我的理解,模板的重點是重用。您希望能夠在儘可能多的頁面上使用相同的模板或至少部分模板(例如宏)。對於一些靜態內容,這可能並不總是可能,但這就是爲什麼關鍵詞儘可能爲。正如你應該使用任何代碼一樣,重複使用你能做的。

使用模板系統可以更輕鬆地將視圖與邏輯分開。你可以創建php模板(就像你已經完成的那樣),但是我認爲它缺乏清晰性,並且在模板中處理比在以前更容易。在沒有任何形式的系統的情況下創建可重複使用的模板也更加困難[引用需求]。你可以創建自己的作品,但已經有一些偉大的作品。

0

正如你指出的那樣,PHP本身就是一個模板引擎,你想要做的事情可以用簡單的if語句來完成。

或者,您可以創建一個函數來達到這個效果,例如WordPress模板標籤。