Toggle main menu visibility
下載輕鬆架
套件下載
使用手冊
發問討論
網站地圖
:::
登入
登入
帳號
密碼
登入
:::
所有書籍
「PHP8入門」目錄
MarkDown
5-6 加入 switch 流程控制
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-8 加入fancybox燈箱效果
PHP8入門 ====== 1. 讀出單一文章的功能算簡單,只要取出一筆,故不需要跑迴圈,順便取出縮圖即可,同樣的,記得過濾,避免XSS。 ```php // 觀看某篇文章 function show($id) { global $pdo; try { $stmt = $pdo->prepare('SELECT * FROM `news` WHERE `id` = ?'); $stmt->execute([$id]); $news = $stmt->fetch(); $media = $news['media']; $news = array_map('htmlspecialchars', $news); $news['files'] = json_decode($media, true); } catch (PDOException $e) { die("擷取 $id 資料失敗:" . $e->getMessage()); } return $news; } ``` 2. 先修改 `index.tpl`,判斷若是 `$op` 的值等於 `show `的時候,就載入 `op_show.tpl` 樣板,否則,就顯示所有頁面載入` op_index.tpl`。 3. 由於單一新聞和所有新聞的版面結構完全不同,所以,我們先將所有新聞的版面結構另存為新檔 `op_index.tpl` ```markup
所有文章
{include file="index_content.tpl"}
{include file="index_side.tpl"}
``` 4. 再新增單一新聞 `op_show.tpl` 的樣板(基本上,就是 `index_content.tpl `的完整版,故可複製它來修改),由於圖片可能不只一張,所以,用 `foreach `將所有圖片的檔名取出,並顯示圖檔。 ```markup
{$news.title}
{$news.author}
{$news.date} 點閱數:{$news.views}
{$news.content|nl2br}
{if is_file(reset($news.files))} {foreach $news.files as $filename=> $file_path}
{/foreach} {/if}
``` 5. 圖檔的地方,我們利用 Smarty 的 `{foreach as $索引 =>$值}` 來將圖檔檔名讀出,索引值 `$filename `是檔名,值 `$file_path `則是檔案路徑,若沒意外的話,直接用 `$file_path `即可,萬一日後修改檔案路徑,那麼再改用 `$filename `去重新組成路徑亦可 。 6. 最後修改原有的 `index.tpl`,依據不同的 `$op` 載入不同樣板 ```markup {include file="index_head.tpl" web_title="校園日誌"}
{include file="index_nav.tpl"}
{if $op=='show'} {include file="op_show.tpl"} {else} {include file="op_index.tpl"} {/if}
``` 7. 若是未來有更多的功能,那得需要加入更多載入樣板的判斷式,這樣也太累。所以,我們稍微改一下,就自動根據 `$op` 值載入相對應檔名的樣板即可,如: ```markup
{include file="op_{$op}.tpl"}
``` 這樣未來新增功能時,只要設定好 `$op`,並產生對應樣板即可。 8. 問題是,樣板怎麼知道 `$op `的值呢?我們必須傳給樣板才行,所以修改 `index.php`(`admin.php`其實未來也要),在套用樣板前,將 `$op `送至樣板 ```php $smarty->assign('op', $op); $smarty->display('index.tpl'); ``` 9. 如此單一頁面就大功告成囉!![](https://campus-xoops.tn.edu.tw/uploads/tad_book3/image/52/brave_Mkt320erXC.png)