:::

6-6 讓搜尋框有作用

  1. 先改寫templates/nav.tpl搜尋框表單部份:
    1. 先幫 <form> 加上 action="{$url}/index.php" 屬性,才知道關鍵字到要送到哪裡處理,建議用絕對路徑。
    2. <input> 加上 name="keyword",如此,才能接收到使用者填的關鍵自變數 $_GET['keyword']
    3. 最後將<button>按鈕的 type 設為 submit 才有辦法將表單送出。
    4. 由於沒有特別設定 method,所以,預設就是以 get 的方式傳遞變數(搜尋會建議用 get,其餘會建議用 post
      <!-- 搜尋框 -->
      <form class="d-flex" action="{$url}/index.php">
        <div class="input-group">
          <input name="keyword" class="form-control border border-end-0" type="search" placeholder="搜尋文章" />
          <button class="btn bg-white border border-start-0" type="submit">
            <i class="fas fa-search"></i>
          </button>
        </div>
      </form>

       

  2. index.php上方加入關鍵字變數的過濾
    $op = isset($_REQUEST['op']) ? filter_var($_REQUEST['op'], FILTER_SANITIZE_STRING) : '';
    ...略...
    $keyword = isset($_REQUEST['keyword']) ? filter_var($_REQUEST['keyword'], FILTER_SANITIZE_STRING) : '';

     

  3. index.php 的流程中 index() 函式加入 $keyword 參數
    // 預設為文章列表
    default:
        $all_news = index($p, $cate_id, $keyword);
        $smarty->assign('all_news', $all_news);
        break;
  4. 再次改寫 index.php 中的 index() 函式
    // 列出所有文章
    function index($p, $cate_id = 0, $keyword = '')
    {
        global $db;
        $where = '';
        $all_news = $value = [];
    
        if ($cate_id) {
            // 是否要分類
            $where = "WHERE `cate_id`= ?";
            $value = [$cate_id];
        } elseif ($keyword) {
            // 關鍵字搜尋
            $where = "WHERE `title` like ? or `info` like ? or `content` like ? or `date` like ?";
            $value = ["%{$keyword}%", "%{$keyword}%", "%{$keyword}%", "%{$keyword}%"];
        }
    
        ...略...
    
        // 產生分頁內容
        $paginator = new Paginator($total, $news_per_page, $p, "index.php?p=(:num)&cate_id={$cate_id}&keyword={$keyword}");
    
        ...略...
    
        return $all_news;
    }

     

    1. 新增第三個參數 $keyword='' ,有預設值的話,表示呼叫時不用輸入該參數也沒關係。
    2. 接著判斷有無 $keyword,若有,就用 SQL 的 like 語法,搭配 % 萬用字元,分別找出資料表中 titleinfocontentdate 這四個欄位,有和關鍵字相符的資料。
    3. 要注意的是,% 萬用字元不可放在預備語句中,而是要放到變數綁定裡。
    4. 分頁一樣多加入&keyword={$keyword},如此,若搜尋結果很多,才能針對搜尋結果換頁
       
  5. 如此,我們就完成關鍵字搜尋囉!
  6. 接著

:::

書籍目錄

展開 | 闔起

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

計數器

今天: 4066406640664066
昨天: 5069506950695069
總計: 5134514513451451345145134514513451451345145134514