【ThinkPHP框架】tp的视图标签、request请求、数据库链式查询等操作详解

九、视图标签

  • 模板引擎支持普通标签和 XML 标签方式两种标签定义
标签类型描述
普通标签主要用于输出变量、函数过滤和做一些基本的运算操作
XML 标签也称为标签库标签,主要完成一些逻辑判断、控制和循环输出,并且可扩展

1、运算符

运算符示例
+{$a+$b}
-{$a-$b}
*{$a*$b}
/{$a/$b}
%{$a%$b}
++{$a++} 或 {++$a}
{$a—} 或{—$a}
综合运算{$a+$b*10+$c}
三元运算符{$a==$b ? ‘yes’ : ‘no’}
  • controller 控制器 app\controller\Code.php
  • view 视图app\view\Code\index.html

app\controller\Code.php 文件

  1. <?php
  2. namespace app\controller;
  3. use think\facade\View;
  4. class Code
  5. {
  6. public function index()
  7. {
  8. View::assign('a',100);
  9. View::assign('b',21);
  10. return View::fetch('index');
  11. }
  12. }
  13. ?>

app\view\Code\index.html文件

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title>运算符</title>
  5. </head>
  6. <body>
  7. <div>{$a+$b}</div>
  8. <div>{$a-$b}</div>
  9. <div>{$a*$b}</div>
  10. <div>{$a/$b}</div>
  11. <div>{$a%$b}</div>
  12. <div>{$a++}</div>
  13. <div>{++$a}</div>
  14. <div>{$a--}</div>
  15. <div>{--$a}</div>
  16. <div>{$c ? '存在' : '不存在'}</div>
  17. </body>
  18. </html>

route\app.php 路由重定向

  1. Route::get('code', 'code/index');

预览地址:http://zhang.com/code 即可

2、模版函数

方法描述
date日期格式化(支持各种时间类型)
format字符串格式化
upper转换为大写
lower转换为小写
first输出数组的第一个元素
last输出数组的最后一个元素
default默认值
raw不使用(默认)转义
md5md5 加密
substr截取字符串
  • 可以多函数调用

controller 文件

  1. <?php
  2. namespace app\controller;
  3. use think\facade\View;
  4. class Code
  5. {
  6. public function index(){
  7. View::assign('time',1576048640);
  8. View::assign('num',10.0032);
  9. View::assign('str','OUyangKE');
  10. View::assign('arr',['皮特朱','咩咩','欧阳克']);
  11. return View::fetch();
  12. }
  13. }
  14. ?>

view 文件

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title>模版函数 </title>
  5. </head>
  6. <body>
  7. <!-- 日期格式化(支持各种时间类型) -->
  8. <div>日期格式化{$time|date='Y-m-d H:i:s'}</div>
  9. <!-- 字符串格式化 -->
  10. <div>字符串格式化{$num|format='%02d'}</div>
  11. <!-- 转换为大写 -->
  12. <div>小写转大写{$str|upper}</div>
  13. <!-- 转换为小写 -->
  14. <div>大写转小写{$str|lower}</div>
  15. <!-- 输出数组的第一个元素 -->
  16. <div>数组第一个{$arr|first}</div>
  17. <!-- 输出数组的最后一个元素 -->
  18. <div>数组最后一个{$arr|last}</div>
  19. <!-- 默认值 -->
  20. <div>默认值:{$default|default="该用户很懒,什么也没有留下!"}</div>
  21. <!-- 截取字符串 -->
  22. <div>字符串截取{$str|substr=0,3}</div>
  23. <!-- md5 加密 -->
  24. <div>md5散列处理{$str|md5}</div>
  25. <!-- 转换为小写,截取字符串 -->
  26. <div>调用多个函数{$str|lower|substr=0,3}</div>
  27. </body>
  28. </html>

3、循环标签

  • foreach 标签的用法和 PHP 语法非常接近,用于循环输出数组或者对象的属性

controller 文件

  1. <?php
  2. namespace app\controller;
  3. use think\facade\View;
  4. class Code
  5. {
  6. public function index(){
  7. $arr = [
  8. ['id'=>1,'name'=>'皮特朱'],
  9. ['id'=>2,'name'=>'咩咩'],
  10. ['id'=>3,'name'=>'欧阳克']
  11. ];
  12. View::assign('arr',$arr);
  13. return View::fetch();
  14. }
  15. }
  16. ?>

view 文件

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title>循环标签</title>
  5. </head>
  6. <body>
  7. {foreach $arr as $k=>$v}
  8. <span>索引:{$k}--</span>
  9. <span>ID:{$v['id']}--</span>
  10. <span>姓名:{$v['name']}</span>
  11. <br>
  12. {/foreach}
  13. </body>
  14. </html>

volist 循环标签" class="reference-link">4、volist 循环标签

  • 二维数组的结果输出
  • name 模板赋值的变量名称
  • id 当前的循环变量,可以随意起名
  • key 下标,从 1 开始,默认变量 i
  • offset 开始行数
  • length 获取行数
  • empty 如果数据为空,显示此文字

view 文件

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title>循环标签</title>
  5. </head>
  6. <body>
  7. {foreach $arr as $k=>$v}
  8. <span>索引:{$k}--</span>
  9. <span>ID:{$v['id']}--</span>
  10. <span>姓名:{$v['name']}</span>
  11. <br>
  12. {/foreach}
  13. <hr>
  14. {volist name="arr" id="v" key="k" offset="0" length="3"}
  15. <span>索引:{$k}</span>
  16. <span>ID:{$v['id']}</span>
  17. <span>姓名:{$v['name']}</span>
  18. <br>
  19. {/volist}
  20. </body>
  21. </html>

if 判断标签" class="reference-link">5、if 判断标签

  • if 标签的用法和 PHP 语法非常接近,用于条件判断

controller 文件

  1. <?php
  2. namespace app\controller;
  3. use think\facade\View;
  4. class Code
  5. {
  6. public function index(){
  7. View::assign('status',1);
  8. View::assign('order_status',4);
  9. return View::fetch();
  10. }
  11. }
  12. ?>

view 文件

  1. {if $status == 1}
  2. <div>开启</div>
  3. {/if}
  4. {if $status == 0}
  5. <div>关闭</div>
  6. {else/}
  7. <div>开启</div>
  8. {/if}
  9. {if $order_status == 0}
  10. <div>未支付</div>
  11. {elseif $order_status == 1/}
  12. <div>已支付 待发货</div>
  13. {elseif $order_status == 2/}
  14. <div>已发货 待收货</div>
  15. {elseif $order_status == 3/}
  16. <div>已收货 待评论</div>
  17. {elseif $order_status == 4/}
  18. <div>已完成</div>
  19. {else/}
  20. <div>已关闭</div>
  21. {/if}

switch 判断标签" class="reference-link">6、switch 判断标签

  • switch 标签的用法和 PHP 语法非常接近,用于条件判断

view 文件

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title>switch 判断标签</title>
  5. </head>
  6. <body>
  7. {switch $order_status}
  8. {case 0 }<div>未支付</div>{/case}
  9. {case 1 }<div>已支付 待发货</div>{/case}
  10. {case 2 }<div>已发货 待收货</div>{/case}
  11. {case 3 }<div>已收货 待评论</div>{/case}
  12. {case 4 }<div>已完成</div>{/case}
  13. {/switch}
  14. </body>
  15. </html>

7、包含文件

  • include 标签,引入模版文件
  • load 标签,引入资源文件(css、js)

view 文件,把头部和尾部分文件

  1. {include file="public/header" /}
  2. {load href="/static/layui/css/layui.css" /}
  3. {load href="/static/layui/layui.js" /}
  4. {include file="public/bottom" /}

8、其他标签

  • 条件标签
标签描述
in判断变量是否存在某些值
notin判断变量是否不存在某些值
between判断变量是否存在某些值
notbetween判断变量是否不存在某些范围值
present判断某个变量是否 已定义
notpresent判断某个变量是否 未定义
empty判断某个变量是否为空
notempty判断某个变量是否不为空
defined判断某个常量是否 已定义
notdefined判断某个常量是否 未定义
  1. public function index(){
  2. View::assign('number',100);
  3. View::assign('string','');
  4. return View::fetch();
  5. }

view 视图

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title>Code</title>
  5. </head>
  6. <body>
  7. {in name="number" value="99,100,101"}
  8. <div>number等于99,100,101任意一个值</div>
  9. {/in}
  10. {notin name="number" value="99,100,101"}
  11. <div>number不等于99,100,101任意一个值</div>
  12. {/notin}
  13. {between name="number" value="1,10"}
  14. <div>number等于1 到 10 之间的任意一个值</div>
  15. {/between}
  16. {notbetween name="number" value="1,10"}
  17. <div>number不等于1 到 10 之间的任意一个值</div>
  18. {/notbetween}
  19. {present name="number"}
  20. <div>number已经定义</div>
  21. {/present}
  22. {notpresent name="n"}
  23. <div>n还没有定义</div>
  24. {/notpresent}
  25. {empty name="string"}
  26. <div>name为空值</div>
  27. {/empty}
  28. {notempty name="string"}
  29. <div>name有值</div>
  30. {/notempty}
  31. {defined name="NAME"}
  32. <div>NAME常量已经定义</div>
  33. {/defined}
  34. {notdefined name="NAME"}
  35. <div>NAME常量未定义</div>
  36. {/notdefined}
  37. </body>
  38. </html>
  • 条件标签,可以增加else标签
  1. {in name="number" value="99,100,101"}
  2. <div>number等于99,100,101任意一个值</div>
  3. {else/}
  4. <div>number不等于99,100,101任意一个值</div>
  5. {/in}
  6. {empty name="string"}
  7. <div>内容为空</div>
  8. {else /}
  9. <div>正常显示</div>
  10. {/empty}
  • 比较标签
标签描述
eq等于
neq不等于
gt大于
egt大于等于
lt小于
elt小于等于
heq恒等于
nheq恒不等于
  1. public function index(){
  2. View::assign("number",100);
  3. View::assign("string","zhang");
  4. return View::fetch();
  5. }
  1. {eq name="number" value="100"}
  2. <div>number 等于 100</div>
  3. {/eq}
  4. {neq name="number" value="101"}
  5. <div>number 不等于 101</div>
  6. {/neq}
  7. {gt name="number" value="33"}
  8. <div>number 大于 33</div>
  9. {/gt}
  10. {egt name="number" value="100"}
  11. <div>number 大于等于 100</div>
  12. {/egt}
  13. {lt name="number" value="200"}
  14. <div>number 小于 200</div>
  15. {/lt}
  16. {elt name="number" value="100"}
  17. <div>number 小于等于 100</div>
  18. {/elt}
  19. {heq name="string" value="zhang"}
  20. <div>string 恒等于 zhang</div>
  21. {/heq}
  22. {heq name="string" value="zhang"}
  23. <div>string 恒不等于 zhang</div>
  24. {/heq}
  • 循环标签
标签描述
for计数循环
  • start:开始值
  • end:结束值(不包含)
  • step:步进值,默认 1
  • name:循环变量名,默认 i
  1. {for start="0" end="50" step="5" name="i"}
  2. {$i}<br/>
  3. {/for}
  • 杂项标签
标签描述
literal原样输出,防止模板标签被解析
php使用原生 php 代码,可以在模板文件里面书写任意的 PHP 语句代码
  1. {literal}
  2. {$name} 这里$name不会被当作变量,而是普通字符
  3. {/literal}
  4. {php}
  5. echo 'zhang';
  6. {/php}

十、请求

  • 请求对象使用门面类( think\facade\Request类负责 )调用
  • 支持 $_GET $_POST $_REQUEST $_SERVER $_SESSION $_COOKIE $_ENV 等系统变量,以及文件上传信息

https://www.kancloud.cn/manual/thinkphp6_0/1037516

方法说明
param获取当前请求的变量
get获取 $_GET 变量
post获取 $_POST 变量
put获取 PUT 变量
delete获取 DELETE 变量
session获取 SESSION 变量
cookie获取 $_COOKIE 变量
request获取 $_REQUEST 变量
server获取 $_SERVER 变量
env获取 $_ENV 变量
route获取 路由(包括PATHINFO) 变量
middleware获取 中间件赋值/传递的变量
file获取 $_FILES 变量

1、GET 请求

  • PARAM类型变量是框架提供的用于自动识别当前请求的一种变量获取方式,是系统推荐的获取请求参数的方法
  • param方法会把当前请求类型的参数和路由变量以及GET请求合并,并且路由变量是优先的
  1. namespace app\controller;
  2. use app\BaseController;
  3. use think\facade\Db;
  4. use think\facade\View;
  5. use think\facade\Request;
  6. class Index extends BaseController
  7. {
  8. public function index(){
  9. echo "<pre>";
  10. print_r( $_GET['t'] ); // 原生get接收
  11. echo "<br>";
  12. print_r( Request::param() ); // 获取当前请求的所有变量
  13. echo "<br>";
  14. print_r( Request::param('t') ); // 获取当前请求的id变量
  15. echo "<br>";
  16. print_r( Request::get() );
  17. echo "</pre>";
  18. /* http://zhang.com/code?t=zhang
  19. zhang
  20. Array
  21. (
  22. [t] => zhang
  23. )
  24. zhang
  25. Array
  26. (
  27. [t] => zhang
  28. )
  29. */
  30. $select = Db::table('boke')->select();
  31. View::assign([
  32. 'select' => $select
  33. ]);
  34. return View::fetch('index');
  35. }
  36. }

2、实战提交

  1. <form role="search" action="" method="GET">
  2. <div>
  3. <label class="screen-reader-text" for="t">搜索:</label>
  4. <input placeholder="搜索" type="text" class="no-border" name="t" id="t"/>
  5. <input type="submit" class="btn btn-default" value="搜索" />
  6. </div>
  7. </form>
  8. $title = Request::get('t');
  9. $select = Db::table('boke')->where('title',$title)->select();

3、POST 请求

  1. namespace app\controller;
  2. use app\BaseController;
  3. use think\facade\Db;
  4. use think\facade\View;
  5. use think\facade\Request;
  6. class Index extends BaseController
  7. {
  8. public function index(){
  9. echo "<pre>";
  10. print_r( $_POST );
  11. print_r( Request::post() );
  12. print_r( Request::param() );
  13. echo "</pre>";
  14. $select = Db::table('boke')->where('title',Request::post('t'))->select();
  15. View::assign([
  16. 'select' => $select
  17. ]);
  18. return View::fetch('index');
  19. }
  20. }
  21. <form role="search" action="" method="POST">
  22. <div>
  23. <label class="screen-reader-text" for="t">搜索:</label>
  24. <input placeholder="搜索" type="text" class="no-border" name="t" id="t"/>
  25. <input type="submit" class="btn btn-default" value="搜索" />
  26. </div>
  27. </form>

4、变量修饰符

序号修饰符作用
1s强制转换为字符串类型
2d强制转换为整型类型
3b强制转换为布尔类型
4a强制转换为数组类型
5f强制转换为浮点类型
  1. Request::get('t/d');
  2. Request::post('t/s');
  3. Request::get('id/d');
  4. Request::post('name/s');
  5. Request::param('price/f');

5.门面类

  • use think\facade\Request;
  1. namespace app\controller;
  2. use app\BaseController;
  3. use think\facade\Db;
  4. use think\facade\View;
  5. use think\facade\Request;
  6. class Index extends BaseController
  7. {
  8. public function index(){
  9. print_r( $_GET );
  10. print_r( Request::get() );
  11. $select = Db::table('boke')->select();
  12. View::assign([
  13. 'select' => $select
  14. ]);
  15. return View::fetch('index');
  16. }
  17. }

6、依赖注入

  • use think\Request;
  1. namespace app\controller;
  2. use app\BaseController;
  3. use think\facade\Db;
  4. use think\facade\View;
  5. use think\Request;
  6. class Index extends BaseController
  7. {
  8. public function index(Request $request){
  9. print_r( $_GET );
  10. print_r( $request->get() );
  11. $select = Db::table('boke')->select();
  12. View::assign([
  13. 'select' => $select
  14. ]);
  15. return View::fetch('index');
  16. }
  17. }

7、助手函数

  • request() 在任何需要的时候直接调用当前请求对象
  1. namespace app\controller;
  2. use app\BaseController;
  3. use think\facade\Db;
  4. use think\facade\View;
  5. class Index extends BaseController
  6. {
  7. public function index(){
  8. print_r( $_GET );
  9. print_r( request()->get() );
  10. $select = Db::table('boke')->select();
  11. View::assign([
  12. 'select' => $select
  13. ]);
  14. return View::fetch('index');
  15. }
  16. }
  • input获取输入数据 支持默认值和过滤
  1. namespace app\controller;
  2. use app\BaseController;
  3. use think\facade\Db;
  4. use think\facade\View;
  5. class Index extends BaseController
  6. {
  7. public function index(){
  8. print_r( $_GET );
  9. print_r( input('get.') );
  10. print_r( input('get.t','') );
  11. $select = Db::table('boke')->select();
  12. View::assign([
  13. 'select' => $select
  14. ]);
  15. return View::fetch('index');
  16. }
  17. }

param 获取当前请求的变量" class="reference-link">8、param 获取当前请求的变量

  • PARAM类型变量是框架提供的用于自动识别当前请求的一种变量获取方式,是系统推荐的获取请求参数的方法
  • param方法会把当前请求类型的参数和路由变量以及GET请求合并,并且路由变量是优先的
  1. namespace app\controller;
  2. use app\BaseController;
  3. use think\facade\Db;
  4. use think\facade\View;
  5. use think\facade\Request;
  6. class Index extends BaseController
  7. {
  8. public function index(){
  9. print_r( Request::param() );
  10. $select = Db::table('boke')->where('title',Request::param('t'))->select();
  11. View::assign([
  12. 'select' => $select
  13. ]);
  14. return View::fetch('index');
  15. }
  16. }

9、变量获取

序号方法说明
1get获取 $_GET 变量
2post获取 $_POST 变量
3param获取当前请求的变量
4put获取 PUT 变量
5delete获取 DELETE 变量
6session获取 SESSION 变量
7cookie获取 $_COOKIE 变量
8request获取 $_REQUEST 变量
9server获取 $_SERVER 变量
10env获取 $_ENV 变量
11route获取 路由(包括PATHINFO) 变量
12middleware获取 中间件赋值/传递的变量
13file获取 $_FILES 变量
14all获取包括 $_FILES 变量在内的请求变量,相当于 param+file,版本:V6.0.8+

10、请求类型

方法说明
method获取当前请求类型
has判断传值是否存在
isGet判断是否GET请求
isPost判断是否POST请求
isPut判断是否PUT请求
isDelete判断是否DELETE请求
isAjax判断是否AJAX请求
isPjax判断是否PJAX请求
isJson判断是否JSON请求
isMobile判断是否手机访问
isHead判断是否HEAD请求
isPatch判断是否PATCH请求
isOptions判断是否OPTIONS请求
isCli判断是否为CLI执行
isCgi判断是否为CGI模式

11、请求信息

序号方法说明
1host当前访问域名或者 IP
2scheme当前访问协议
3port当前访问的端口
4remotePort当前请求的 REMOTE_PORT
5protocol当前请求的 SERVER_PROTOCOL
6contentType当前请求的 CONTENT_TYPE
7domain当前包含协议的域名
8subDomain当前访问的子域名
9panDomain当前访问的泛域名
10rootDomain当前访问的根域名
11url当前完整 URL
12baseUrl当前 URL(不含 QUERY_STRING)
13query当前请求的 QUERY_STRING 参数
14baseFile当前执行的文件
15rootURL 访问根地址
16rootUrlURL 访问根目录
17pathinfo当前请求 URL 的 pathinfo 信息(含 URL 后缀)
18ext当前 URL 的访问后缀
19time获取当前请求的时间
20type当前请求的资源类型
21method当前请求类型
22rule当前请求的路由对象实例
23controller当前请求的控制器名
24action当前请求的操作名
  1. echo Request::url();
  2. echo '<hr>';
  3. echo Request::url(true);
  4. echo '<hr>';
  5. echo Request::host();
  6. echo '<hr>';
  7. echo Request::controller();
  8. echo '<hr>';
  9. echo Request::action();
  10. echo '<hr>';

12、请求头信息

  • HTTP请求头信息的名称不区分大小写,并且_会自动转换为-小写字母
  1. print_r( Request::header() );
  2. print_r( Request::header('ACCEPT_encoding') );


十一、数据库链式操作

  • 数据库提供的链式操作方法,可以有效的提高数据存取的代码清晰度和开发效率,并且支持所有的 CURD 操作

查询构造器:https://www.kancloud.cn/manual/thinkphp6_0/1037532

链式操作:https://www.kancloud.cn/manual/thinkphp6_0/1037538

  • 为了测试:添加 cat 表、修改 boke 表的cat分类值为cat表中对应的id
  1. CREATE TABLE `cat` (
  2. `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  3. `name` varchar(50) NOT NULL COMMENT '分类名',
  4. `sort` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '排序',
  5. `status` tinyint(1) unsigned NOT NULL DEFAULT '1' COMMENT '状态 1开启 0关闭',
  6. PRIMARY KEY (`id`)
  7. ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;
  8. INSERT INTO `cat` VALUES ('1', 'Layui', '0', '1');
  9. INSERT INTO `cat` VALUES ('2', 'PHP', '0', '1');
  10. INSERT INTO `cat` VALUES ('3', 'ThinkPHP', '0', '1');
  11. INSERT INTO `cat` VALUES ('4', '前端', '0', '1');
  12. INSERT INTO `cat` VALUES ('5', '小程序', '0', '1');
  13. INSERT INTO `cat` VALUES ('6', '服务器', '0', '1');
  14. INSERT INTO `boke` (`id`, `title`, `img`, `content`, `date`, `cat`, `num`, `hot`, `status`) VALUES ('1', '修改后的标题', 'https://img.php.cn/upload/course/000/000/001/5d242759adb88970.jpg', '因专业的讲师水平和高效的视频质量,推出的各种视频课程系列一直以来都深受大家喜爱。特别是《天龙八部》系列、《独孤九贱》系列、《玉女心经》系列的原创课程在行业内更是具有强大的影响力,好评不断!为了让大家能更快速方便的寻找到相关教程资源,我们在这篇文章中特意将《天龙八部》系列课程整理出来供大家有针对性得学习!', '2021-02-18', '2', '0', '0', '1');
  15. INSERT INTO `boke` (`id`, `title`, `img`, `content`, `date`, `cat`, `num`, `hot`, `status`) VALUES ('2', 'php中文网《玉女心经》公益PHP WEB培训系列课程汇总', 'https://img.php.cn/upload/course/000/126/153/5aa23f0ded921649.jpg', 'php中文网近期推出的《独孤九贱》系列、《天龙八部》系列、《玉女心经》原创视频课程,好评如潮!由于《玉女心经》系列课程没有做成专题,所以大家找起来有点费劲,为了更好的服务广大php中文网粉丝们,特把课程整理汇总给大家!', '2021-02-11', '2', '0', '0', '1');
  16. INSERT INTO `boke` (`id`, `title`, `img`, `content`, `date`, `cat`, `num`, `hot`, `status`) VALUES ('3', 'html5中submit是按钮么', NULL, 'html5中submit是按钮,它是button的一个特例,它把提交这个动作自动集成了。submit会自动将表单的数据提交,使用submit时需要验证要加return', '2021-02-10', '4', '0', '0', '1');
  17. INSERT INTO `boke` (`id`, `title`, `img`, `content`, `date`, `cat`, `num`, `hot`, `status`) VALUES ('4', 'css如何去除下划线', NULL, 'css去除下划线的方法:首先创建一个HTML示例文件;然后在body中定义一个a标签;最后通过css属性为“a{text-decoration:none}”去除下划线即可。', '2021-02-01', '4', '0', '0', '1');
  18. INSERT INTO `boke` (`id`, `title`, `img`, `content`, `date`, `cat`, `num`, `hot`, `status`) VALUES ('5', 'linux如何查看进程', 'https://img.php.cn/upload/article/202102/24/2021022409272725770.jpg', 'windows defender是windows系统自带的一款杀毒软件,对于很多人来说,这款软件不仅没有起到保护电脑的作用,还增加了很多不必要的麻烦。比如我们安装了一些破解版软件,windows defender就会杀这些破解软件,很让人讨厌。', '2021-02-01', '6', '1', '0', '1');
  19. INSERT INTO `boke` (`id`, `title`, `img`, `content`, `date`, `cat`, `num`, `hot`, `status`) VALUES ('6', 'Ubuntu20.04/18.04下安装或更新至PHP8', 'https://img.php.cn/upload/article/000/000/020/2c02ff679ec7afab974a691aac09d535-0.png', '本指南让你了解如何安装最新的 php 版本 8,并在你的任何 VPS、云服务器、专用主机上的 Ubuntu 20.0 或 18.04 系统中升级到最新版本,并将其配置为 Apache 和 Nginx。', '2021-02-01', '2', '5', '0', '1');
  20. INSERT INTO `boke` (`id`, `title`, `img`, `content`, `date`, `cat`, `num`, `hot`, `status`) VALUES ('7', 'PHP 8新特性之JIT对PHP应用性能的影响', NULL, '即将发布的 PHP 8 最受大家关注的新特性就是引入了对 JIT 的支持,我已经简单介绍了 JIT 是什么,以及与 Opcache 的区别', '2021-02-01', '2', '97', '0', '1');
  21. INSERT INTO `boke` (`id`, `title`, `img`, `content`, `date`, `cat`, `num`, `hot`, `status`) VALUES ('8', '详解PHP7中的zval结构和引用计数机制', 'https://img.php.cn/upload/article/000/000/024/6053286f637d2966.jpg', '最近在查阅 PHP7 垃圾回收的资料的时候,网上的一些代码示例在本地环境下运行时出现了不同的结果,使我一度非常迷惑。 仔细一想不难发现问题所在:这些文章大多是 PHP5.x 时代的,而 PHP7 发布后,采用了新的 zval 结构,相关的资料也比较贫瘠,所以我结合一些资料做了一个总结,主要侧重于解释新 zval 容器中的引用计数机制,如有谬误,还望不吝指教。', '2021-01-01', '2', '185', '0', '1');
  22. INSERT INTO `boke` (`id`, `title`, `img`, `content`, `date`, `cat`, `num`, `hot`, `status`) VALUES ('9', 'php登录失败怎么处理', 'https://img.php.cn/upload/article/202103/19/2021031909102812621.jpg', 'php登录失败的处理方法:首先创建一个表负责记录用户登录的信息;然后从user_login_info表查询最近30分钟内有没有相关密码错误的记录;接着统计记录总条数是否达到设定的错误次数;最后设置登录密码错误次数限制即可。', '2021-01-01', '2', '0', '0', '1');
  23. INSERT INTO `boke` (`id`, `title`, `img`, `content`, `date`, `cat`, `num`, `hot`, `status`) VALUES ('10', 'php如何去掉字符串末尾字符', 'https://img.php.cn/upload/article/000/000/024/6053250623ecf930.jpg', 'php去掉字符串末尾字符的方法:1、直接使用substr()函数倒序裁掉最后一位字符,语法“substr(string,0,-1)”;2、使用rtrim()函数,语法“rtrim(string,charlist)”。', '2021-01-01', '2', '0', '0', '1');
  24. INSERT INTO `boke` (`id`, `title`, `img`, `content`, `date`, `cat`, `num`, `hot`, `status`) VALUES ('11', 'php异常和错误的区别是什么', 'https://img.php.cn/upload/article/202103/18/2021031817511956954.jpg', 'php异常和错误的区别:1、PHP错误是属于php程序自身的问题,一般是由非法的语法,环境问题导致的;2、PHP异常一般是业务逻辑上出现的不合预期、与正常流程不同的状况,不是语法错误。', '2021-01-01', '2', '0', '0', '1');
  25. INSERT INTO `boke` (`id`, `title`, `img`, `content`, `date`, `cat`, `num`, `hot`, `status`) VALUES ('12', 'linux下如何查看php-fpm是否安装', 'https://img.php.cn/upload/article/000/000/024/60532042dd48f908.jpg', 'linux下查看php-fpm是否安装的方法:打开终端,执行“whereis php-fpm”或者“find / -name php-fpm”命令,如果成功输出php-fpm的安装位置,则表示有安装。', '2021-01-01', '2', '0', '0', '1');
  26. INSERT INTO `boke` (`id`, `title`, `img`, `content`, `date`, `cat`, `num`, `hot`, `status`) VALUES ('13', 'php的数据库修改语句是什么', 'https://img.php.cn/upload/article/202103/18/2021031817353472746.jpg', 'php的数据库修改语句是UPDATE,用于更新数据库表中已存在的记录,语法为【UPDATE table_name SET column1=value, column2=value2,...WHERE some_column=some 】。', '2021-01-01', '2', '0', '0', '1');
  27. INSERT INTO `boke` (`id`, `title`, `img`, `content`, `date`, `cat`, `num`, `hot`, `status`) VALUES ('14', 'php怎么设置状态码', 'https://img.php.cn/upload/article/000/000/024/60531da39e7a2975.jpg', '在php中,可以使用http_response_code()函数来设置状态码,该函数用于设置响应的HTTP状态码,语法格式“http_response_code (状态码) ”。', '2021-01-01', '2', '0', '0', '1');
  28. INSERT INTO `boke` (`id`, `title`, `img`, `content`, `date`, `cat`, `num`, `hot`, `status`) VALUES ('15', 'excel怎么冻结选定区域', 'https://img.php.cn/upload/article/202103/18/2021031817270344979.jpg', 'excel冻结选定区域的方法:首先选定你想固定不变的位置;然后点击表格最上面的菜单栏“视图”那里,再点击“冻结窗格”下方的“冻结窗格”即可。', '2021-01-01', '2', '0', '0', '1');
  29. INSERT INTO `boke` (`id`, `title`, `img`, `content`, `date`, `cat`, `num`, `hot`, `status`) VALUES ('16', '在线考试系统实战【公益直播】', 'https://img.php.cn/upload/course/000/000/001/60862c6ba99af257.png', '三天大型公益直播课《模仿驾校考试系统实战开发》,使用框架: bootstrap、jquery、ThinkPHP6.0', '2021-05-06', '2', '0', '0', '1');

where 查询条件" class="reference-link">1、where 查询条件

  1. // 查询id为10并且状态为1的记录
  2. $find = Db::table('boke')->where('id',10)->where('status',1)->find();
  3. print_r($find);

table 和 name" class="reference-link">2、tablename

  • table方法主要用于指定操作的数据表

https://www.kancloud.cn/manual/thinkphp6_0/1037540

table方法指定的数据表需要完整的表名,但可以采用name方式简化数据表前缀的传入,例如:

  1. Db::table('think_user')->where('status>1')->select();
  2. Db::table('db_name.think_user')->where('status>1')->select();
  3. Db::name('user')->where('status>1')->select();

会自动获取当前模型对应的数据表前缀来生成 think_user 数据表名称。

  1. // name和table功能一样都是指定表名称
  2. $select = Db::name('boke')->select();
  3. print_r($select);
  4. $select = Db::table('boke')->select();
  5. print_r($select);
  6. // 注意:这里多表查询记录数为表1*表2总条数
  7. // table可以一次查询多张表 '表1,表2'
  8. $select = Db::table('boke,cat')->select();
  9. print_r($select);
  10. // 可以设置表别名 '表1 别名1,表2 别名1'
  11. $select = Db::table('boke b,cat c')->select();
  12. print_r($select);
  13. // 也可以数组形式传递多张表名称
  14. $select = Db::table([
  15. 'boke',
  16. 'cat'
  17. ])->select();
  18. print_r($select);
  19. // 数组形式传递表设置别名是以键值对的方式
  20. $select = Db::table([
  21. 'boke' => 'b',
  22. 'cat' => 'c'
  23. ])->select();
  24. print_r($select);

3、数据库前缀

  • 数据库配置 database.php
  • cat 表、 boke 表,都加上 zs_ 前缀
  • 这样我们在操作表的时候,表名只要依然写成cat、boke即可,无需每次都zs_cat、zs_boke
  1. use think\facade\Env;
  2. return [
  3. 'connections' => [
  4. 'mysql' => [
  5. // 数据库表前缀
  6. 'prefix' => Env::get('database.prefix', 'zs_'),
  7. ]
  8. ]
  9. ];

field 和 withoutField 返回值" class="reference-link">4、fieldwithoutField 返回值

  • field方法主要作用是标识要返回或者操作的字段,可以用于查询和写入操作。

https://www.kancloud.cn/manual/thinkphp6_0/1037542

  1. // field是指定包含哪些字段 参数和table一样,可以是字符串和数组,字符串的话字段名逗号隔开要全部放到引号中
  2. $select = Db::table('boke')->field('id,title')->where('status',1)->select();
  3. print_r($select);
  4. $select = Db::table('boke')->field('id,title as t')->where('status',1)->select();
  5. print_r($select);
  6. $select = Db::table('boke')->field(['id','title'])->where('status',1)->select();
  7. print_r($select);
  8. $select = Db::table('boke')->field(['id','title'=>'t'])->where('status',1)->select();
  9. print_r($select);
  10. // *号表示查询所有字段,默认不写就是全部字段
  11. $select = Db::table('boke')->field('*')->where('status',1)->select();
  12. print_r($select);
  13. // withoutField是指定除了哪些字段不查询
  14. $select = Db::table('boke')->withoutField('id,title')->where('status',1)->select();
  15. print_r($select);
  16. $select = Db::table('boke')->withoutField(['id','title'])->where('status',1)->select();
  17. print_r($select);

order 排序" class="reference-link">5、order 排序

https://www.kancloud.cn/manual/thinkphp6_0/1037546

  • asc ASC 正序 默认
  • desc DESC 倒序
  1. $select = Db::table('boke')->field('id,title')->where('status',1)->order('id')->select();
  2. print_r($select);
  3. $select = Db::table('boke')->field('id,title')->where('status',1)->order('id desc')->select();
  4. print_r($select);

page 和 limit 翻页" class="reference-link">6、pagelimit 翻页

  • limit方法主要用于指定查询和操作的数量
  • limit(开始条数,取出个数)

https://www.kancloud.cn/manual/thinkphp6_0/1037544

  • page方法主要用于分页查询
  • page(第几页,每页个数)

https://www.kancloud.cn/manual/thinkphp6_0/1037545

  1. // 从第一条开始取出五条
  2. $select = Db::table('boke')
  3. ->field('id,title')
  4. ->where('status',1)
  5. ->order('id desc')
  6. ->limit(5)
  7. ->select();
  8. print_r($select);
  9. // 从第六条开始取出五条
  10. $select = Db::table('boke')->field('id,title')->where('status',1)->order('id desc')->limit(6,5)->select();
  11. print_r($select);
  12. // 第一页五条
  13. $select = Db::table('boke')->field('id,title')->where('status',1)->order('id desc')->page(1,5)->select();
  14. print_r($select);
  15. // 第二页五条
  16. $select = Db::table('boke')->field('id,title')->where('status',1)->order('id desc')->page(1,5)->select();
  17. print_r($select);
  18. $content = Db::name('boke')->field('id,title')->page(input('get.page','1'),3)->select()->toArray();
  19. print_r($content);

count 统计数量" class="reference-link">7、count 统计数量

  1. // 统计状态为1的数据条数
  2. $count = Db::table('boke')->field('id,title')->where('status',1)->count();
  3. echo $count;

save 写入数据" class="reference-link">8、save 写入数据

  • save方法统一写入数据,自动判断是新增还是更新数据(以写入数据中是否存在主键数据为依据)。
  1. public function index(){
  2. # 添加数据
  3. $data = ['cat'=>'2','title'=>'美特斯邦威七分牛仔裤女2018夏季新款中腰修身洗水牛仔裤商场款','price'=>'49.90','add_time'=>time()];
  4. $save = Db::table('shop_goods')->save($data);
  5. print_r($save);
  6. # 因为主键是唯一的且自增的,数据中包含主键为修改该条记录,没有默认为添加记录
  7. # 修改数据
  8. $data = ['price'=>'99.00','id'=>3];
  9. $save = Db::table('shop_goods')->save($data);
  10. print_r($save);
  11. }

更多请查看:https://www.kancloud.cn/manual/thinkphp6_0/1037538

系统支持的链式操作方法包含:

连贯操作作用支持的参数类型
where*用于AND查询字符串、数组和对象
whereOr*用于OR查询字符串、数组和对象
whereTime*用于时间日期的快捷查询字符串
table用于定义要操作的数据表名称字符串和数组
alias用于给当前数据表定义别名字符串
field*用于定义要查询的字段(支持字段排除)字符串和数组
order*用于对结果排序字符串和数组
limit用于限制查询结果数量字符串和数字
page用于查询分页(内部会转换成limit)字符串和数字
group用于对查询的group支持字符串
having用于对查询的having支持字符串
join*用于对查询的join支持字符串和数组
union*用于对查询的union支持字符串、数组和对象
view*用于视图查询字符串、数组
distinct用于查询的distinct支持布尔值
lock用于数据库的锁机制布尔值
cache用于查询缓存支持多个参数
with*用于关联预载入字符串、数组
bind*用于数据绑定操作数组或多个参数
comment用于SQL注释字符串
force用于数据集的强制索引字符串
master用于设置主服务器读取数据布尔值
strict用于设置是否严格检测字段名是否存在布尔值
sequence用于设置Pgsql的自增序列名字符串
failException用于设置没有查询到数据是否抛出异常布尔值
partition用于设置分区信息数组 字符串
replace用于设置使用REPLACE方式写入布尔值
extra用于设置额外查询规则字符串
duplicate用于设置DUPLCATE信息数组 字符串

所有的连贯操作都返回当前的模型实例对象(this),其中带*标识的表示支持多次调用。

  • Thinkphp提供了很多处理数据集的方法
方法描述
toArray转换为数组
isEmpty是否为空
all所有数据
merge合并其它数据
diff比较数组,返回差集
flip交换数据中的键和值
intersect比较数组,返回交集
keys返回数据中的所有键名
pop删除数据中的最后一个元素
shift删除数据中的第一个元素
unshift在数据开头插入一个元素
push在结尾插入一个元素
reduce通过使用用户自定义函数,以字符串返回数组
reverse数据倒序重排
chunk数据分隔为多个数据块
each给数据的每个元素执行回调
filter用回调函数过滤数据中的元素
column返回数据中的指定列
sort对数据排序
order指定字段排序
shuffle将数据打乱
slice截取数据中的一部分
map用回调函数处理数组中的元素
where根据字段条件过滤数组中的元素
whereLikeLike查询过滤元素
whereNotLikeNot Like过滤元素
whereInIN查询过滤数组中的元素
whereNotInNot IN查询过滤数组中的元素
whereBetweenBetween查询过滤数组中的元素
whereNotBetweenNot Between查询过滤数组中的元素
  1. public function index(){
  2. $select = Db::table('shop_goods')->select();
  3. if($select->isEmpty()){
  4. echo '未找到数据';
  5. }
  6. print_r($select->shuffle()->toArray());
  7. }

十二、博客实战

  • * 标识的表示支持多次调用
连贯操作作用支持的参数类型
where*用于 AND 查询字符串、数组和对象
table用于定义要操作的数据表名称字符串和数组
name用于定义要操作的数据表名称字符串
field*用于定义要查询的字段(支持字段排除)字符串和数组
order*用于对结果排序字符串和数组
limit用于限制查询结果数量字符串和数字
page用于查询分页(内部会转换成 limit)字符串和数字
  1. <?php
  2. namespace app\controller;
  3. use app\BaseController;
  4. use think\facade\View;
  5. use think\facade\App;
  6. use think\facade\Db;
  7. class Index extends BaseController
  8. {
  9. public function index()
  10. {
  11. $p = input('get.p',1);
  12. $c = input('get.c',0);
  13. $t = input('get.t','');
  14. $num = 5;
  15. $cat = Db::table('cat')->select();
  16. if($c != 0){
  17. $count = Db::table('boke')->where('status',1)->where('cat',$c)->count();
  18. $select = Db::table('boke')->where('status',1)->where('cat',$c)->page($p,$num)->select()->toArray();
  19. }else if(!empty($t)){
  20. $count = Db::table('boke')->where('status',1)->where('title',$t)->count();
  21. $select = Db::table('boke')->where('status',1)->where('title',$t)->page($p,$num)->select()->toArray();
  22. }else{
  23. $count = Db::table('boke')->where('status',1)->count();
  24. $select = Db::table('boke')->where('status',1)->page($p,$num)->select()->toArray();
  25. }
  26. foreach ($select as &$value) {
  27. $catname = Db::table('cat')->field('name')->where('id',$value['cat'])->find();
  28. $value['cat'] = $catname['name'];
  29. }
  30. $hot = Db::table('boke')->field('title')->limit(4)->order('num','asc')->select();
  31. View::assign([
  32. 'p' => $p,
  33. 'c' => $c,
  34. 't' => $t,
  35. 'cat' => $cat,
  36. 'select' => $select,
  37. 'count' => ceil($count/$num),
  38. 'hot' => $hot
  39. ]);
  40. return View::fetch('index');
  41. }
  42. }

view 首页文件

  1. <!DOCTYPE html>
  2. <html lang="zh-CN">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <title>首页 - zhang个人博客</title>
  6. <meta name="keywords" content="博客,个人博客,zhang个人博客,PHP"/>
  7. <meta name="description" content="zhang是php开发路上的学习萌萌新,愿意把知识分享给大家。" />
  8. <link rel="stylesheet" id="twentytwelve-style-css" href="/static/css/index.css" type="text/css" media="all" />
  9. <style type="text/css" id="custom-background-css">
  10. body.custom-background {background-color:#e6e6e6;}
  11. input.btn-default:focus,input.no-border:focus {outline:none;}
  12. input.no-border {font-size:15px;}
  13. </style>
  14. <script type="text/javascript" src="/static/js/jquery.js"></script>
  15. <script type="text/javascript" src="/static/js/nav.js"></script>
  16. </head>
  17. <body class="home blog custom-background custom-font-enabled single-author">
  18. <div id="page" class="hfeed site">
  19. <header id="masthead" class="site-header" role="banner">
  20. <hgroup>
  21. <h1 class="site-title">
  22. <a href="/" title="zhang个人博客" rel="home">zhang个人博客</a>
  23. </h1>
  24. <!-- <h2 class="site-description">zhang是php开发路上的学习萌萌新,愿意把知识分享给大家。</h2> -->
  25. </hgroup>
  26. <nav id="site-navigation" class="main-navigation" role="navigation">
  27. <ul class="nav-menu">
  28. <li>
  29. <a href="/">首页</a>
  30. </li>
  31. {if($cat)}
  32. {foreach $cat as $cat_v}
  33. <li>
  34. <a href="?c={$cat_v['id']}">{$cat_v['name']}</a>
  35. </li>
  36. {/foreach}
  37. {/if}
  38. </ul>
  39. </nav>
  40. </header>
  41. <div id="main" class="wrapper">
  42. <div id="primary" class="site-content">
  43. {empty name="$select"}
  44. <div>该分类占无内容……</div>
  45. {else/}
  46. {foreach($select as $select_v)}
  47. <div id="content" role="main">
  48. <article>
  49. <header class="entry-header">
  50. <h1 class="entry-title"><a href="/Content/details?id={$select_v['id']}" title="构建Nginx和PHP镜像" rel="bookmark">{$select_v['title']}</a></h1>
  51. </header>
  52. <div class="entry-content">{$select_v['content']}……</div>
  53. <footer class="entry-meta">
  54. 发布于
  55. <a href="/index.html?time=2020-10-02" title="2020-10-02" rel="bookmark">
  56. <time class="entry-date" datetime="2020-10-02">{$select_v['date']}</time>
  57. </a>。 属于
  58. <a href="/index.html?c=4" title="查看 Linux中的全部文章" rel="category">{$select_v['cat']}</a> 分类
  59. </footer>
  60. </article>
  61. </div>
  62. {/foreach}
  63. {/empty}
  64. <div class="page">
  65. <nav>
  66. <ul class="pagination">
  67. {if $p<=1}
  68. <li class="page-item disabled" aria-disabled="true" aria-label="&laquo; 上一页">
  69. <span class="page-link" aria-hidden="true">&lsaquo;</span>
  70. </li>
  71. {else /}
  72. <li class="page-item">
  73. <a class="page-link" href="?p={$p-1}&c={$c}&t={$t}" rel="next" aria-label="上一页 &lsaquo;">&lsaquo;</a>
  74. </li>
  75. {/if}
  76. {if $p>=$count}
  77. <li class="page-item disabled" aria-disabled="true" aria-label="&raquo; 下一页">
  78. <span class="page-link" aria-hidden="true">&raquo;</span>
  79. </li>
  80. {else /}
  81. <li class="page-item">
  82. <a class="page-link" href="?p={$p+1}&c={$c}&t={$t}" rel="next" aria-label="下一页 &raquo;">&rsaquo;</a>
  83. </li>
  84. {/if}
  85. </ul>
  86. </nav>
  87. </div>
  88. </div>
  89. <div id="secondary" class="widget-area" role="complementary">
  90. <aside id="search-2" class="widget widget_search">
  91. <form role="search" id="searchform" action="" method="POST">
  92. <div>
  93. <label class="screen-reader-text" for="t">搜索:</label>
  94. <input placeholder="搜索" type="text" class="no-border" name="keywords" id="t" value="{$t}" />
  95. <input type="submit" class="btn btn-default" id="searchsubmit" value="搜索" />
  96. </div>
  97. </form>
  98. <script type="text/javascript">
  99. $(function (){
  100. $("#searchsubmit").click(function (){
  101. if($("#t").val() != '') {
  102. location.href = "/index.html?t="+$("#t").val();
  103. }
  104. return false;
  105. });
  106. });
  107. </script>
  108. </aside>
  109. <aside id="recent-posts-2" class="widget widget_recent_entries">
  110. <h3 class="widget-title">热门文章</h3>
  111. <ul>
  112. {foreach $hot as $k=>$v}
  113. <li>
  114. <font style="color:#7a7a7a;">[{$k+1}]</font>&nbsp;
  115. <a href="/Content/details?id={$v['id']}" title="12">{$v['title']}</a>
  116. </li>
  117. {/foreach}
  118. </ul>
  119. </aside>
  120. </div>
  121. </div>
  122. <footer id="colophon" role="contentinfo">
  123. <div class="site-info">
  124. <span>友情链接:</span>
  125. <a href="https://www.php.cn" target="_blank"></a>
  126. </div>
  127. </footer>
  128. <footer role="contentinfo" style="margin-top:0;">
  129. <div class="site-info" style="text-align:center;">
  130. <span>
  131. <a href="https://beian.miit.gov.cn" target="_blank">苏ICP备2020058653号-1</a>
  132. </span>
  133. </div>
  134. </footer>
  135. </div>
  136. </body>
  137. </html>

controller\Content.php 详情页

  1. <?php
  2. namespace app\controller;
  3. use app\BaseController;
  4. use think\facade\View;
  5. use think\facade\Db;
  6. class Content extends BaseController
  7. {
  8. public function details()
  9. {
  10. $id = input('get.id');
  11. $content = Db::table('boke')->field('content,title')->where('id',$id)->find();
  12. $s = Db::table('boke')->field('title')->where('id',$id-1)->find();
  13. $x = Db::table('boke')->field('title')->where('id',$id+1)->find();
  14. $cat = Db::table('cat')->select();
  15. $hot = Db::table('boke')->field('id,title')->limit(4)->order('num','asc')->select();
  16. View::assign([
  17. 'id' => $id,
  18. 'cat' => $cat,
  19. 'hot' => $hot,
  20. 'content'=>$content,
  21. 's'=>$s,
  22. 'x'=>$x
  23. ]);
  24. return View::fetch();
  25. }
  26. }

view\Content\details.html 文章详情页

  1. <!DOCTYPE html>
  2. <html lang="zh-CN">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <title>首页 - zhang个人博客</title>
  6. <meta name="keywords" content="博客,个人博客,zhang个人博客,PHP"/>
  7. <meta name="description" content="zhang是php开发路上的学习萌萌新,愿意把知识分享给大家。" />
  8. <link rel="stylesheet" id="twentytwelve-style-css" href="/static/css/index.css" type="text/css" media="all" />
  9. <style type="text/css" id="custom-background-css">
  10. body.custom-background {background-color:#e6e6e6;}
  11. input.btn-default:focus,input.no-border:focus {outline:none;}
  12. input.no-border {font-size:15px;}
  13. </style>
  14. <script type="text/javascript" src="/static/js/jquery.js"></script>
  15. <script type="text/javascript" src="/static/js/nav.js"></script>
  16. </head>
  17. <body class="home blog custom-background custom-font-enabled single-author">
  18. <div id="page" class="hfeed site">
  19. <header id="masthead" class="site-header" role="banner">
  20. <hgroup>
  21. <h1 class="site-title">
  22. <a href="/" title="zhang个人博客" rel="home">zhang个人博客</a>
  23. </h1>
  24. <!-- <h2 class="site-description">zhang是php开发路上的学习萌萌新,愿意把知识分享给大家。</h2> -->
  25. </hgroup>
  26. <nav id="site-navigation" class="main-navigation" role="navigation">
  27. <ul class="nav-menu">
  28. <li>
  29. <a href="/index.html">首页</a>
  30. </li>
  31. {if($cat)}
  32. {foreach $cat as $cat_v}
  33. <li>
  34. <a href="/?c={$cat_v['id']}">{$cat_v['name']}</a>
  35. </li>
  36. {/foreach}
  37. {/if}
  38. </ul>
  39. </nav>
  40. </header>
  41. <div id="main" class="wrapper">
  42. <div id="primary" class="site-content">
  43. <div id="content" role="main">
  44. <article>
  45. <header class="entry-header">
  46. <h1 class="entry-title">
  47. {$content['title']}
  48. </h1>
  49. </header>
  50. <div class="entry-content ql-editor" id="md-editor" style="padding: 0;">
  51. {$content['content']}
  52. </div>
  53. <footer class="entry-meta">
  54. 发布于
  55. <a href="/index.html?time=2020-10-02" title="2020-10-02" rel="bookmark">
  56. <time class="entry-date" datetime="2020-10-02">2020-10-02</time>
  57. </a>。 属于
  58. <a href="/index.html?cate=4" title="查看 Linux中的全部文章" rel="category">Linux</a> 分类
  59. </footer>
  60. </article>
  61. <nav class="nav-single">
  62. <div class="prev">上一篇:<a href="/Content/details?id={$id-1}">{$s['title']}</a></div>
  63. <div class="prev">下一篇:<a href="/Content/details?id={$id+1}">{$x['title']}</a></div>
  64. </nav>
  65. </div>
  66. </div>
  67. <div id="secondary" class="widget-area" role="complementary">
  68. <aside id="search-2" class="widget widget_search">
  69. <form role="search" id="searchform" action="" method="POST">
  70. <div>
  71. <label class="screen-reader-text" for="t">搜索:</label>
  72. <input placeholder="搜索" type="text" class="no-border" name="keywords" id="t" value="{$t}" />
  73. <input type="submit" class="btn btn-default" id="searchsubmit" value="搜索" />
  74. </div>
  75. </form>
  76. </aside>
  77. <aside id="recent-posts-2" class="widget widget_recent_entries">
  78. <h3 class="widget-title">热门文章</h3>
  79. <ul>
  80. {foreach $hot as $k=>$v}
  81. <li>
  82. <font style="color:#7a7a7a;">[{$k+1}]</font>&nbsp;
  83. <a href="/Content/details?id={$v['id']}" title="12">{$v['title']}</a>
  84. </li>
  85. {/foreach}
  86. </ul>
  87. </aside>
  88. </div>
  89. </div>
  90. <footer id="colophon" role="contentinfo">
  91. <div class="site-info">
  92. <span>友情链接:</span>
  93. <a href="https://www.php.cn" target="_blank"></a>
  94. </div>
  95. </footer>
  96. <footer role="contentinfo" style="margin-top:0;">
  97. <div class="site-info" style="text-align:center;">
  98. <span>
  99. <a href="https://beian.miit.gov.cn" target="_blank">苏ICP备2020058653号-1</a>
  100. </span>
  101. </div>
  102. </footer>
  103. </div>
  104. </body>
  105. </html>


最近朋友圈里火了好多好玩的小玩意,小编看到后立马给大家更新了!这次带来了三个超级好玩的功能游戏机、小空调和小电视。

本人朋友圈已安装
小空调:https://h5ma.com/11c

小电视:https://h5ma.com/12v

小霸王:https://h5ma.com/14a