IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> PHP之Smarty -> 正文阅读

[PHP知识库]PHP之Smarty

PHP之Smarty

Smarty简介

smarty的引入

1. 为了分工合作,模板页面中最好不要出现php代码
2.需要将表现和内容相互分离
3.通过smarty把php和html页面显示在页面上

官方smarty

plugins:自定义插件
sysplugins:系统插件
Smarty.class.php:Smarty核心文件

smarty的属性和方法

class Smarty{
    public $left_delimiter="{";//左界定
    public $right_delimiter="}";//右界定
    protected $template_dir=array('./templates/');//默认模板文件目录
    protected $compile_dir='./templates_c';//默认混编目录
    protected $config_dir=array('./configs/');//默认配置目录
    protected $cache_dir='./cache/';//默认缓存目录
    public function setTemplateDir(){}//设置模板文件夹
    public function setConfigDir(){}//设置配置文件夹
    public function setCompileDir(){}//设置混编文件夹
    public function setCacheDir(){}//设置缓存文件夹
}

smarty简单的操作

1. 将libs目录拷贝到站点下,改名为smarty
2. 创建模板目录templates
3. 创建混编目录templates_c
4. 在站点下创建1-demo.php
5. 在模板下创建1-demo.html
require './smarty/Smarty.class.php';
$smarty = new Smarty();
$smarty->assign('title','锄禾');
$smarty->display('1-demo.html');
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
{$title}
</body>
</html>

smarty的注释

语法:{* *}
注意:smarty注释在源码中看不见
smarty的注释只要在左右定界符里面加上*就可以了

smarty变量

smarty中变量有3种,普通变量、配置变量、保留变量

普通变量

普通变量就是我们自定义的变量

方法一:在PHP中定义

$smarty->assign('name','tom');//给变量赋值

方法二:可以在模板中定义

语法:{assign var='变量名' value='值'}
例如:{assign var='sex' value='男'}
简化写法:{$add='北京'}

保留变量

smarty中有一个特殊的保留变量(内置变量),类似于PHP中所有的超全局变量、常量、时间等信息
表达式描述
{$smarty.get.name}获取get提交的name的值
{$smarty.post.name}获取post提交的name的值
{$smarty.request.name}获取get和post提交的name的值
{$smarty.cookies.name}获取cookie中name的值
{$smarty.session.name}获取session中name的值
{$smarty.const.name}获取常量name
{$smarty.server.DOCUMENT_ROOT}获取服务器的虚拟目录地址
{$smarty.config.name}获取配置文件中的值
{$smarty.now}时间戳
{$smarty.ldelim}获取左界定
{$smarty.rdelim}获取右界定

配置变量

从配置文件中获取变量值,配置文件默认的文件夹是configs
1. 在站点下创建配置文件夹configs
2. 在configs目录下创建smarty.conf文件
color=#FF0000
size=50px
[spring] # 配置文件中的段落也称作节
color=#009900
size=20px
[winter]
color=#000005
size=5px

HTML页面

<!DOCTYPE html>
<html lang="en">
<!--config_loads默认目录就是当前目录的configs目录
它会自动找当前目录的configs,所以不需要写./configs/的文件-->
<!--这里section引入了节-->
{config_load file='smarty.conf' section=''}

<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        body{
            color: {#color#};
            font-size:{$smarty.config.size};
        }
    </style>
</head>
<body>
{if $smarty.get.score gt 90}
    A
{elseif $smarty.get.score gte 80}
    B
{else}
    C
{/if}
锄禾日当午
</body>
</html>

PHP页面

require './smarty/Smarty.class.php';
$smarty = new Smarty();
$smarty->assign('title','锄禾');
$smarty->display('1-demo.html');
小结:
1. 要使用配置文件中的值,首先必须引入配置文件,通过{config_load}标签引入
2. 获取配置文件中的值的方法有两种
(1):{#变量名#}
(2):{$smarty.config.变量名}
配置文件中的注意事项:
1. 全局的一定要写在节的前面
2. 配置文件中[]表示节
3. 配置文件中的注释是#

smarty运算符

运算符描述
eq相等
neq不等于
gt大于
lt小于
lte小于等于
gte大于等于
is even是偶数
is odd是奇数
is not even不是偶数
is not odd不是奇数
not
mod求模取余
div by被整除
is [not] div by是否被某数整除

判断

语法:
{if 条件}
{elseif 条件}
{else}
{/if}

数组

smarty中访问数组的方式有两种:
1. 数组[下标]
2. 数组.下标

PHP页面

require './smarty/Smarty.class.php';
$smarty = new Smarty();
$stu = ['tom','berry'];//索引数组
$stu1 = array('name'=>'zhangsan','age'=>22);
$goods = array(
    array('name'=>'手机','price'=>3352),
    array('name'=>'钢笔','price'=>10)
);
$smarty->assign('stu',$stu);
$smarty->assign('stu1',$stu1);
$smarty->assign('goods',$goods);
$smarty->display('2-demo.html');

HTML页面

<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
学生:{$stu[0]}-{$stu.1}<br>
学生1:{$stu1['name']}的年龄是{$stu1.age}<br>
商品:
<ul>
    <li>{$goods[0]['name']}</li>
    <li>{$goods.0.price}</li>
    <li>{$goods.1['name']}</li>
    <li>{$goods[1].price}</li>
</ul>
{for $i=1 to 5}
    {$i}:锄禾日当午<br>
{/for}
<hr>
{for $i=1 to 5 step=2}
{$i}:锄禾日当午<br>
{/for}
</body>
</html>

循环

smarty中支持的循环有:{for}、{while}、{foreach}、{section}。用的最多的是foreach循环
语法:
{foreach 数组 as $k=$v}
{foreachelse}
	没有输出
{/foreach}
foreach的属性:
@index:从0开始的索引
@iteration:从1开始的编号
@first:是否是第一个元素
@last:是否是最后一个元素
{for $i to 5}
{$i}:锄禾日当午<br>
{/for}
<hr>
{for $i to 5 step=0}
步长为2的时候{$i}:锄禾日当午<br>
{/for}
for语法:
{for 初始值 to 结果值 [step 步长]}
{/for}
while语法:
{while 条件}
{/while}
注意:while条件有的和php类似

自定义变量修饰符

变量修饰符存放在plugins目录中
规则:
1. 文件的命名规则:modifier.变量修饰器名称.php
2. 文件内方法命名规则:smarty_modifier_变量修饰器名称(形参...){}

避免smarty解析

smarty的定界符和css、js、中的大括号产生冲突的时候,css、js中的大括号不要被smarty解析
1. 更换定界符
2. 左大括号后面添加空白符
3. 用{literal}{/literal}来包含js和CSS

缓存

页面缓存,空间缓存,数据缓存,smarty中的缓存就是页面缓存
开启缓存:$smarty->caching=true或者1   //开启缓存
缓存的更新:
1. 删除缓存,系统会重新生成新的缓存文件
2. 更新模板文件,配置文件,缓存自动更新
3. 过了缓存的生命周期,默认是3600秒
4. 强制更新:$smarty->force=true;
5. 缓存的生命周期:$smarty->cache_lifetime=-1|0|N
-1:永远不过期
0:立即过期
N:有效期是N秒,默认是3600秒

局部不缓存:

1. 变量不缓存   {$变量名 nocache}
2. 整个块不缓存:{nocache}  {/nocache}

例子:

不缓存:{$smarty.now nocache}
不缓存:{nocache}
{$smarty.now}<br>
{/nocache}

缓存分页

$smarty->caching=1;
$smarty->display('模板页面','识别id');

缓存集合

$smarty->display('模板页面','$color|$size');

清楚缓存

$smarty->clearCache('模板',[识别id]);
$smarty->clearAllCache();//清楚所有缓存
  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2021-11-10 12:11:34  更:2021-11-10 12:11:36 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/14 14:28:51-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码