1. 學好程式的幾個建議 1-1 安裝PHP運作環境 1-2 安裝 VSCode 開發工具 1-3 安裝 Composer 1-4 關於PHP8 1-5 上課範例及需求 1-6 需要的學習心態 2. PHP基本語法 2-1 註解 2-2 PHP資訊頁 2-3 PHP的資料類型 2-4 關於陣列 2-5 PHP常用運算符(有用到再參閱) 2-6 關於函數(有用到再參閱) 2-7 關於迴圈(有用到再參閱) 2-8 建立專案目錄 3. 從前端界面入手 3-1 安裝 BootStrap5 來製作 RWD 自適應網站 3-2 設計RWD顯示界面 3-2-1 設計導覽列 3-2-2 設計主畫面 3-2-3 設計文章版面 3-2-4 側邊欄的列表 3-2-5 顯示頁面 index.html 初步完成 3-3 設計管理界面 3-3-1 用AI建立發布文章的自適應表單 3-3-2 認識表單元件 3-3-3 用AI來建立資料表 3-3-4 常用資料庫的欄位類型 3-3-5 發布頁面 admin.html 初步完成 4. 用AI來產生表單儲存功能 4-1 接收表單的值 4-2 PDO的資料庫連線 4-3 用PDO寫入資料庫 4-4 檔案上傳與接收 4-5 更新資料(寫入檔案資訊) 4-6 用PDO讀取資料 4-7 讀出資料的過濾 4-8 整併並引入共同執行檔案 header.php 4-9 把設定值也獨立成 config.php 5. 用Smarty樣板引擎將資料與前端結合 5-1 建立主樣板檔 index.tpl 並套用之 5-2 將主樣板檔拆分成小樣板 5-3 顯示所有文章摘要 5-3-1 將所有文章變成二維陣列 5-3-2 讓樣板檔接收二維陣列 5-3-3 加入分頁 5-3-4 自定義分頁工具列 5-4 建立管理樣板 admin.tpl 並套用之 5-5 將程式函式化以便彈性呼叫 5-6 加入 switch 流程控制 5-7 完成顯示單一文章的功能 5-8 加入fancybox燈箱效果 6. 讓導覽列有作用 6-1 只顯示某一分類文章 6-2 該分類沒有文章的處理 6-3 讓搜尋框有作用 6-4 讓側邊欄的年度文章數有作用 6-5 讀出指定年度的文章 7. 後台發布文章界面 7-1 讓前後台統一主樣板 7-2 加入管理者認證 7-3 用session機制讓系統記住管理員 7-4 加入編輯功能 7-5 加入儲存修改(更新)功能 7-6 加入更新點閱數的功能 7-7 讓修改時可以加入圖片 7-8 讓圖片可以刪除 7-9 加入刪除文章功能 11-1 多檔上傳 11-2 安全檔名 11-3 產生圖片縮圖 11-4 上傳影片並產生縮圖
5-3-4
自定義分頁工具列
由於該工具列會直接輸出(該作者就這樣寫),而且我們想自己定義分頁按鈕的文字
所以,我們用 extends
繼承 yidas\widgets\Pagination
的物件來修做成新的 Paginator
物件。
此語法可以放在 index.php
,但為了不讓 index.php
看起來太複雜,所以,我們放在 header.php
,如此,有需要的頁面都可以呼叫使用,故在 header.php
最下方加入:
// 自定義分頁工具
class Paginator extends yidas\widgets\Pagination
{
public $buttonCount = 10;
public $firstPageLabel = '<<';
public $lastPageLabel = '>>';
public $nextPageLabel = '>';
public $prevPageLabel = '<';
}
回到 index.php
,將原本產生分頁工具列的程式改成這樣:
// 產生分頁工具列
ob_start();
Paginator::widget(['pagination' => $pagination]);
$paginator = ob_get_clean();
$smarty->assign('paginator', $paginator);
由於該物件會直接輸出到畫面上,所以,我們利用緩衝函數 ob_start()
及 ob_get_clean()
來獲取輸出的內容,並套用至樣板(避免直接輸出)。
最後,完整 index.php
語法如下:
<?php
use yidas\data\Pagination;
require_once 'header.php';
// 計算總資料數
try {
$stmt = $pdo->prepare('SELECT count(*) FROM `news`');
$stmt->execute();
list($totalCount) = $stmt->fetch(PDO::FETCH_NUM);
// 產生分頁物件
$pagination = new Pagination(['totalCount' => $totalCount, 'perPage' => $perPage]);
// 產生分頁工具列
ob_start();
Paginator::widget(['pagination' => $pagination]);
$paginator = ob_get_clean();
$smarty->assign('paginator', $paginator);
} catch (PDOException $e) {
die("計算總資料數失敗:" . $e->getMessage());
}
try {
// 準備SQL語句
$sql = "SELECT * FROM `news` ORDER BY `date` DESC LIMIT ?, ?";
// 預備語句
$stmt = $pdo->prepare($sql);
// 綁定參數並執行語句
$stmt->execute([$pagination->offset, $pagination->limit]);
$all_news = [];
$news = $stmt->fetchAll();
foreach ($news as $row) {
$media = $row['media'];
unset($row['media']);
$row = array_map('htmlspecialchars', $row);
$row['files'] = json_decode($media, true);
$all_news[] = $row;
}
$smarty->assign('all_news', $all_news);
} catch (PDOException $e) {
echo "資料庫連接錯誤:" . $e->getMessage();
}
$smarty->display('index.tpl');
// 顯示變數內容
function dd($array = [])
{
header("Content-Type: application/json; charset=utf-8");
die(json_encode($array, 256));
}
最後看起來像這樣:
1. 學好程式的幾個建議 1-1 安裝PHP運作環境 1-2 安裝 VSCode 開發工具 1-3 安裝 Composer 1-4 關於PHP8 1-5 上課範例及需求 1-6 需要的學習心態 2. PHP基本語法 2-1 註解 2-2 PHP資訊頁 2-3 PHP的資料類型 2-4 關於陣列 2-5 PHP常用運算符(有用到再參閱) 2-6 關於函數(有用到再參閱) 2-7 關於迴圈(有用到再參閱) 2-8 建立專案目錄 3. 從前端界面入手 3-1 安裝 BootStrap5 來製作 RWD 自適應網站 3-2 設計RWD顯示界面 3-2-1 設計導覽列 3-2-2 設計主畫面 3-2-3 設計文章版面 3-2-4 側邊欄的列表 3-2-5 顯示頁面 index.html 初步完成 3-3 設計管理界面 3-3-1 用AI建立發布文章的自適應表單 3-3-2 認識表單元件 3-3-3 用AI來建立資料表 3-3-4 常用資料庫的欄位類型 3-3-5 發布頁面 admin.html 初步完成 4. 用AI來產生表單儲存功能 4-1 接收表單的值 4-2 PDO的資料庫連線 4-3 用PDO寫入資料庫 4-4 檔案上傳與接收 4-5 更新資料(寫入檔案資訊) 4-6 用PDO讀取資料 4-7 讀出資料的過濾 4-8 整併並引入共同執行檔案 header.php 4-9 把設定值也獨立成 config.php 5. 用Smarty樣板引擎將資料與前端結合 5-1 建立主樣板檔 index.tpl 並套用之 5-2 將主樣板檔拆分成小樣板 5-3 顯示所有文章摘要 5-3-1 將所有文章變成二維陣列 5-3-2 讓樣板檔接收二維陣列 5-3-3 加入分頁 5-3-4 自定義分頁工具列 5-4 建立管理樣板 admin.tpl 並套用之 5-5 將程式函式化以便彈性呼叫 5-6 加入 switch 流程控制 5-7 完成顯示單一文章的功能 5-8 加入fancybox燈箱效果 6. 讓導覽列有作用 6-1 只顯示某一分類文章 6-2 該分類沒有文章的處理 6-3 讓搜尋框有作用 6-4 讓側邊欄的年度文章數有作用 6-5 讀出指定年度的文章 7. 後台發布文章界面 7-1 讓前後台統一主樣板 7-2 加入管理者認證 7-3 用session機制讓系統記住管理員 7-4 加入編輯功能 7-5 加入儲存修改(更新)功能 7-6 加入更新點閱數的功能 7-7 讓修改時可以加入圖片 7-8 讓圖片可以刪除 7-9 加入刪除文章功能 11-1 多檔上傳 11-2 安全檔名 11-3 產生圖片縮圖 11-4 上傳影片並產生縮圖