:::

6-4-5 讓主樣板可以同時讓多個功能使用

  1. 稍微修改一下switch流程,順便將 $op 的值也送到樣板,讓樣板檔也可以判斷什麼時候要做什麼事
    <?php
    use JasonGrimes\Paginator;
    require_once 'header.php';
    
    // 過濾外來變數
    $p = isset($_REQUEST['p']) ? (int) $_REQUEST['p'] : 1;
    $id = isset($_REQUEST['id']) ? (int) $_REQUEST['id'] : 0;
    $op = isset($_REQUEST['op']) ? filter_var($_REQUEST['op'], FILTER_SANITIZE_STRING) : 'index';
    
    switch ($op) {
        ...略...
    }
    
    $smarty->assign('op', $op);
    $smarty->display('index.tpl');
    

     

  2. 接著修改 templates/index.tpl,將主內容區的部份改為變數:
    <!-- 主內容區 -->
    <div class="col-md-9">
      {include file="op_{$op}.tpl"}
    </div>

     

  3. 接著建立將 templates/news.tpl 改名為 templates/op_index.tpl樣板檔
    <!-- 依序取出每篇文章 -->
    {foreach $all_news.data as $news}
      {include file='card.tpl'}
    {/foreach}
    
    <!-- 分頁工具 -->
    ...略...

     

  4. 建立templates/op_show.tpl樣板檔
    <div class="row">
      <div class="col-md-9">
        <h3>{$news.title}</h3>
        <p class="text-muted">{$news.info}</p>
        <article>
          {$news.content|nl2br}
        </article>
      </div>
      <div class="col-md-3">
        <!-- 縮圖列表 -->
        {foreach $news.files as $file => $thumb}
          <img src="{$url}/uploads/{$news.id}/thumbs/{$thumb}" alt="{$file}" class="img-fluid img-thumbnail mb-3" />
        {foreachelse}
          <img src="{$url}/images/none.png" alt="無圖檔" class="img-fluid img-thumbnail mb-3" />
        {/foreach}
      </div>
    </div>
    

     

    1. 其中主內容的地方,我們利用Smarty呼叫PHP函式的功能,將內文用nl2br()做換行處理:
      {$news.content|nl2br}

       

    2. 圖檔的地方,我們利用 Smarty 的 {foreach as $索引 =>$值} 來將圖檔檔名讀出,索引值 $file 是原檔檔名,值 $thumb 則是縮圖檔名,一般來說兩個應該是一樣的,但遇到影片檔時,這兩者會不同,所以還是要分開處理。
    3. 若是沒有圖檔,則可用 {foreachelse} 來執行預設圖片
    4. 最後看起來會像這樣:

:::

書籍目錄

展開 | 闔起

https%3A%2F%2Fcampus-xoops.tn.edu.tw%2Fmodules%2Ftad_book3%2Fpage.php%3Ftbsn%3D52%26tbdsn%3D1825

計數器

今天: 4153415341534153
昨天: 5069506950695069
總計: 5134601513460151346015134601513460151346015134601