0%

[技能檢定]題組二 步驟13 製作最新文章管理功能

最新文章管理功能的步驟算是很簡單的應用,和題組一的後台幾乎一模一樣,只差在沒有內容編輯的要求而已,因此只要熟悉題組一的解法,這邊就照著做即可:

  1. 在製作前台的分類網誌功能時已經先匯入文章到資料庫了,因此項目一算是送分
  2. 建立後台文章列表及分頁連結
    /back/news.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
    <form action="./api/edit_news.php" method="post">
    <table style="width:75%;text-align:center">
    <tr>
    <td>編號</td>
    <td style="width:70%">標題</td>
    <td>顯示</td>
    <td>刪除</td>
    </tr>
    <?php
    $total=$News->count();
    $div=3;
    $pages=ceil($total/$div);
    $now=$_GET['p']??1;
    $start=($now-1)*$div;
    $rows=$News->all(" limit $start,$div");
    foreach($rows as $idx=>$row){
    ?>
    <tr>
    <td><?=$idx+1+$start;?></td>
    <td><?=$row['title'];?></td>
    <td>
    <input type="checkbox" name="sh[]" value="<?=$row['id'];?>" <?=($row['sh']==1)?'checked':'';?>>
    </td>
    <td>
    <input type="checkbox" name="del[]" value="<?=$row['id'];?>">
    <input type="hidden" name="id[]" value="<?=$row['id'];?>">
    </td>
    </tr>
    <?php } ?>
    </table>
    <div class="ct">
    <?php
    if($now-1>0){
    $prev=$now-1;
    echo "<a href='back.php?do=news&p=$prev'> < </a>";
    }
    for($i=1;$i<=$pages;$i++){
    $size=($i==$now)?'font-size:22px;':'font-size:16px;';
    echo "<a href='back.php?do=news&p=$i' style='{$size}'> $i </a>";
    }
    if($now+1<=$pages){
    $next=$now+1;
    echo "<a href='back.php?do=news&p=$next'> > </a>";
    }
    ?>
    </div>
    <div class="ct"><input type="submit" value="修改確定"></div>
    </form>

  1. 建立 ./api/edit_news.php 檔案來處理文章編輯表單傳過來的資料
    api/news.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
    include_once 'db.php';

    // 檢查是否有設定 $_POST['id']
    if(isset($_POST['id'])){
    //使用迴圈來巡訪 $_POST['id'] 陣列
    foreach($_POST['id'] as $id){
    // 檢查是否有設定 $_POST['del'] 且 $id 在 $_POST['del'] 陣列中
    if(isset($_POST['del']) && in_array($id,$_POST['del'])){
    // 呼叫 News 物件的 del() 方法刪除新聞
    $News->del($id);
    }else{
    // 取得指定id的新聞資料
    $news=$News->find($id);
    // 檢查是否有設定 $_POST['sh'] 且 $id 在 $_POST['sh'] 陣列中
    // 若是則將 $news['sh'] 設為 1,否則設為 0
    $news['sh']=(isset($_POST['sh']) && in_array($id,$_POST['sh']))?1:0;
    // 呼叫 News 物件的 save() 方法儲存新聞資料
    $News->save($news);
    }
    }
    }

    // 導回後台管理頁面
    to("../back.php?do=news");