iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 9
1
Modern Web

寫給朋友的 PHP 從 0 到 100 實戰教程系列 第 9

Day 9. PHP教學: 從單一網頁到基礎框架概念

  • 分享至 

  • xImage
  •  

我們知道專案中 index.php 會被視為首頁
只要輸入 http://127.0.0.1/game 就會開啟 index.php
其實等於 http://127.0.0.1/game/index.php
後面的 index.php 可以被省略,這是首頁的優待

那首頁的程式碼可能會是

<html>
<head>
  <!-- 這裡是 HTML 語法的 header 頁首引用宣告區 -->
  <!-- 這裡是 HTML 語法的 header 頁首引用宣告區 -->
  <!-- 這裡是 HTML 語法的 header 頁首引用宣告區 -->
</head>
<body>
  <!-- 這裡是 HTML 語法的 主要資料區 -->

  <?php echo "放上首頁介紹的資料";?>

  <!-- 這裏通常會放 footer 頁尾的資料 -->
  <!-- 這裏通常會放 footer 頁尾的資料 -->
  <!-- 這裏通常會放 footer 頁尾的資料 -->
</body>
</html>

如果我們想寫英雄列表頁
就要開一個 list.php
那網址就會是 http://127.0.0.1/game/list.php
這個 list.php 不能省略,省略就會優先導向首頁

程式碼可能會是

<html>
<head>
  <!-- 這裡是 HTML 語法的 header 頁首引用宣告區 -->
  <!-- 這裡是 HTML 語法的 header 頁首引用宣告區 -->
  <!-- 這裡是 HTML 語法的 header 頁首引用宣告區 -->
</head>
<body>
  <!-- 這裡是 HTML 語法的 主要資料區 -->

  <?php echo "這裡有一張表格裡面有很多英雄的名字";?>

  <!-- 這裏通常會放 footer 頁尾的資料 -->
  <!-- 這裏通常會放 footer 頁尾的資料 -->
  <!-- 這裏通常會放 footer 頁尾的資料 -->
</body>
</html>

如果我們想寫單一英雄介紹頁
就要開一個 hero.php
那網址就會是 http://127.0.0.1/game/hero.php
這個 hero.php 也不能省略

程式碼應該會是:

<html>
<head>
  <!-- 這裡是 HTML 語法的 header 頁首引用宣告區 -->
  <!-- 這裡是 HTML 語法的 header 頁首引用宣告區 -->
  <!-- 這裡是 HTML 語法的 header 頁首引用宣告區 -->
</head>
<body>
  <!-- 這裡是 HTML 語法的 主要資料區 -->

  <?php echo "這裡一個表格有英雄的名字跟其他細節資料";?>

  <!-- 這裏通常會放 footer 頁尾的資料 -->
  <!-- 這裏通常會放 footer 頁尾的資料 -->
  <!-- 這裏通常會放 footer 頁尾的資料 -->
</body>
</html>

再次,一樣的問題又出現了
發現 header 頁首跟 footer 頁尾幾乎每一頁都要重複使用
如果今天我們有 10 頁,要改的話就要改 10 次

『還不能漏掉任何一頁,不然就會出錯』

為了不挖坑給未來的自己跳,我們可以把共用的部分拆成共用的檔案
頁首拆成 header.php

<html>
<head>
  <!-- 這裡是 HTML 語法的 header 頁首引用宣告區 -->
  <!-- 這裡是 HTML 語法的 header 頁首引用宣告區 -->
  <!-- 這裡是 HTML 語法的 header 頁首引用宣告區 -->
</head>
<body>

頁尾拆成 footer.php

<!-- 這裏通常會放 footer 頁尾的資料 -->
<!-- 這裏通常會放 footer 頁尾的資料 -->
<!-- 這裏通常會放 footer 頁尾的資料 -->
</body>
</html>

中間內容部分抓出來存成

main.php 首頁內容

<!-- 這裡是 HTML 語法的 主要資料區 -->
<?php echo "這裡有一張表格裡面有很多英雄的名字";?>

list.php 列表內容

<!-- 這裡是 HTML 語法的 主要資料區 -->
<?php echo "這裡有一張表格裡面有很多英雄的名字";?>

hero.php 單頁內容

<!-- 這裡是 HTML 語法的 主要資料區 -->
<?php echo "這裡一個表格有英雄的名字跟其他細節資料";?>

index.php 當成是統一的入口,先使用最簡單的 GET 參數來決定導向哪一頁
如果網址是 http://127.0.0.1/game/index.php?page=list 就會出現 list page
程式碼這樣寫

<?php
require('vendor/autoload.php'); // 載入 composer

if(isset($_GET['page']) AND !empty($_GET['page'])){
    $page = $_GET['page'];
}else{
    $page = "main";
}

include('header.php'); // 載入共用的頁首
switch($page){  // 依照 GET 參數載入共用的內容
    case: "main";
      include('main.php');
    break;
    case: "list";
      include('list.php');
    break;
    case: "hero";
      include('hero.php');
    break;
}
include('footer.php'); // 載入共用的頁尾

這樣就是一個有 route 路由概念的超基礎框架
還記得是為了什麼改成這樣的嗎?

為了拆出共用的元件,避免未來要到處找重複的地方做修改

今天先講到這裡!明天我們來聊 Clean URL 如何做出更乾淨的網頁路徑


上一篇
Day 8. PHP教學: 必學-超強套件管理器composer
下一篇
Day 10. PHP教學: Clean URL 優化連結
系列文
寫給朋友的 PHP 從 0 到 100 實戰教程30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
Ben
iT邦新手 4 級 ‧ 2018-04-06 02:49:49

這樣好像沒辦法運行~
switch($page){ // 依照 GET 參數載入共用的內容
case: "main";
include('main.php');
break;
case: "list";
include('list.php');
break;
case: "hero";
include('hero.php');
break;
}

greenmac iT邦新手 5 級 ‧ 2018-05-17 11:45:36 檢舉

##這裡要改成這樣
include('header.php'); // 載入共用的頁首
switch($page){ // 依照 GET 參數載入共用的內容
case "main":
include('main.php');
break;
case "list":
include('list.php');
break;
case "hero":
include('hero.php');
break;
}
include('footer.php'); // 載入共用的頁尾

falconwei iT邦新手 5 級 ‧ 2018-05-17 22:09:17 檢舉

水哦 你們越來越 li hi 了

我要留言

立即登入留言