Blogger Information
Blog 25
fans 1
comment 1
visits 20468
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
PHP中文网移动端(简易)的站点模块化及数据使用函数封装调用--PHP培训线上班十期0110
高的PHP十期培训学习笔记
Original
712 people have browsed it

页面结构

  • 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;调试时使用,此代码后的内容不解析

Correction status:Uncorrected

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