最新文章管理功能的步驟算是很簡單的應用,和題組一的後台幾乎一模一樣,只差在沒有內容編輯的要求而已,因此只要熟悉題組一的解法,這邊就照著做即可:
- 在製作前台的分類網誌功能時已經先匯入文章到資料庫了,因此項目一算是送分
- 建立後台文章列表及分頁連結
/back/news.php1
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>
$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>
}
</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>
- 建立
./api/edit_news.php
檔案來處理文章編輯表單傳過來的資料
api/news.php1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24include_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");