PHP:【ThinkPHP】=>视图的XML 标签;请求Request类; 数据库链式操作 ;[博客实战]分类和搜索功能完成;
一.视图标签
标签类型 | 描述 |
---|---|
普通标签 | 主要用于输出变量、函数过滤和做一些基本的运算操作 |
XML 标签 | 也称为标签库标签,主要完成一些逻辑判断、控制和循环输出,并且可扩展 |
①普通标签 主要用于输出变量、函数过滤和做一些基本的运算操作
- 运算符
运算符 | 示例 |
---|---|
+ | {$a+$b} |
- | {$a-$b} |
* | {$a*$b} |
/ | {$a/$b} |
% | {$a%$b} |
++ | {$a++} 或 {++$a} |
– | {$a–} 或{–$a} |
综合运算 | {$a+$b*10+$c} |
三元运算符 | {$a==$b ? ‘yes’ : ‘no’} |
- 模版函数
方法 | 描述 |
---|---|
date | 日期格式化(支持各种时间类型) |
format | 字符串格式化 |
upper | 转换为大写 |
lower | 转换为小写 |
first | 输出数组的第一个元素 |
last | 输出数组的最后一个元素 |
default | 默认值 |
raw | 不使用(默认)转义 |
md5 | md5 加密 |
substr | 截取字符串 |
②XML标签 也称为标签库标签,主要完成一些逻辑判断、控制和循环输出,并且可扩展
- 循环标签
foreach
标签的用法和 PHP 语法非常接近,用于循环输出数组或者对象的属性
{foreach $arr as $arr_k => $arr_v}
<p style="color: green">{$arr_k}->{$arr_v['id']}-> {$arr_v['name']}</p>
{/foreach}
volist
循环标签- 二维数组的结果输出
name
模板赋值的变量名称id
当前的循环变量,可以随意起名
key
下标,从 1 开始,默认变量 ioffset
开始行数length
获取行数empty
如果数据为空,显示此文字
{volist name='arr' id='v'}
<p>id={$v['id']}, name = {$v['name']}</p>
{/volist}
- for循环标签
标签 | 描述 |
---|---|
for | 计数循环 |
- start:开始值
- end:结束值
- step:步进值,默认 1
- name:循环变量名,默认 i
{for start='1' end='50' step='6' name='i'}
<p>{$i}</p>
{/for}
-
if
判断标签 -
if
标签的用法和 PHP 语法非常接近,用于条件判断
{if $status == 0}
<div>关闭</div>
{else/}
<div>开启</div>
{/if} {if $order_status == 0}
<div>未支付</div>
{elseif $order_status == 1/}
<div>已支付 待发货</div>
{elseif $order_status == 2/}
<div>已发货 待收货</div>
{elseif $order_status == 3/}
<div>已收货 待评论</div>
{elseif $order_status == 4/}
<div>已完成</div>
{else/}
<div>已关闭</div>
{/if}
-
switch
判断标签switch
标签的用法和 PHP 语法非常接近,用于条件判断
{switch $order_status}
{case 0 }
<div>未支付</div>
{/case}
{case 1 }
<div>已支付 待发货</div>
{/case}
{case 2 }
<div>已发货 待收货</div>
{/case}
{case 3 }
<div>已收货 待评论</div>
{/case}
{case 4 }
<div>已完成</div>
{/case}
{/switch}
</body>
- 包含文件
include
标签,引入模版文件load
标签,引入资源文件(css、js)
<!-- 引入公共头部 -->
{include file="public/head"/}
二.请求
-
请求对象使用门面类(
think\facade\Request类负责
)调用 -
支持
$_GET
$_POST
$_REQUEST
$_SERVER
$_SESSION
$_COOKIE
$_ENV
等系统变量,以及文件上传信息①GET 请求
-
GET实战提交
②POST 请求
-
POST实战提交
③变量修饰符
序号 | 修饰符 | 作用 |
---|---|---|
1 | s | 强制转换为字符串类型 |
2 | d | 强制转换为整型类型 |
3 | b | 强制转换为布尔类型 |
4 | a | 强制转换为数组类型 |
5 | f | 强制转换为浮点类型 |
语法:Request::get(‘t/d’)
④Request 依赖注入
public function index2(Request $request)
{
print_r($request->get('t/d'));
return View::fetch();
}
⑤助手函数
input
获取输入数据 支持默认值和过滤
三.数据库链式操作
- 数据库提供的链式操作方法,可以有效的提高数据存取的代码清晰度和开发效率,并且支持所有的 CURD 操作
where
查询条件
$find = Db::table('boke')->where('id',10)->where('status',1)->find();
print_r($find);
table
和name
$select = Db::name('boke')->select();
print_r($select);
$select = Db::table('boke')->select();
print_r($select);
$select = Db::table('boke,cat')->select();
print_r($select);
$select = Db::table('boke b,cat c')->select();
print_r($select);
$select = Db::table([
'boke',
'cat'
])->select();
print_r($select);
$select = Db::table([
'boke' => 'b',
'cat' => 'c'
])->select();
print_r($select);
field
和withoutField
返回值- field
filed 返回指定的字段
- withoutField
withoutField 舍去指定的字段
-
order
排序- 默认正序
asc
ASC
正序desc
DESC
倒序
page
和limit
翻页- limit
limit 是在数据表中取指定的几条数据
- page
page 是在数据表中取翻页数据,第一个值是页数,第二个值是设置一页有几条数据
四.[博客实战]分类和搜索功能完成;
- 带
*
标识的表示支持多次调用
连贯操作 | 作用 | 支持的参数类型 |
---|---|---|
where* | 用于 AND 查询 | 字符串、数组和对象 |
table | 用于定义要操作的数据表名称 | 字符串和数组 |
name | 用于定义要操作的数据表名称 | 字符串 |
field* | 用于定义要查询的字段(支持字段排除) | 字符串和数组 |
order* | 用于对结果排序 | 字符串和数组 |
limit | 用于限制查询结果数量 | 字符串和数字 |
page | 用于查询分页(内部会转换成 limit) | 字符串和数字 |
-
博客实战
ThinkPHP代码块
public function index()
{
//查询文章和导航相对应绑定的值
$id = Request::get('id',0);
//查询搜索值
$t = Request::get('t');
//查询翻页值
$p = Request::get('p',1);
if (isset($id) && !empty($id)) {
//查询分类文章
$count = Db::table('boke')->where('status',1)->where('cat',$id)->count();
$boke = Db::table('boke')
->where('status',1)
->where("cat",$id)
->page($p,10)
->order('date DESC')
->select();
}else if (isset($t) && !empty($t)){
//查询搜索文章
$count = Db::table('boke')->where('status',1)->where('title',$t)->count();
$boke = Db::table('boke')
->where('status',1)
->where('title',$t)
->page($p,10)
->order('date DESC')
->select();
}else {
//查询全部文章
$count = Db::table('boke')->where('status',1)->count();
$boke = Db::table('boke')
->where('status',1)
->page($p,10)
->order('date DESC')
->select();
}
//查询导航字段
$cat = Db::table('cat')
->where('status',1)
->order('sort DESC')
->select();
//查询热门文章
$TopArticle = Db::table('boke')
->where('status',1)
->order('num DESC')
->limit(3)
->select();
View::assign([
'boke' => $boke,
'cat' => $cat,
'count' => ceil($count/10),
'TopArticle' => $TopArticle
]);
return View::fetch('');
}
html代码块
<body class="home blog custom-background custom-font-enabled single-author">
<div id="page" class="hfeed site">
<header id="masthead" class="site-header" role="banner">
<hgroup>
<h1 class="site-title">
<a href="/" title="JiaJieChen个人博客" rel="home">JiaJieChen个人博客</a>
</h1>
<h2 class="site-description">同学们大家好。</h2>
</hgroup>
<nav id="site-navigation" class="main-navigation" role="navigation">
<ul class="nav-menu">
<li>
<a href="/index.html?">首页</a>
</li>
{foreach $cat as $cat_v}
<li>
<a href="?id={$cat_v['id']}">{$cat_v['name']}</a>
</li>
{/foreach}
</ul>
</nav>
</header>
<div id="main" class="wrapper">
<div id="primary" class="site-content">
<div id="content" role="main">
{foreach($boke as $boke_v)}
<div id="content" role="main">
<article>
<header class="entry-header">
<h1 class="entry-title">
<a href="/details.html" title="构建Nginx和PHP镜像" rel="bookmark">{$boke_v['title']}</a>
</h1>
</header>
<div class="entry-content">{$boke_v['title']}</div>
<footer class="entry-meta">
发布于
<a href="/index.html?time=2020-10-02" title="2020-10-02" rel="bookmark">
<time class="entry-date" datetime="2020-10-02">{$boke_v['date']}</time> </a
>。 属于 <a href="/index.html?cate=4" title="查看 Linux中的全部文章" rel="category">{$boke_v['cat']}</a>分类
</footer>
</article>
</div>
{/foreach}
</div>
<div class="page">
<nav>
<ul class="pagination">
<li class="page-item disabled" aria-disabled="true" aria-label="« 上一页">
<span class="page-link" aria-hidden="true">‹</span>
</li>
{for start='0' end="$count" name='i'}
<li class="page-item">
<a class="page-link" href="?p={$i+1}">{$i+1}</a>
</li>
{/for}
<li class="page-item">
<a class="page-link" href="/index.html?page=2" rel="next" aria-label="下一页 »">›</a>
</li>
</ul>
</nav>
</div>
</div>
<div id="secondary" class="widget-area" role="complementary">
<aside id="search-2" class="widget widget_search">
<form role="search" id="searchform" action="" method="POST">
<div>
<label class="screen-reader-text" for="t">搜索:</label>
<input placeholder="搜索" type="text" class="no-border" name="keywords" id="t" />
<input type="submit" class="btn btn-default" id="searchsubmit" value="搜索" />
</div>
</form>
<script type="text/javascript">
$(function () {
$(" searchsubmit").click(function () {
if ($(" t").val() != "") {
location.href = "/index.html?t=" + $(" t").val();
}
return false;
});
});
</script>
</aside>
<aside id="recent-posts-2" class="widget widget_recent_entries">
<h3 class="widget-title">热门文章</h3>
<ul>
{foreach $TopArticle as $TopArticle_k => $TopArticle_v }
<li>
<font style="color: 7a7a7a">{$TopArticle_k+1}</font>
<a href="/details.html?id=20" title="{$TopArticle_v['title']}">{$TopArticle_v['title']}</a>
</li>
{/foreach}
</ul>
</aside>
</div>
</div>
<footer id="colophon" role="contentinfo">
<div class="site-info">
<span>友情链接:</span>
<a href="https://www.php.cn" target="_blank">PHP中文网</a>
</div>
</footer>
<footer role="contentinfo" style="margin-top: 0">
<div class="site-info" style="text-align: center">
<span>
<a href="https://beian.miit.gov.cn" target="_blank">苏ICP备2020058653号-1</a>
</span>
</div>
</footer>
</div>
</body>