博客列表 >站点模块化与数据动态(复刻“塔读文学PC站”)--PHP培训十期线上班

站点模块化与数据动态(复刻“塔读文学PC站”)--PHP培训十期线上班

Miss灬懒虫
Miss灬懒虫原创
2020年01月16日 00:40:461268浏览

站点模块化与数据动态(复刻“塔读文学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

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议