Correction status:Uncorrected
Teacher's comments:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>使用flex完成PHP中文网(移动端)的布局</title>
<link rel="stylesheet" href="index.css">
</head>
<body>
<!-- 轮播图-->
<div class="banner">
<img src="static/images/banner.jpg" alt="">
</div>
<!-- 导航菜单-->
<nav>
<ul>
<li>
<a href="">
<img src="static/images/html.png" alt="">
<span>网站首页</span>
</a>
</li>
<li>
<a href="">
<img src="static/images/JavaScript.png" alt="">
<span>最近更新</span>
</a>
</li>
<li>
<a href="">
<img src="static/images/code.png" alt="">
<span>文章</span>
</a>
</li>
<li>
<a href="">
<img src="static/images/sql.png" alt="">
<span>博文</span>
</a>
</li>
</ul>
</nav>
<!--主体-->
<main>
<!--最新更新-->
<div class="new">
<h3>最新更新</h3>
<div>
<a href=""><img src="static/images/1.jpg" alt=""></a>
<div>
<a href="">2019python自学视频</a>
<span>本课程适合想从零开始学习 Python 编程语言的开发人员。由浅入深的</span>
</div>
</div>
<div>
<a href=""><img src="static/images/2.jpg" alt=""></a>
<div>
<a href="">PHP开发免费公益直播课</a>
<span>本课程适合想从零开始学习 Python 编程语言的开发人员。由浅入深的</span>
</div>
</div>
<div>
<a href=""><img src="static/images/3.jpg" alt=""></a>
<div>
<a href="">从零开始到WEB响应式布局</a>
<span>本课程适合想从零开始学习 Python 编程语言的开发人员。由浅入深的</span>
</div>
</div>
<div>
<a href=""><img src="static/images/4.jpg" alt=""></a>
<div>
<a href="">PHP文件基础操作</a>
<span>本课程适合想从零开始学习 Python 编程语言的开发人员。由浅入深的</span>
</div>
</div>
</div>
<!--文章-->
<div class="article">
<h3>文章</h3>
<div>
<div>
<a href="">5个PHP开发者应该知道的Composer小技巧</a>
<span>发布时间:2019-12-31</span>
</div>
<a href=""><img src="static/images/5.jpg" alt=""></a>
</div>
<div>
<div>
<a href="">解决PHP中Web程序中shell_exec()执行Shell脚本不成功问题</a>
<span>发布时间:2019-12-31</span>
</div>
<a href=""><img src="static/images/6.jpg" alt=""></a>
</div>
<div>
<div>
<a href="">PHP执行Linux命令的两个有用的函数exec和shell_exec</a>
<span>发布时间:2019-12-31</span>
</div>
<a href=""><img src="static/images/7.jpg" alt=""></a>
</div>
<div>
<div>
<a href="">php实现利用expat方式解析xml文件</a>
<span>发布时间:2019-12-31</span>
</div>
<a href=""><img src="static/images/8.jpg" alt=""></a>
</div>
</div>
<!-- 博文-->
<div class="article">
<h3>博文</h3>
<div>
<div>
<a href="">5个PHP开发者应该知道的Composer小技巧</a>
<span>发布时间:2019-12-31</span>
</div>
<a href=""><img src="static/images/5.jpg" alt=""></a>
</div>
<div>
<div>
<a href="">解决PHP中Web程序中shell_exec()执行Shell脚本不成功问题</a>
<span>发布时间:2019-12-31</span>
</div>
<a href=""><img src="static/images/6.jpg" alt=""></a>
</div>
<div>
<div>
<a href="">PHP执行Linux命令的两个有用的函数exec和shell_exec</a>
<span>发布时间:2019-12-31</span>
</div>
<a href=""><img src="static/images/7.jpg" alt=""></a>
</div>
<div>
<div>
<a href="">php实现利用expat方式解析xml文件</a>
<span>发布时间:2019-12-31</span>
</div>
<a href=""><img src="static/images/8.jpg" alt=""></a>
</div>
</div>
</main>
<?php include __DIR__ . '/inc/public_footer.php' ?>
<?php
// 图片路径
const STATIC_PATH = 'static/';
// 栏目导航
$categories = [
['id' => 1, 'name' => '文章', 'url' => 'list.php?cid=1'],
['id' => 2, 'name' => '博客', 'url' => 'list.php?cid=2'],
];
// 模块导航
$modules = [
['id' => 1, 'name' => '视频', 'url' => 'module.php?cid=1'],
['id' => 2, 'name' => '社区', 'url' => 'module.php?cid=2'],
['id' => 3, 'name' => '我的', 'url' => 'module.php?mid=3'],
];
// 文章信息
$goods = [
[
'id' => 1,
'name' => '浅谈PHP程序员如何修炼?',
'pic'=> 'images/1.jpg',
'time' => '2020-01-10',
'url'=> 'detail.php?id=1',
'text'=>'本篇文章给大家带来的内容是浅谈PHP程序员如何修炼?有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。',
'detail'=>'在过去的一年,我见过太多太多PHP的项目在重构过程中慢慢引进Laravel,并将Laravel作为项目首选开发框架。
当然我也是如此,作为Laravel框架的早期使用者,我由衷的感觉Laravel在近些年内的地位还是很稳定的。
有些人要说了,Laravel框架太重、运行速度太慢、blblblbl的各种原因,我只能说,羊毛出在羊身上,Laravel是组件化开发早期框架,感觉哪个慢就不加载哪个呗,哪个重就删掉不就行了,一天天不找解决方案,只会抛出问题,难道Laravel框架的开发者会按照小众个人意愿去改嘛
其他的框架我很少了解,在这里就着重讲解下Laravel
框架本身没什么好说的,讲些Laravel社区生态相关的事。',
'cid' => 1,
],
[
'id' => 2,
'name' => '利用php实现验证邮箱格式是否正确',
'pic'=> 'images/2.jpg',
'time' => '2020-01-10',
'url'=> 'detail.php?id=2',
'text'=>'利用php实现验证邮箱格式是否正确的详细内容,更多请关注php中文网其它相关文章!',
'detail'=>'参数介绍:
variable,(必需)规定要过滤的变量。
filter,(可选)规定要使用的过滤器的 ID。默认是 FILTER_SANITIZE_STRING。
options,(可选)规定一个包含标志/选项的关联数组或者一个单一的标志/选项。检查每个过滤器可能的标志和选项。',
'cid' => 2,
],
[
'id' => 3,
'name' => 'php中文网一份年终汇报',
'pic'=> 'images/3.jpg',
'time' => '2020-01-10',
'url'=> 'detail.php?id=3',
'text'=>'望过去,展未来,2020新起点!在已过去的2019年,感谢大家的理解与信任,支持与陪伴!
新年之际,猪哥携php中文网以及phpStudy所有同事,祝广大网友新年快乐!身体健康,生活美满!',
'detail'=>'尊敬的各位网友,php中文网和phpStudy定于2020年1月21日——2020年1月30日休假,1月31日(初七)正常上班。php中文网线上班学员为2月10号(正月十七)复课。
放假期间微信公众号文章将停更,网站技术文章会有正常更新发布,如有疑问请各大群内咨询群主,谢谢!',
'cid' => 1,
],
[
'id' => 4,
'name' => '利用百度快照变通下载安装 WordPress 插件',
'pic'=> 'images/4.jpg',
'time' => '2020-01-10',
'url'=> 'detail.php?id=4',
'text'=>'鉴于国内已两个多月无法正常访问 WordPress 官网的情况,下载安装更新 WordPress 插件成了问题,这里提供一个小技巧,帮你解决一下燃眉之急。',
'detail'=>'其实很简单,例如要下载比较常用的文章点击统计插件WP-PostViews,可以百度搜索“WP-PostViews”,找到官网插件下载页面的链接,点击“百度快照”,在快照页面,找到“Download”按钮,右键复制链接,然后用下载工具比如迅雷下载,最后WP后台上传安装或者FTP覆盖更新即可。
注:由于快照并不是每天更新,如果某插件更新频繁,下载的插件可能并不是最新版本的。',
'cid' => 2,
],
[
'id' => 5,
'name' => 'ThinkPHP6 任意文件操作漏洞分析',
'pic'=> 'images/5.jpg',
'time' => '2020-01-10',
'url'=> 'detail.php?id=5',
'text'=>'2020年1月10日,ThinkPHP团队发布一个补丁更新,修复了一处由不安全的SessionId导致的任意文件操作漏洞。',
'detail'=>'写入的文件名可控,那么写入的内容是否可控呢?分析发现,写入的内容就是创建session使用的内容。但是session的创建是由实际的后端业务逻辑来决定的,而默认环境下并没有创建session。因此,默认环境下无法做到任意文件写入。',
'cid' => 1,
],
[
'id' => 6,
'name' => 'CentOS6.8下安装phpMyAdmin的方法',
'pic'=> 'images/6.jpg',
'time' => '2020-01-10',
'url'=> 'detail.php?id=6',
'text'=>'我的IP地址访问目录是在/var/www 下,所以我就将phpMyaAdmin放到www目录下',
'detail'=>'修改名字:mv phpMyAdmin-4.8.3-all-languages.tar.gz phpMyAdmin
进入phpMyAdmin:cd phpMyAdmin
复制并重复明命配置文件:cp config.sample.inc.php config.inc.php
重启服务器(我安装的是nginx):service nginx restart
重启MySql:service mysqld restart
重启PHP:service php-fpm restart
在浏览器地址栏里输入ip/phpMyAdmin:“192.168.71.131/phpMyAdmin”;(我的是虚拟机)
用户名默认为root,密码就是数据库密码',
'cid' => 2,
],
[
'id' => 7,
'name' => '通俗易懂理解PHP依赖注入容器',
'pic'=> 'images/7.jpg',
'time' => '2020-01-10',
'url'=> 'detail.php?id=7',
'text'=>'这也是很多通用设计模式的宗旨,就是把分散在各处的同一个功能的代码汇聚到一起',
'detail'=>'一个好的代码结构设计一定是松耦合的,这也是很多通用设计模式的宗旨,就是把分散在各处的同一个功能的代码汇聚到一起,形成一个模块,然后在不同模块之间通过一些细小的、明确的渠道进行沟通。',
'cid' => 1,
],
[
'id' => 8,
'name' => '8 个 Laravel 模型时间戳使用技巧',
'pic'=> 'images/8.jpg',
'time' => '2020-01-10',
'url'=> 'detail.php?id=8',
'text'=>'默认情况下,Laravel Eloquent 模型默认数据表有 created_at 和 updated_at 两个字段。',
'detail'=>'如果数据表没有这两个字段,保存数据时 Model::create($arrayOfValues); —— 会看到 SQL error。Laravel 在自动填充 created_at / updated_at 的时候,无法找到这两个字段。
禁用自动填充时间戳,只需要在 Eloquent Model 添加上一个属性:',
'cid' => 2,
],
];
<?php foreach ($categories as $category) : ?>
<div class="article">
<h3>文章</h3>
<div>
<div>
<a href="">5个PHP开发者应该知道的Composer小技巧</a>
<span>发布时间:2019-12-31</span>
</div>
<a href=""><img src="static/images/5.jpg" alt=""></a>
</div>
</div>
<?php endforeach ?>
<div class="article">
<h3><?php echo $category['name'] ?></h3>
<?php foreach ($articles as $article) : ?>
<div>
<div>
<a href="<?php echo $article['url'] ?>"><?php echo $article['name'] ?></a>
<span>发布时间:<?php echo $article['time'] ?></span>
</div>
<a href=""><img src="<?php echo STATIC_PATH . $article['pic'] ?>" alt=""></a>
</div>
<?php endforeach ?>
</div>
由上图中可以看出已经完成了数据配置文件中配置的文章信息,但信息没有分类显示,所以这里需要处理下,让各栏目调用各栏目 的信息
<!-- 使用if判断信息所属栏目,并只输出当前栏目的信息-->
<?php if ($category['id'] === $article['cid']) : ?>
<div>
<div>
<a href="<?php echo $article['url'] ?>"><?php echo $article['name'] ?></a>
<span>发布时间:<?php echo $article['time'] ?></span>
</div>
<a href=""><img src="<?php echo STATIC_PATH . $article['pic'] ?>" alt=""></a>
</div>
<?php endif ?>
这里的最新文章调用的是“文章”和”博文“两个栏目中的文章,并且随机调用
首先我们需要确定调用哪些文章(在信息数组中获得信息的KEY值)
<?php
//获取文章数组中的随机文章的键名
//array_rand($arr,int):随机获取数组($arr)中int个键名
$newskeys = array_rand($articles,4);
//根据获得的键名获得文章信息,并创建一个新的数组
foreach ($newskeys as $key) {
$news[] = $articles[$key];
}
?>
<main>
<!--最新更新-->
<div class="new">
<h3>最新更新</h3>
<?php foreach ($news as $new) : ?>
<div>
<a href="<?php echo $new['url'] ?>"><img src="<?php echo STATIC_PATH . $new['pic'] ?>" alt=""></a>
<div>
<a href=""><?php echo $new['name'] ?></a>
<span><?php echo $new['text'] ?></span>
</div>
</div>
<?php endforeach ?>
</div>
刷新一次查看效果
<?php foreach ($categories as $category) : ?>
<li>
<a href="<?php echo $category['url'] ?>">
<img src="<?php echo STATIC_PATH . $category['pic'] ?>" alt="">
<span><?php echo $category['name'] ?></span>
</a>
</li>
<?php endforeach ?>
// 栏目导航
$categories = [
['id' => 1, 'name' => '文章55', 'pic' =>'images/code.png','url' => 'list.php?cid=1'],
['id' => 2, 'name' => '博客', 'pic' =>'images/sql.png','url' => 'list.php?cid=2'],
];
<a href="index.php" >首页</a>
<?php foreach ($modules as $module) : ?>
<a href="<?php echo $module['url'] ?>" ><?php echo $module['name'] ?></a>
<?php endforeach ?>
<?php include __DIR__ . '/inc/public_header.php' ?>
<?php
//通过浏览器链接传递的参数获取栏目ID
$cid = $_GET['cid'];
//根据栏目ID获取栏目名称
foreach ($categories as $category) {
// 传递过来的栏目ID的数据类型为字符串需要转为整数型才可以调用数组内的信息
// 使用intval(),将栏目id数值型字符串强制临时转为整数
if ($category['id'] === intval($cid)) {
$cateName = $category['name'];
}
}
//根据栏目id, 获取对应的文章信息
foreach ($articles as $article) {
if ($article['cid'] === intval($cid)) {
$news[] = $article;
}
}
?>
<main>
<!--文章-->
<div class="article">
<h3><?php echo $cateName ?></h3>
<?php foreach ($news as $article) : ?>
<div>
<div>
<a href="<?php echo $article['url'] ?>"><?php echo $article['name'] ?></a>
<span>发布时间:<?php echo $article['time'] ?></span>
</div>
<a href=""><img src="<?php echo STATIC_PATH . $article['pic'] ?>" alt=""></a>
</div>
<?php endforeach ?>
</div>
</main>
<?php include __DIR__ . '/inc/public_footer.php' ?>
<?php
//通过浏览器链接传递的参数获取信息ID
$id = $_GET['id'];
//根据信息ID获取信息内容
foreach ($articles as $article) {
if ($article['id'] === intval($id)) {
$news = $article;
}
}
?>
<main>
<!--文章-->
<div class="article">
<div>
<div>
<a href="<?php echo $news['url'] ?>"><?php echo $news['name'] ?></a>
<span>发布时间:<?php echo $news['time'] ?></span>
</div>
<a href=""><img src="<?php echo STATIC_PATH . $news['pic'] ?>" alt=""></a>
</div>
<p>
<?php echo $news['detail'] ?>
</p>
</div>
<?php
function getnews($articles,$num)
{
$newskeys = array_rand($articles,4);
foreach ($newskeys as $key) {
$news[] = $articles[$key];
}
return $news;
}
$news = getnews($articles,4)
?>
// 获取栏目名称
function getCateName($cid, $categories)
{
foreach ($categories as $category) {
// 使用intval(),将栏目id数值型字符串强制临时转为整数
if ($category['id'] === intval($cid)) {
$cateName = $category['name'];
}
}
return $cateName;
}
$cateName = getCateName($cid, $categories);
// 获取该栏目所有商品
function getArticle($cid, $articles)
{
foreach ($articles as $article) {
if ($article['cid'] === intval($cid)) {
$news[] = $article;
}
}
return $news;
}
$news = getArticle($cid, $articles);
function getarticle($id, $articles)
{
foreach ($articles as $article) {
if ($article['id'] === intval($id)) {
$news = $article;
}
}
return $news ;
}
$news = getarticle($id, $articles);
include
| include_once
:包含一个外部文件到页面,失败时不会终止程序,加上once仅能包含一次,防止重复加载包含
require
|require_once
:包含一个外部文件到页面,失败时会终止程序,加上once仅能包含一次,防止重复加载包含array_rand($arr,int)
;随机获取数组中int个键名__DIR__
获取文件所在文件的绝对路径intval()
,将数值型字符串强制临时转为整数die;
调试时使用,此代码后的内容不解析