Blogger Information
Blog 22
fans 1
comment 1
visits 22277
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
站点模块化与数据动态(复刻“塔读文学PC站”)--PHP培训十期线上班
Miss灬懒虫
Original
1274 people have browsed it

站点模块化与数据动态(复刻“塔读文学PC站”)—补1.10-1.12作业

声明

  • 代码涉及塔读文学原站图片、内容等资源,仅供学习、交流使用,不得用于商业行为,本人对此类相关事件不负任何责任,转载请注明来源,——谢谢!

学习总结

  • 看到这次作业时,感觉老师安排的作业量很大,本来想凑合一下的,可是自己想了一下,还是选择慢一点,至少做到自己满意才好。毕竟,学来的东西都是自己的,同时我也想好好写一下,看看自己到底掌握的怎么样,所以这次作业交的有点慢啦!

  • 首先,在这次作业中,感觉自己对一些讲过的内置函数以及一些数组的记忆,还是不过深刻,有时间还是要抓紧时间再练习一下。

  • 其次,因为页面中涉及的数据量比较大,所以主要对导航、作品库、首页的《我有一座巨龙城》进行了数据动态,还有一些实现效果需要js,所以只能先放着了。

  • 整体感觉动态网站,还是很意思,也是很必要的(因为数据量大了,维护那真的是个很费劲的事情嘞)。其次,也发现对于动态网站来说,HTML这个显示骨架结构的合理性和逻辑性也显得尤为重要。

  • 由于代码量比较大,所以只展示项目结构动态数据部分,博文最后有完整的代码包,有需要的小伙伴!可以自己下载哦!

  • 要是时间允许,伴随课程推进,我会不断完善这个案例,这次就算是Ver.1.00吧!

项目思路

首先,我分析了一下站点的布局和显示模块,感觉公用的东西还是蛮多的;

  • 页头
  • banner图
  • 页尾
  • 推荐列表,一共大概有3-4种显示样式
  • 列表翻页
  • 路径导航
  • 作品主页
  • 作品目录

然后,在将网站的数据根据需要,进行分表建库,这里就先用config.php暂时代替一下。

最后,将拆分模块模板,按照需求拼装起来(这里用了include引入文件),就可了。(前面写模块是真的慢!)

项目结构

includes 文件夹,包含是组件模板存在的路径;
inc_css文件夹,包含组件模板样式表;
config.php文件,是配置文件(包含模拟数据);
resources文件夹,包含images,展示页面引用的css

页面效果

站点首页



作品库页面



作品主页



代码部分

config.php

  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * File name:config.php
  5. * Description:网站动态数据--配置文件
  6. * User: Air15_2019
  7. * Date: 2020/1/12
  8. * Time: 12:06
  9. */
  10. /*
  11. * 站点基础配置
  12. * -栏目导航
  13. * -底部链接
  14. * -其它固化信息
  15. * */
  16. //站点基础配置
  17. $siteTitle = '塔读文学';
  18. //定义,资源路径、组件库常量
  19. const RESOURCES_PATH = 'resources/';
  20. /*栏目导航*/
  21. $tc_nav = [
  22. ['id' => 1, 'name' => '首页', 'URL' => 'index.php'],
  23. ['id' => 2, 'name' => '作品库', 'URL' => 'book_lists.php'],
  24. ['id' => 3, 'name' => '原创女生', 'URL' => 'book_women.php'],
  25. ['id' => 4, 'name' => '轻小说', 'URL' => 'book_min.php'],
  26. ['id' => 5, 'name' => '衍生版权', 'URL' => 'book_derivatives.php'],
  27. ['id' => 6, 'name' => '作者福利', 'URL' => 'book_author.php'],
  28. ];
  29. //友情链接
  30. $tc_footerLinks = [];
  31. //作品频道-- 频道ID,频道名称
  32. $tc_channelType = [
  33. ['id' => 1, 'channelName' => '男频'],
  34. ['id' => 2, 'channelName' => '女频'],
  35. ['id' => 3, 'channelName' => '出版'],
  36. ['id' => 4, 'channelName' => '二次元'],
  37. ];
  38. //小说分类-- 分类ID,所属频道ID,分类编码,分类名称
  39. $tc_novelType = [
  40. ['id' => 1, 'channelType_id' => 0, 'novelType' => 'ALL', 'name' => '不限',],
  41. ['id' => 2, 'channelType_id' => 1, 'novelType' => 'DFXH', 'name' => '东方玄幻',],
  42. ['id' => 3, 'channelType_id' => 1, 'novelType' => 'XDDS', 'name' => '现代都市',],
  43. ['id' => 4, 'channelType_id' => 1, 'novelType' => 'NDCX', 'name' => '脑洞创意',],
  44. ['id' => 5, 'channelType_id' => 1, 'novelType' => 'LSJK', 'name' => '历史架空',],
  45. ['id' => 6, 'channelType_id' => 1, 'novelType' => 'JSZZ', 'name' => '军事战争',],
  46. ['id' => 7, 'channelType_id' => 1, 'novelType' => 'YXJJ', 'name' => '游戏竞技',],
  47. ['id' => 8, 'channelType_id' => 1, 'novelType' => 'WXXX', 'name' => '武侠仙侠',],
  48. ['id' => 9, 'channelType_id' => 1, 'novelType' => 'KHMS', 'name' => '科幻末世',],
  49. ['id' => 10, 'channelType_id' => 1, 'novelType' => 'LXXY', 'name' => '灵异悬疑',],
  50. ['id' => 11, 'channelType_id' => 1, 'novelType' => 'XFQH', 'name' => '西方奇幻',],
  51. ['id' => 12, 'channelType_id' => 1, 'novelType' => 'DPXS', 'name' => '短片小说',],
  52. ['id' => 13, 'channelType_id' => 2, 'novelType' => 'GDYQ', 'name' => '古代言情',],
  53. ['id' => 14, 'channelType_id' => 2, 'novelType' => 'XHYQ', 'name' => '玄幻言情',],
  54. ['id' => 15, 'channelType_id' => 2, 'novelType' => 'XDYQ', 'name' => '现代言情',],
  55. ['id' => 16, 'channelType_id' => 2, 'novelType' => 'QCXY', 'name' => '青春校园',],
  56. ['id' => 17, 'channelType_id' => 2, 'novelType' => 'XYLY', 'name' => '悬疑灵异',],
  57. ['id' => 18, 'channelType_id' => 2, 'novelType' => 'DPXS', 'name' => '短片小说',],
  58. ];
  59. //作品状态字典-- 状态ID,状态名称
  60. $tc_novelStatus = [
  61. ['id' => 1, 'statusName' => '不限',],
  62. ['id' => 2, 'statusName' => '连载',],
  63. ['id' => 3, 'statusName' => '完结',],
  64. ];
  65. //作品上架状态(属性)-- 上架状态ID,上架状态名称
  66. $tc_chargeType = [
  67. ['id' => 1, 'chargeTypeName' => '不限',],
  68. ['id' => 2, 'chargeTypeName' => '免费',],
  69. ['id' => 3, 'chargeTypeName' => 'VIP',],
  70. ];
  71. //作品字数分类-- ID,字数分类名称
  72. $tc_numberType = [
  73. ['id' => 1, 'numberTypeName' => '不限',],
  74. ['id' => 2, 'numberTypeName' => '10万以下',],
  75. ['id' => 3, 'numberTypeName' => '10万-30万',],
  76. ['id' => 4, 'numberTypeName' => '30万-50万',],
  77. ['id' => 5, 'numberTypeName' => '50万-100万',],
  78. ['id' => 6, 'numberTypeName' => '100万以上',],
  79. ['id' => 7, 'numberTypeName' => '100万-200万',],
  80. ['id' => 8, 'numberTypeName' => '200万以上',],
  81. ];
  82. //筛选作品列表排序-- ID,排序名称
  83. $tc_SortingType = [
  84. ['id' => 1, 'sortingName' => '周人气',],
  85. ['id' => 2, 'sortingName' => '最近更新',],
  86. ['id' => 3, 'sortingName' => '总推荐',],
  87. ['id' => 4, 'sortingName' => '总字数',],
  88. ['id' => 5, 'sortingName' => '收藏',],
  89. ];
  90. /*
  91. * $tf_users 用户信息表-实体表
  92. * ID、用户名称、用户类型(1-读者会员/2-作者/3-管理员) 、用户等级、用户头像URL、用户主页URL
  93. * */
  94. $tf_users = [
  95. [
  96. 'id' => 145,
  97. 'name' => '东边夜雨',
  98. 'userType' => 2,
  99. 'userLevel' => 3,
  100. 'imgURL' => 'images/users/145.jpg',
  101. 'userIndex' => '',
  102. ],
  103. ];
  104. /*
  105. * $tf_novelInfo 作品信息-实体表
  106. * 作品ID、频道ID、类型id、名称、封面图片URL、作者、小说简介、作品主页URL、
  107. * 作品状态、签约状态、上架状态、字数/万、人气值、推荐票合计、收藏数量
  108. * */
  109. $tf_novelInfo = [
  110. [
  111. 'id' => 3047,
  112. 'channelType_id' => 1,
  113. 'novelType_id' => 7,
  114. 'name' => '我有一座巨龙城',
  115. 'imgUrl' => 'images/3047.jpg',
  116. 'user_id' => 145,
  117. 'description' => '【2020年1月银票大赛参赛作品】别人出生在新手村,而我直接继承了一座巨龙城。 10级解封山地亚龙。 20级解锁毒液魔龙。 30级解锁烈焰巨龙。 鬼面獠龙,天灾骨龙,黑暗魔龙,…… 当网游降临现实,陆离脚踩永恒超越之龙,带领亿万龙族大军,粉碎入侵,征战诸天万界',
  118. 'status' => '连载中',
  119. 'signing' => '塔读签约',
  120. 'charge' => 'VIP',
  121. 'wordNumber' => '68.4万字',
  122. 'focus' => '865',
  123. 'recommend' => 189,
  124. ],
  125. ];
  126. /*
  127. * 小说章节列表
  128. * 小说目录-ID、小说ID、卷code、卷序号、卷名、章节名、内容URL
  129. * */
  130. $tf_novelDirectory = [];

public_header.inc.php

  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * File name:public_header.inc.php
  5. * Description:页面公共组件-头部导航
  6. * User: Air15_2019
  7. * Date: 2020/1/12
  8. * Time: 11:51
  9. */
  10. // 使用include,引入配置文件config.php
  11. include 'config.php';
  12. ?>
  13. <div class="public-header">
  14. <div class="header-container">
  15. <div class="header-top">
  16. <a class="logo" href="index.php"></a>
  17. <div class="login">
  18. <!--作者专区 按钮-->
  19. <a href=""></a>
  20. <a class="login-right" href="">登录</a>
  21. <a class="login-right" href="">注册</a>
  22. </div>
  23. </div>
  24. <div class="header-nav">
  25. <div>
  26. <?php foreach ($tc_nav as $items): ?>
  27. <a href=<?php echo '"'.$items['URL'].'"';?>>
  28. <?php echo $items['name'];?>
  29. </a>
  30. <?php endforeach;?>
  31. </div>
  32. <div>
  33. <input type="search" id="header_search" name="header_search" value="关键词、书名、作者">
  34. <label for="header_search"><a href="">搜索</a></label>
  35. </div>
  36. </div>
  37. </div>
  38. </div>

public_recommend_list.inc.php

  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * File name:public_recommend_list.inc.php
  5. * Description:页面公共组件-头部导航
  6. * User: Air15_2019
  7. * Date: 2020/1/12
  8. * Time: 15:36
  9. */
  10. //导入数据配置文件
  11. include 'config.php';
  12. $id = 3047;
  13. //遍历获取 封推 作品信息
  14. foreach ($tf_novelInfo as $novel) {
  15. if ($novel['id'] === $id) {
  16. //将数组的元素,转换为单独的变量;
  17. extract($novel);
  18. }
  19. }
  20. //遍历关联 用户信息表,获取作者相关信息
  21. foreach ($tf_users as $user){
  22. if($user['id']===$user_id){
  23. $author_name=$user['name'];
  24. }
  25. }
  26. //便利关联 小说类型表,获取作品类型信息
  27. foreach ($tc_novelType as $value){
  28. if($value['id']===$novelType_id){
  29. $typeName=$value['name'];
  30. }
  31. }
  32. ?>
  33. <div class="public-recommend-list">
  34. <!--推荐列表标题-->
  35. <div class="recommend-title">
  36. <span></span>
  37. <div></div>
  38. </div>
  39. <!--推荐列表容器-->
  40. <div class="list-container">
  41. <!--左侧主推-->
  42. <div class="list-left">
  43. <a class="novel-name" href="">
  44. <img src="<?php echo RESOURCES_PATH.$imgUrl;?>" alt="">
  45. <p><?php echo $name;?></p>
  46. </a>
  47. <p class="heat"><span></span><i><?php echo $focus;?></i>万人气</p>
  48. <p>
  49. <span><?php echo $author_name;?></span>
  50. <span><?php echo $typeName;?></span>
  51. </p>
  52. <p>
  53. <span><?php echo $wordNumber;?></span>
  54. <span><?php echo $status; ?></span>
  55. </p>
  56. <p><?php echo substr($description, 0, 200); ?></p>
  57. <a class="button-yd" href="book_index.php">点击阅读</a>
  58. </div>
  59. <!--中间推荐-顶部4个-->
  60. <a class="list-center-top" href="">
  61. <img src="resources/images/2020-1.jpg" alt="">
  62. <div>
  63. <span>神话:我的龙族能...</span>
  64. <span>不是月耀</span>
  65. <span>【2020年1月银票大赛参赛作品】一朝穿越,</span>
  66. </div>
  67. </a>
  68. <a class="list-center-top" href="">
  69. <img src="resources/images/2020-2.jpg" alt="">
  70. <div>
  71. <span>神话:我的龙族能...</span>
  72. <span>不是月耀</span>
  73. <span>【2020年1月银票大赛参赛作品】一朝穿越,</span>
  74. </div>
  75. </a>
  76. <a class="list-center-top" href="">
  77. <img src="resources/images/2020-3.jpg" alt="">
  78. <div>
  79. <span>神话:我的龙族能...</span>
  80. <span>不是月耀</span>
  81. <span>【2020年1月银票大赛参赛作品】一朝穿越,</span>
  82. </div>
  83. </a>
  84. <a class="list-center-top" href="">
  85. <img src="resources/images/2020-4.jpg" alt="">
  86. <div>
  87. <span>神话:我的龙族能...</span>
  88. <span>不是月耀</span>
  89. <span>【2020年1月银票大赛参赛作品】一朝穿越,</span>
  90. </div>
  91. </a>
  92. <!--中间推荐-底部4个-->
  93. <div class="list-center-bottom order1">
  94. <a href="">
  95. <span>我在万界猎杀怪兽</span>
  96. <p>热销火书</p>
  97. <p>玩吃鸡也能穿梭时空? 还要猎杀巨龙史矛革,怪兽之王哥斯拉,无敌浩克绿巨人…… 这特么什么玩意啊!</p>
  98. </a>
  99. </div>
  100. <div class="list-center-bottom order2">
  101. <a href="">
  102. <span>我在万界猎杀怪兽</span>
  103. <p>热销火书</p>
  104. <p>玩吃鸡也能穿梭时空? 还要猎杀巨龙史矛革,怪兽之王哥斯拉,无敌浩克绿巨人…… 这特么什么玩意啊!</p>
  105. </a>
  106. </div>
  107. <div class="list-center-bottom order3">
  108. <a href="">
  109. <span>我在万界猎杀怪兽</span>
  110. <p>热销火书</p>
  111. <p>玩吃鸡也能穿梭时空? 还要猎杀巨龙史矛革,怪兽之王哥斯拉,无敌浩克绿巨人…… 这特么什么玩意啊!</p>
  112. </a>
  113. </div>
  114. <div class="list-center-bottom order4">
  115. <a href="">
  116. <span>我在万界猎杀怪兽</span>
  117. <p>热销火书</p>
  118. <p>玩吃鸡也能穿梭时空? 还要猎杀巨龙史矛革,怪兽之王哥斯拉,无敌浩克绿巨人…… 这特么什么玩意啊!</p>
  119. </a>
  120. </div>
  121. <!--右侧主编推荐-->
  122. <div class="list-right">
  123. <div class="right-title">
  124. <i></i>
  125. <span>主编推荐</span>
  126. </div>
  127. <!--首位推荐-->
  128. <a class="right-first" href="">
  129. <img src="resources/images/right-list-1.jpg" alt="">
  130. <div>
  131. <p>
  132. <span class="type">[脑洞创意]</span>
  133. <span class="name">重生成蛇之</span>
  134. </p>
  135. <span class="author">水城秀才</span>
  136. </div>
  137. </a>
  138. <!--2-8 推荐-->
  139. <a class="right-item" href="">
  140. <div>
  141. <span class="type">[科幻末日]</span>
  142. <span class="name">最强末日狂徒</span>
  143. </div>
  144. <span class="author">水木云雨</span>
  145. </a>
  146. <a class="right-item" href="">
  147. <div>
  148. <span class="type">[科幻末日]</span>
  149. <span class="name">最强末日狂徒</span>
  150. </div>
  151. <span class="author">水木云雨</span>
  152. </a>
  153. <a class="right-item" href="">
  154. <div>
  155. <span class="type">[科幻末日]</span>
  156. <span class="name">最强末日狂徒</span>
  157. </div>
  158. <span class="author">水木云雨</span>
  159. </a>
  160. <a class="right-item" href="">
  161. <div>
  162. <span class="type">[科幻末日]</span>
  163. <span class="name">最强末日狂徒</span>
  164. </div>
  165. <span class="author">水木云雨</span>
  166. </a>
  167. <a class="right-item" href="">
  168. <div>
  169. <span class="type">[科幻末日]</span>
  170. <span class="name">最强末日狂徒</span>
  171. </div>
  172. <span class="author">水木云雨</span>
  173. </a>
  174. <a class="right-item" href="">
  175. <div>
  176. <span class="type">[科幻末日]</span>
  177. <span class="name">最强末日狂徒</span>
  178. </div>
  179. <span class="author">水木云雨</span>
  180. </a>
  181. <a class="right-item" href="">
  182. <div>
  183. <span class="type">[科幻末日]</span>
  184. <span class="name">最强末日狂徒</span>
  185. </div>
  186. <span class="author">水木云雨</span>
  187. </a>
  188. <a class="right-item" href="">
  189. <div>
  190. <span class="type">[科幻末日]</span>
  191. <span class="name">最强末日狂徒</span>
  192. </div>
  193. <span class="author">水木云雨</span>
  194. </a>
  195. <a class="right-item" href="">
  196. <div>
  197. <span class="type">[科幻末日]</span>
  198. <span class="name">最强末日狂徒</span>
  199. </div>
  200. <span class="author">水木云雨</span>
  201. </a>
  202. </div>
  203. </div>
  204. </div>

book_list.php-部分

  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * File name:book_lists.php
  5. * Description:网站作品库页面--书籍列表
  6. * User: Air15_2019
  7. * Date: 2020/1/14
  8. * Time: 10:21
  9. */
  10. // 使用include,引入配置文件config.php
  11. include __DIR__.'/includes/config.php';
  12. //频道首个项目
  13. $channelName=$tc_channelType[0]['channelName'];
  14. //说分类
  15. $novelType=$tc_novelType[0]['name'];
  16. //遍历对应频道的分类,储存在 $types[]的数组中
  17. $channel_id=1;
  18. foreach ($tc_novelType as $array_type){
  19. if($array_type['channelType_id']===$channel_id){
  20. $types[]=$array_type['name'];
  21. }
  22. }
  23. //作品状态
  24. $novelStatus=$tc_novelStatus[0]['statusName'];
  25. //作品上架状态
  26. $chargeType=$tc_chargeType[0]['chargeTypeName'];
  27. //作品字数分类
  28. $numberTypeName=$tc_numberType[0]['numberTypeName'];
  29. ?>
  30. <!DOCTYPE html>
  31. <html lang="en">
  32. <head>
  33. <meta charset="UTF-8">
  34. <title>塔读文学--作品库</title>
  35. <link rel="stylesheet" href="resources/css/book_list.css">
  36. </head>
  37. <body>
  38. <div class="page-booklist">
  39. <!--页面公共组件-头部导航-->
  40. <?php include __DIR__.'/includes/public_header.inc.php';?>
  41. <!--作品库页面主要内容-->
  42. <div class="booklist-container">
  43. <!--类型筛选列表-->
  44. <div class="book-type">
  45. <!--频道-->
  46. <div class="item channel">
  47. <span>频道</span>
  48. <a class="first-a" href=""><?php echo $channelName;?></a>
  49. <?php for ($i = 1; $i < count($tc_channelType); $i++): ?>
  50. <?php $channelName = $tc_channelType[$i]['channelName'];?>
  51. <a href=""><?php echo $channelName?></a>
  52. <?php endfor;?>
  53. </div>
  54. <!--分类-->
  55. <div class="item type">
  56. <span>分类</span>
  57. <a class="first-a" href=""><?php echo $novelType; ?></a>
  58. <?php foreach ($types as $type) :?>
  59. <a href=""><?php echo $type; ?></a>
  60. <?php endforeach; ?>
  61. </div>
  62. <!--状态-->
  63. <div class="item status">
  64. <span>状态</span>
  65. <a class="first-a" href=""><?php echo $novelStatus;?></a>
  66. <?php for ($i = 1; $i < count($tc_novelStatus); $i++): ?>
  67. <?php $novelStatus=$tc_novelStatus[$i]['statusName'];?>
  68. <a href=""><?php echo $novelStatus;?></a>
  69. <?php endfor;?>
  70. </div>
  71. <!--属性-是否收费-->
  72. <div class="item charge-type">
  73. <span>属性</span>
  74. <a class="first-a" href=""><?php echo $chargeType;?></a>
  75. <?php for ($i = 1; $i < count($tc_chargeType); $i++): ?>
  76. <?php $chargeType=$tc_chargeType[$i]['chargeTypeName'];?>
  77. <a href=""><?php echo $chargeType;?></a>
  78. <?php endfor;?>
  79. </div>
  80. <!--字数-->
  81. <div class="item number-words">
  82. <span>字数</span>
  83. <a class="first-a" href=""><?php echo $numberTypeName;?></a>
  84. <?php for ($i = 1; $i < count($tc_numberType); $i++): ?>
  85. <?php $numberTypeName=$tc_numberType[$i]['numberTypeName'];?>
  86. <a href=""><?php echo $numberTypeName;?></a>
  87. <?php endfor;?>
  88. </div>
  89. </div>
  90. <!--列表排序类型 tab行-->
  91. <div class="sorting-tab">
  92. <?php foreach ($tc_SortingType as $item):?>
  93. <?php $sortingName=$item['sortingName'];?>
  94. <a href=""><?php echo $sortingName;?></a>
  95. <?php endforeach;?>
  96. </div>

完整代码包下载

腾讯微云
链接:https://share.weiyun.com/5o2qoLe 密码:vfp6hb

Correcting teacher:天蓬老师天蓬老师

Correction status:qualified

Teacher's comments:看到了, 完成的相当不错, 看上去已经是一个可以上线的小项目了.... 完成这个小作业, 是不是对于动态网站的原理, 又有了新的认知
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post