博客列表 >PHP中文网移动端(简易)的站点模块化及数据使用函数封装调用--PHP培训线上班十期0110

PHP中文网移动端(简易)的站点模块化及数据使用函数封装调用--PHP培训线上班十期0110

高的PHP十期培训学习笔记
高的PHP十期培训学习笔记原创
2020年01月21日 14:01:19715浏览

页面结构

  • HTML代码
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>使用flex完成PHP中文网(移动端)的布局</title>
  6. <link rel="stylesheet" href="index.css">
  7. </head>
  8. <body>
  9. <!-- 轮播图-->
  10. <div class="banner">
  11. <img src="static/images/banner.jpg" alt="">
  12. </div>
  13. <!-- 导航菜单-->
  14. <nav>
  15. <ul>
  16. <li>
  17. <a href="">
  18. <img src="static/images/html.png" alt="">
  19. <span>网站首页</span>
  20. </a>
  21. </li>
  22. <li>
  23. <a href="">
  24. <img src="static/images/JavaScript.png" alt="">
  25. <span>最近更新</span>
  26. </a>
  27. </li>
  28. <li>
  29. <a href="">
  30. <img src="static/images/code.png" alt="">
  31. <span>文章</span>
  32. </a>
  33. </li>
  34. <li>
  35. <a href="">
  36. <img src="static/images/sql.png" alt="">
  37. <span>博文</span>
  38. </a>
  39. </li>
  40. </ul>
  41. </nav>
  42. <!--主体-->
  43. <main>
  44. <!--最新更新-->
  45. <div class="new">
  46. <h3>最新更新</h3>
  47. <div>
  48. <a href=""><img src="static/images/1.jpg" alt=""></a>
  49. <div>
  50. <a href="">2019python自学视频</a>
  51. <span>本课程适合想从零开始学习 Python 编程语言的开发人员。由浅入深的</span>
  52. </div>
  53. </div>
  54. <div>
  55. <a href=""><img src="static/images/2.jpg" alt=""></a>
  56. <div>
  57. <a href="">PHP开发免费公益直播课</a>
  58. <span>本课程适合想从零开始学习 Python 编程语言的开发人员。由浅入深的</span>
  59. </div>
  60. </div>
  61. <div>
  62. <a href=""><img src="static/images/3.jpg" alt=""></a>
  63. <div>
  64. <a href="">从零开始到WEB响应式布局</a>
  65. <span>本课程适合想从零开始学习 Python 编程语言的开发人员。由浅入深的</span>
  66. </div>
  67. </div>
  68. <div>
  69. <a href=""><img src="static/images/4.jpg" alt=""></a>
  70. <div>
  71. <a href="">PHP文件基础操作</a>
  72. <span>本课程适合想从零开始学习 Python 编程语言的开发人员。由浅入深的</span>
  73. </div>
  74. </div>
  75. </div>
  76. <!--文章-->
  77. <div class="article">
  78. <h3>文章</h3>
  79. <div>
  80. <div>
  81. <a href="">5个PHP开发者应该知道的Composer小技巧</a>
  82. <span>发布时间:2019-12-31</span>
  83. </div>
  84. <a href=""><img src="static/images/5.jpg" alt=""></a>
  85. </div>
  86. <div>
  87. <div>
  88. <a href="">解决PHP中Web程序中shell_exec()执行Shell脚本不成功问题</a>
  89. <span>发布时间:2019-12-31</span>
  90. </div>
  91. <a href=""><img src="static/images/6.jpg" alt=""></a>
  92. </div>
  93. <div>
  94. <div>
  95. <a href="">PHP执行Linux命令的两个有用的函数exec和shell_exec</a>
  96. <span>发布时间:2019-12-31</span>
  97. </div>
  98. <a href=""><img src="static/images/7.jpg" alt=""></a>
  99. </div>
  100. <div>
  101. <div>
  102. <a href="">php实现利用expat方式解析xml文件</a>
  103. <span>发布时间:2019-12-31</span>
  104. </div>
  105. <a href=""><img src="static/images/8.jpg" alt=""></a>
  106. </div>
  107. </div>
  108. <!-- 博文-->
  109. <div class="article">
  110. <h3>博文</h3>
  111. <div>
  112. <div>
  113. <a href="">5个PHP开发者应该知道的Composer小技巧</a>
  114. <span>发布时间:2019-12-31</span>
  115. </div>
  116. <a href=""><img src="static/images/5.jpg" alt=""></a>
  117. </div>
  118. <div>
  119. <div>
  120. <a href="">解决PHP中Web程序中shell_exec()执行Shell脚本不成功问题</a>
  121. <span>发布时间:2019-12-31</span>
  122. </div>
  123. <a href=""><img src="static/images/6.jpg" alt=""></a>
  124. </div>
  125. <div>
  126. <div>
  127. <a href="">PHP执行Linux命令的两个有用的函数exec和shell_exec</a>
  128. <span>发布时间:2019-12-31</span>
  129. </div>
  130. <a href=""><img src="static/images/7.jpg" alt=""></a>
  131. </div>
  132. <div>
  133. <div>
  134. <a href="">php实现利用expat方式解析xml文件</a>
  135. <span>发布时间:2019-12-31</span>
  136. </div>
  137. <a href=""><img src="static/images/8.jpg" alt=""></a>
  138. </div>
  139. </div>
  140. </main>
  141. <?php include __DIR__ . '/inc/public_footer.php' ?>

配置网站数据信息

  1. <?php
  2. // 图片路径
  3. const STATIC_PATH = 'static/';
  4. // 栏目导航
  5. $categories = [
  6. ['id' => 1, 'name' => '文章', 'url' => 'list.php?cid=1'],
  7. ['id' => 2, 'name' => '博客', 'url' => 'list.php?cid=2'],
  8. ];
  9. // 模块导航
  10. $modules = [
  11. ['id' => 1, 'name' => '视频', 'url' => 'module.php?cid=1'],
  12. ['id' => 2, 'name' => '社区', 'url' => 'module.php?cid=2'],
  13. ['id' => 3, 'name' => '我的', 'url' => 'module.php?mid=3'],
  14. ];
  15. // 文章信息
  16. $goods = [
  17. [
  18. 'id' => 1,
  19. 'name' => '浅谈PHP程序员如何修炼?',
  20. 'pic'=> 'images/1.jpg',
  21. 'time' => '2020-01-10',
  22. 'url'=> 'detail.php?id=1',
  23. 'text'=>'本篇文章给大家带来的内容是浅谈PHP程序员如何修炼?有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。',
  24. 'detail'=>'在过去的一年,我见过太多太多PHP的项目在重构过程中慢慢引进Laravel,并将Laravel作为项目首选开发框架。
  25. 当然我也是如此,作为Laravel框架的早期使用者,我由衷的感觉Laravel在近些年内的地位还是很稳定的。
  26. 有些人要说了,Laravel框架太重、运行速度太慢、blblblbl的各种原因,我只能说,羊毛出在羊身上,Laravel是组件化开发早期框架,感觉哪个慢就不加载哪个呗,哪个重就删掉不就行了,一天天不找解决方案,只会抛出问题,难道Laravel框架的开发者会按照小众个人意愿去改嘛
  27. 其他的框架我很少了解,在这里就着重讲解下Laravel
  28. 框架本身没什么好说的,讲些Laravel社区生态相关的事。',
  29. 'cid' => 1,
  30. ],
  31. [
  32. 'id' => 2,
  33. 'name' => '利用php实现验证邮箱格式是否正确',
  34. 'pic'=> 'images/2.jpg',
  35. 'time' => '2020-01-10',
  36. 'url'=> 'detail.php?id=2',
  37. 'text'=>'利用php实现验证邮箱格式是否正确的详细内容,更多请关注php中文网其它相关文章!',
  38. 'detail'=>'参数介绍:
  39. variable,(必需)规定要过滤的变量。
  40. filter,(可选)规定要使用的过滤器的 ID。默认是 FILTER_SANITIZE_STRING。
  41. options,(可选)规定一个包含标志/选项的关联数组或者一个单一的标志/选项。检查每个过滤器可能的标志和选项。',
  42. 'cid' => 2,
  43. ],
  44. [
  45. 'id' => 3,
  46. 'name' => 'php中文网一份年终汇报',
  47. 'pic'=> 'images/3.jpg',
  48. 'time' => '2020-01-10',
  49. 'url'=> 'detail.php?id=3',
  50. 'text'=>'望过去,展未来,2020新起点!在已过去的2019年,感谢大家的理解与信任,支持与陪伴!
  51. 新年之际,猪哥携php中文网以及phpStudy所有同事,祝广大网友新年快乐!身体健康,生活美满!',
  52. 'detail'=>'尊敬的各位网友,php中文网和phpStudy定于2020年1月21日——2020年1月30日休假,1月31日(初七)正常上班。php中文网线上班学员为2月10号(正月十七)复课。
  53. 放假期间微信公众号文章将停更,网站技术文章会有正常更新发布,如有疑问请各大群内咨询群主,谢谢!',
  54. 'cid' => 1,
  55. ],
  56. [
  57. 'id' => 4,
  58. 'name' => '利用百度快照变通下载安装 WordPress 插件',
  59. 'pic'=> 'images/4.jpg',
  60. 'time' => '2020-01-10',
  61. 'url'=> 'detail.php?id=4',
  62. 'text'=>'鉴于国内已两个多月无法正常访问 WordPress 官网的情况,下载安装更新 WordPress 插件成了问题,这里提供一个小技巧,帮你解决一下燃眉之急。',
  63. 'detail'=>'其实很简单,例如要下载比较常用的文章点击统计插件WP-PostViews,可以百度搜索“WP-PostViews”,找到官网插件下载页面的链接,点击“百度快照”,在快照页面,找到“Download”按钮,右键复制链接,然后用下载工具比如迅雷下载,最后WP后台上传安装或者FTP覆盖更新即可。
  64. 注:由于快照并不是每天更新,如果某插件更新频繁,下载的插件可能并不是最新版本的。',
  65. 'cid' => 2,
  66. ],
  67. [
  68. 'id' => 5,
  69. 'name' => 'ThinkPHP6 任意文件操作漏洞分析',
  70. 'pic'=> 'images/5.jpg',
  71. 'time' => '2020-01-10',
  72. 'url'=> 'detail.php?id=5',
  73. 'text'=>'2020年1月10日,ThinkPHP团队发布一个补丁更新,修复了一处由不安全的SessionId导致的任意文件操作漏洞。',
  74. 'detail'=>'写入的文件名可控,那么写入的内容是否可控呢?分析发现,写入的内容就是创建session使用的内容。但是session的创建是由实际的后端业务逻辑来决定的,而默认环境下并没有创建session。因此,默认环境下无法做到任意文件写入。',
  75. 'cid' => 1,
  76. ],
  77. [
  78. 'id' => 6,
  79. 'name' => 'CentOS6.8下安装phpMyAdmin的方法',
  80. 'pic'=> 'images/6.jpg',
  81. 'time' => '2020-01-10',
  82. 'url'=> 'detail.php?id=6',
  83. 'text'=>'我的IP地址访问目录是在/var/www 下,所以我就将phpMyaAdmin放到www目录下',
  84. 'detail'=>'修改名字:mv phpMyAdmin-4.8.3-all-languages.tar.gz phpMyAdmin
  85. 进入phpMyAdmin:cd phpMyAdmin
  86. 复制并重复明命配置文件:cp config.sample.inc.php config.inc.php
  87. 重启服务器(我安装的是nginx):service nginx restart
  88. 重启MySql:service mysqld restart
  89. 重启PHP:service php-fpm restart
  90. 在浏览器地址栏里输入ip/phpMyAdmin:“192.168.71.131/phpMyAdmin”;(我的是虚拟机)
  91. 用户名默认为root,密码就是数据库密码',
  92. 'cid' => 2,
  93. ],
  94. [
  95. 'id' => 7,
  96. 'name' => '通俗易懂理解PHP依赖注入容器',
  97. 'pic'=> 'images/7.jpg',
  98. 'time' => '2020-01-10',
  99. 'url'=> 'detail.php?id=7',
  100. 'text'=>'这也是很多通用设计模式的宗旨,就是把分散在各处的同一个功能的代码汇聚到一起',
  101. 'detail'=>'一个好的代码结构设计一定是松耦合的,这也是很多通用设计模式的宗旨,就是把分散在各处的同一个功能的代码汇聚到一起,形成一个模块,然后在不同模块之间通过一些细小的、明确的渠道进行沟通。',
  102. 'cid' => 1,
  103. ],
  104. [
  105. 'id' => 8,
  106. 'name' => '8 个 Laravel 模型时间戳使用技巧',
  107. 'pic'=> 'images/8.jpg',
  108. 'time' => '2020-01-10',
  109. 'url'=> 'detail.php?id=8',
  110. 'text'=>'默认情况下,Laravel Eloquent 模型默认数据表有 created_at 和 updated_at 两个字段。',
  111. 'detail'=>'如果数据表没有这两个字段,保存数据时 Model::create($arrayOfValues); —— 会看到 SQL error。Laravel 在自动填充 created_at / updated_at 的时候,无法找到这两个字段。
  112. 禁用自动填充时间戳,只需要在 Eloquent Model 添加上一个属性:',
  113. 'cid' => 2,
  114. ],
  115. ];

首先完成栏目模块的循环

  1. <?php foreach ($categories as $category) : ?>
  2. <div class="article">
  3. <h3>文章</h3>
  4. <div>
  5. <div>
  6. <a href="">5个PHP开发者应该知道的Composer小技巧</a>
  7. <span>发布时间:2019-12-31</span>
  8. </div>
  9. <a href=""><img src="static/images/5.jpg" alt=""></a>
  10. </div>
  11. </div>
  12. <?php endforeach ?>

完成数据调用

  1. <div class="article">
  2. <h3><?php echo $category['name'] ?></h3>
  3. <?php foreach ($articles as $article) : ?>
  4. <div>
  5. <div>
  6. <a href="<?php echo $article['url'] ?>"><?php echo $article['name'] ?></a>
  7. <span>发布时间:<?php echo $article['time'] ?></span>
  8. </div>
  9. <a href=""><img src="<?php echo STATIC_PATH . $article['pic'] ?>" alt=""></a>
  10. </div>
  11. <?php endforeach ?>
  12. </div>


由上图中可以看出已经完成了数据配置文件中配置的文章信息,但信息没有分类显示,所以这里需要处理下,让各栏目调用各栏目 的信息

  1. <!-- 使用if判断信息所属栏目,并只输出当前栏目的信息-->
  2. <?php if ($category['id'] === $article['cid']) : ?>
  3. <div>
  4. <div>
  5. <a href="<?php echo $article['url'] ?>"><?php echo $article['name'] ?></a>
  6. <span>发布时间:<?php echo $article['time'] ?></span>
  7. </div>
  8. <a href=""><img src="<?php echo STATIC_PATH . $article['pic'] ?>" alt=""></a>
  9. </div>
  10. <?php endif ?>

最新文章的获取方法:

这里的最新文章调用的是“文章”和”博文“两个栏目中的文章,并且随机调用
首先我们需要确定调用哪些文章(在信息数组中获得信息的KEY值)

  1. <?php
  2. //获取文章数组中的随机文章的键名
  3. //array_rand($arr,int):随机获取数组($arr)中int个键名
  4. $newskeys = array_rand($articles,4);
  5. //根据获得的键名获得文章信息,并创建一个新的数组
  6. foreach ($newskeys as $key) {
  7. $news[] = $articles[$key];
  8. }
  9. ?>
  10. <main>
  11. <!--最新更新-->
  12. <div class="new">
  13. <h3>最新更新</h3>
  14. <?php foreach ($news as $new) : ?>
  15. <div>
  16. <a href="<?php echo $new['url'] ?>"><img src="<?php echo STATIC_PATH . $new['pic'] ?>" alt=""></a>
  17. <div>
  18. <a href=""><?php echo $new['name'] ?></a>
  19. <span><?php echo $new['text'] ?></span>
  20. </div>
  21. </div>
  22. <?php endforeach ?>
  23. </div>


刷新一次查看效果

栏目导航菜单的处理

  1. <?php foreach ($categories as $category) : ?>
  2. <li>
  3. <a href="<?php echo $category['url'] ?>">
  4. <img src="<?php echo STATIC_PATH . $category['pic'] ?>" alt="">
  5. <span><?php echo $category['name'] ?></span>
  6. </a>
  7. </li>
  8. <?php endforeach ?>
  1. // 栏目导航
  2. $categories = [
  3. ['id' => 1, 'name' => '文章55', 'pic' =>'images/code.png','url' => 'list.php?cid=1'],
  4. ['id' => 2, 'name' => '博客', 'pic' =>'images/sql.png','url' => 'list.php?cid=2'],
  5. ];

底部菜单的处理

  1. <a href="index.php" >首页</a>
  2. <?php foreach ($modules as $module) : ?>
  3. <a href="<?php echo $module['url'] ?>" ><?php echo $module['name'] ?></a>
  4. <?php endforeach ?>

列表页

  1. <?php include __DIR__ . '/inc/public_header.php' ?>
  2. <?php
  3. //通过浏览器链接传递的参数获取栏目ID
  4. $cid = $_GET['cid'];
  5. //根据栏目ID获取栏目名称
  6. foreach ($categories as $category) {
  7. // 传递过来的栏目ID的数据类型为字符串需要转为整数型才可以调用数组内的信息
  8. // 使用intval(),将栏目id数值型字符串强制临时转为整数
  9. if ($category['id'] === intval($cid)) {
  10. $cateName = $category['name'];
  11. }
  12. }
  13. //根据栏目id, 获取对应的文章信息
  14. foreach ($articles as $article) {
  15. if ($article['cid'] === intval($cid)) {
  16. $news[] = $article;
  17. }
  18. }
  19. ?>
  20. <main>
  21. <!--文章-->
  22. <div class="article">
  23. <h3><?php echo $cateName ?></h3>
  24. <?php foreach ($news as $article) : ?>
  25. <div>
  26. <div>
  27. <a href="<?php echo $article['url'] ?>"><?php echo $article['name'] ?></a>
  28. <span>发布时间:<?php echo $article['time'] ?></span>
  29. </div>
  30. <a href=""><img src="<?php echo STATIC_PATH . $article['pic'] ?>" alt=""></a>
  31. </div>
  32. <?php endforeach ?>
  33. </div>
  34. </main>
  35. <?php include __DIR__ . '/inc/public_footer.php' ?>

内容页

  1. <?php
  2. //通过浏览器链接传递的参数获取信息ID
  3. $id = $_GET['id'];
  4. //根据信息ID获取信息内容
  5. foreach ($articles as $article) {
  6. if ($article['id'] === intval($id)) {
  7. $news = $article;
  8. }
  9. }
  10. ?>
  11. <main>
  12. <!--文章-->
  13. <div class="article">
  14. <div>
  15. <div>
  16. <a href="<?php echo $news['url'] ?>"><?php echo $news['name'] ?></a>
  17. <span>发布时间:<?php echo $news['time'] ?></span>
  18. </div>
  19. <a href=""><img src="<?php echo STATIC_PATH . $news['pic'] ?>" alt=""></a>
  20. </div>
  21. <p>
  22. <?php echo $news['detail'] ?>
  23. </p>
  24. </div>

使用函数封装上面的信息,达到数据复用的

首页—获得最新文章

  1. <?php
  2. function getnews($articles,$num)
  3. {
  4. $newskeys = array_rand($articles,4);
  5. foreach ($newskeys as $key) {
  6. $news[] = $articles[$key];
  7. }
  8. return $news;
  9. }
  10. $news = getnews($articles,4)
  11. ?>

列表页—-获取栏目名称和栏目数据

  1. // 获取栏目名称
  2. function getCateName($cid, $categories)
  3. {
  4. foreach ($categories as $category) {
  5. // 使用intval(),将栏目id数值型字符串强制临时转为整数
  6. if ($category['id'] === intval($cid)) {
  7. $cateName = $category['name'];
  8. }
  9. }
  10. return $cateName;
  11. }
  12. $cateName = getCateName($cid, $categories);
  13. // 获取该栏目所有商品
  14. function getArticle($cid, $articles)
  15. {
  16. foreach ($articles as $article) {
  17. if ($article['cid'] === intval($cid)) {
  18. $news[] = $article;
  19. }
  20. }
  21. return $news;
  22. }
  23. $news = getArticle($cid, $articles);

内容页—-获取栏目名称和栏目数据

  1. function getarticle($id, $articles)
  2. {
  3. foreach ($articles as $article) {
  4. if ($article['id'] === intval($id)) {
  5. $news = $article;
  6. }
  7. }
  8. return $news ;
  9. }
  10. $news = getarticle($id, $articles);

知识点:

include | include_once:包含一个外部文件到页面,失败时不会终止程序,加上once仅能包含一次,防止重复加载包含

require |require_once:包含一个外部文件到页面,失败时会终止程序,加上once仅能包含一次,防止重复加载包含
array_rand($arr,int);随机获取数组中int个键名
__DIR__获取文件所在文件的绝对路径
intval(),将数值型字符串强制临时转为整数
die;调试时使用,此代码后的内容不解析

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