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中的实现方法几乎一样,这里不再赘述,读者可以自行完成。
共有条评论 网友评论