文章教程

11.2.6实现BLOG首页

9/17/2020 9:26:54 PM 人评论 次浏览

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中也提供编辑和删除链接,当然,这些链接只有在用户登录后才能显示出来。

图 11-12 登录后的首页

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

教程类别