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>