11.2.6实现BLOG首页
11.2.6 实现BLOG首页
用户成功登录后,会转向BLOG的首页,本小节向读者介绍BLOG首页的实现。因为用户登录后,可以完成对BLOG的各项管理操作,所以如果用户已经登录,就在首页的日志文章后添加编辑和删除的链接,以便用户完成对日志文章的编辑和删除。因为登录程序设置了session,所以可以在首页中使用session对用户是否已经登录进行判断。
登录前和登录后的首页显示会稍有不同。比如,登录后应该显示编辑、删除和退出链接,而没有登录的情况下,用户只能看到登录链接。另外,BLOG首页除了显示日志文章外,还将显示日志文章按年月归档的导航列表,所以首页还应该实现日志文章的归档处理。代码11-9是BLOG首页的完整程序。
代码11-9 首页程序index.php
01 <?php
02 $login=false;
03 session_start();
04
05 if(!empty($_SESSION["user"])&&$_SESSION["user"]=="admin")//判断用户是否登录
06 $login=true;
07
08 $file_array=array();
09 $folder_array=array();
10
11 $dir="contents";
12 $dh=opendir($dir);//打开保存日志的目录
13
14 if($dh)
15 {
16 $filename=readdir($dh);//读取目录下的文件
17
18 while($filename)//循环处理按年月归档的日志文章
19 {
20 if($filename!="."&&$filename!="..")
21 {
22 $folder_name=$filename;
23 array_push($folder_array,$folder_name);
24 }
25 $filename=readdir($dh);
26 }
27 }
28 rsort($folder_array);//对目录排序
29
30 $post_data=array();
31 foreach($folder_array as$folder)
32 {
33 $dh=opendir($dir."/".$folder);//处理每个目录下的日志文件
34 while(($filename=readdir($dh))!==FALSE)
35 {
36 if(is_file($dir."/".$folder."/".$filename))
37 {
38 $file=$filename;
39 $file_name=$dir."/".$folder."/".$file;
40
41 if(file_exists($file_name))//判断文件是否存在
42 {
43 $fp=@fopen($file_name,"r");
44 if($fp)
45 {
46 flock($fp,LOCK_SH);
47 $result=fread($fp,filesize($file_name));//读取文件内容
48 }
49 flock($fp,LOCK_UN);
50 fclose($fp);
51 }
52 $temp_data=array();
53 $content_array=explode("|",$result);
54
55 $temp_data["SUBJECT"]=$content_array[0];//文章标题
56 $temp_data["DATE"]=date("Y-m-d H:i:s",$content_array[1]);//发表时间
57 $temp_data["CONTENT"]=$content_array[2];//文章内容
58 $file=substr($file,0,9);//日志文章所在文件名
59 $temp_data["FILENAME"]=$folder."-".$file;
60 array_push($post_data,$temp_data);
61 }
62 }
63 }
64 ?>
65
66 <!DOCTYPE html PUBLIC"-//W3C//DTD XHTML 1.0 Transitional//EN"
67 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
68 <html>
69 <head>
70 <title>基于文本的简易BLOG</title>
71 <link rel="stylesheet"type="text/css"href="style.css"/>
72 </head>
73 <body>
74
75 <div id="container">
76 <div id="header">
77 <h1>我的BLOG</h1>
78 </div>
79 <div id="title">
80 ----I have dream……
81 </div>
82 <div id="left">
83 <?php foreach($post_data as$post)//显示所有日志文章
84 {
85 ?>
86 <div id="blog_entry">
87 <div id="blog_title"><?php echo$post["SUBJECT"];?></div>
88 <div id="blog_body">
89 <div id="blog_date"><?php echo$post["DATE"];?></div>
90 <?php echo$post["CONTENT"];?>
91 <div>
92 <?php
93 if($login)
94 {
95 echo"<a href="edit.php?entry=
".$post["FILENAME"]."">编辑</a> <a
96 href="delete.php?entry=".$post["FILENAME"]."">删除</a>";//输出日志文章的编辑和删除链接
97 }
98 ?>
99
100 </div>
101 </div><!--blog_body-->
102 </div><!--blog_entry-->
103 <?php}?>
104 </div>
105
106 <div id="right">
107 <div id="sidebar">
108 <div id="menu_title">关于我</div>
109 <div id="menu_body">
110 我是个PHP爱好者
111 <br/><br/>
112 <?php if($login){echo"<a href="logout.php">退出</a>";}else{echo"<a href="login.php">登录
113 </a>";}?>
114 </div>
115 </div>
116 <br/>
117 <div id="sidebar">
118 <div id="menu_title">日志归档</div>
119 <?php foreach($folder_array as$ym)//输出日志按年月归档
120 {
121 $entry=$ym;
122 $ym=substr($ym,0,4)."-".substr($ym,4,2);
123 echo"<div id="menu_body"><a href="archives.php?ym=".$entry."">".$ym."</a></div>";
124 }
125 ?>
126 </div>
127 </div>
128
129 <div id="footer">
130 copyright 2011
131 </div>
132 </div>
133
134 <body>
135 </html>
136 <?php close($dh);?>
【代码解析】index.php主要实现了3大功能:
❑列出所有日志文章
❑实现了日志文章按年月归档的显示
❑根据用户登录与否,显示不同的链接
如果用户已经登录,将会看到如图11-12所示的首页界面。这时,用户可以通过首页的编辑或删除链接,对日志文章进行相关管理操作。因为post.php会显示某篇具体的日志文章,所以,应该在post.php中也提供编辑和删除链接,当然,这些链接只有在用户登录后才能显示出来。

说明 post.php中实现提供编辑和删除链接的方法,与在index.php中的实现方法几乎一样,这里不再赘述,读者可以自行完成。
上一篇:11.2.5实现登录功能