首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

Smarty 模板條件判斷 {if}{else}{/if} 完整語法指南

     編輯:PHP 綜合知識

基本語法

{if $condition}
    條件成立時顯示
{elseif $other_condition}
    其他條件成立
{else}
    都不成立時顯示
{/if}

模板範例

test6.htm

<html>
<head><title>Smarty Test</title></head>
<body>
<table width="200" border="0">
{if $cond == 1}
    <tr><td>條件成立</td></tr>
{else}
    <tr><td>條件不成立</td></tr>
{/if}
</table>
</body>
</html>

PHP 指派

<?php
require 'libs/Smarty.class.php';
$smarty = new Smarty();
$smarty->assign("cond", 1); // 或 0
$smarty->display('test6.htm');
?>

運算子支援

類別運算子範例
比較==, !=, >, <, >=, <=, ===, !=={if $age >= 18}
邏輯and, or, not, &&, ||, !{if $a and $b}
包含in, not in{if $role in ['admin','editor']}
存在isset, empty{if isset($var)}
正則matches, not matches{if $email matches '/^.+@.+\..+$/'}
奇偶is even, is odd{if $i is even}
可除is divisible by{if $count is divisible by 3}

進階範例

多條件分支

{if $score >= 90}
    <span class="excellent">優秀</span>
{elseif $score >= 80}
    <span class="good">良好</span>
{elseif $score >= 60}
    <span class="pass">及格</span>
{else}
    <span class="fail">不及格</span>
{/if}

陣列判斷

{if $user.roles in ['admin', 'superadmin']}
    <a href="/admin">管理後台</a>
{/if}

{if $items|@count > 0}
    {foreach $items as $item}
        <li>{$item.name}</li>
    {/foreach}
{else}
    <p>暫無資料</p>
{/if}

變數修飾符搭配

{if $name|strlen > 20}
    {$name|truncate:20:"..."}
{else}
    {$name}
{/if}

編譯後 PHP 代碼 (除錯參考)

// Smarty 內部編譯邏輯大致相當於:
if ($this->_tpl_vars['cond'] == 1) {
    echo '條件成立';
} else {
    echo '條件不成立';
}

常見錯誤

{* ❌ 錯誤:少結束標籤 *}
{if $cond} 內容

{* ❌ 錯誤:else 位置錯誤 *}
{if $cond} 內容 {else} 內容 {/if} {else} 多餘

{* ✅ 正確:巢狀 if *}
{if $a}
    {if $b} 內容 {/if}
{/if}

{* ✅ 正確:複雜邏輯用括號 *}
{if ($a > 10) and ($b < 5) or ($c == 'test')}
    內容
{/if}

最佳實踐

  • 邏輯儘量在 PHP 處理完成,模板只做簡單判斷
  • 複雜條件預先計算布林變數 $showAdmin = $user->isAdmin()
  • 避免在模板中進行資料庫查詢或複雜運算
  • 使用 {capture} 暫存複雜判斷結果

Smarty 條件判斷語法直觀強大,支援豐富運算子,善用可大幅簡化模板邏輯。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved