線上書籍

Home

PHP SMARTY 樣板引擎

在樣版裡,我們可以透過Smarty預先定義好的變數,以存取PHP中的全域變數(SuperGlobals)

Smarty 保留變數 等同的PHP變數
$smarty.get $_GET
$smarty.post $_POST
$smarty.request $_REQUEST
$smarty.session $_SESSION
$smarty.cookies $_COOKIE
$smarty.env $_ENV
$smarty.server $_SERVER
$smarty.const 利用define函式定義的常數
  1. 得到陣列的數量:<{$array|@count}>
  2. 刪除快取:    $smarty->clearAllCache();
  3. 循環取得變數(2.xx)
    <{foreach from=$teams item=team name=team_f}>   <{/foreach}>
    將foreach 命名為「team_f」
    <{$smarty.foreach.team_f.first}> :第1次執行 foreach迴圈
    <{$smarty.foreach.team_f.last}> :最後1次執行 foreach迴圈
    <{$smarty.foreach.team_f.iteration}> :取得迴圈的計數值,依序輸出1、2、3......
    <{$smarty.foreach.team_f.total}> :取得迴圈執行總數,等同<{$array|@count}>

    <{assign var=conuter value=$smarty.foreach.n.total+1}>
    <{$conuter}>
  4. 另一種方法(3.xx)
    $row@first:第一次執行foreach
    $row@last:最後1次執行 foreach
    $row@index:取得迴圈的計數值 0、1、2、........
    $row@total:取得迴圈執行總數

    <section> <div class="container"> <h1>成績單</h1> <table class="table table-hover table-bordered"> <{foreach $rows as $row}> <{if $row@first}> <tr> <th>序</th> <th>姓名</th> <th>國文</th> <th>英文</th> <th>社會</th> </tr> <{/if}> <tr> <{assign var=conuter value=$row@index+1}> <td><{$conuter}></td> <td><{$row.name}></td> <td><{$row.chinese}></td> <td><{$row.english}></td> <td><{$row.society}></td> </tr> <{if $row@last}> <tr> <th colspan=5>總共有:<{$row@total}>人</th> </tr> <{/if}> <{/foreach}> </table> </div> </section>

    php
     

    $rows[0]['name']="東方不敗"; $rows[0]['chinese']=89; $rows[0]['english']=60; $rows[0]['society']=70; $rows[1]['name']="楊過"; $rows[1]['chinese']=60; $rows[1]['english']=80; $rows[1]['society']=66; $rows[2]['name']="小龍女"; $rows[2]['chinese']=50; $rows[2]['english']=100; $rows[2]['society']=90; $smarty->assign('rows', $rows);

     

  5. 在樣板中,Smarty 也可以直接拿PHP的函數來用,我們稱之為「變數修飾器」,例如:
    變數後面要加上 |
    | 後面加上函數名稱,函數需要的參數用 : 格開

    例:得到檔案名稱

    <{$SCRIPT_NAME|basename}>

     

  6. 自訂義變數
    <{assign var=theme_name value=$xoTheme->folderName}>