Keep going。
進度
今天把部落格的主要功能給做完了:
- 登入機制
- 單篇文章閱覽
- 新增、刪除文章
- 新增、刪除分類
- 分頁功能
慢慢理解為什麼要用 MVC 這個東西了,當改一個地方就要改一大堆頁面的時候真的蠻麻煩的。
學到的事情
雖然 PHP 寫起來很直覺,但當功能增加時就會變得很複雜。光是實作上面的功能就已經開了21 個 PHP 檔,如果眼睛不夠利的話很常會搞混哪個檔案在做什麼,是件蠻困擾的事情。
學會與雜亂的 code 相處
我想身為工程師必須學會的事情,code 再多再長,也是要想辦法找出你的目標,不能因為 code 長就眼花撩亂。
今天我也學到模組化的重要性,例如「導覽列」。
一開始為了處理 active
(目前所在頁面)的效果,我是用一個一個改的方式來把該有 active
的 class 加上去。但後來發現這樣不行,如果之後要改一個東西,我不就要改一大堆頁面?完全不能接受。所以思考有沒有辦法把導覽列抽出來變成一個模組,於是就 nav.php
就誕生了:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
| <?php $username = null; if (!empty($_SESSION['username'])) { $username = $_SESSION['username']; } ?>
<nav class="navbar navbar-expand-lg navbar-dark bg-dark"> <div class="container"> <a class="navbar-brand fw-bold" href="index.php">PeaNu</a> <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation"> <span class="navbar-toggler-icon"></span> </button> <div class="collapse navbar-collapse" id="navbarSupportedContent"> <ul class="navbar-nav me-auto mb-2 mb-lg-0 w-100"> <li class="nav-item"> <a class="nav-link <?php if (str_contains($_SERVER['REQUEST_URI'], '/categories.php')) { echo 'active'; } ?>" href="categories.php">文章分類</a> </li> <li class="nav-item me-lg-auto"> <a class="nav-link <?php if (str_contains($_SERVER['REQUEST_URI'], '/about.php')) { echo 'active'; } ?>" href="about.php">關於我</a> </li> <?php if (empty($username)) { ?> <li class="nav-item"> <a class="nav-link" href="login.php">登入</a> </li> <?php } else { ?> <li class="nav-item"> <a class="nav-link <?php if (str_contains($_SERVER['REQUEST_URI'], '/admin.php')) { echo 'active'; } ?>" href="admin.php">後台管理</a> </li> <li class="nav-item"> <a class="nav-link" href="handle.logout.php">登出</a> </li> <?php } ?> </ul> </div> </div> </nav>
|
像這樣抽出來之後,每個檔案只要一句:
1
| require_once('nav.php');
|
導覽列就會自動處理好登入 or 登出的狀態,要改東西也只要改這個檔案就好。
所以模組化確實是一個很重要的概念,希望之後也能善用模組來解決各種惱人的事。
題外話
最近開始玩了 Pokemon unite。用投籃的方式來包裝 Dota 這一點蠻有創意的。以前沒有很喜歡玩這類的遊戲,這也是第一款讓我覺得還不錯玩的遊戲。
許願池
作業二也快告一段落了,明天只要把剩下的分類頁面給做完,再做一點優化也許就完成了。