斯马特y - 学习

简介

Smarty系统是基于使用二个模板文件(.tpl),它包含了展现代码,何况在里头这厮展览示层开拓者获取数据是从PHP 开荒者提供的,那样两侧可以隔开分离开来。

金沙网上娱乐赌场 1图片.png

Smarty语法

斯Matty具备本身的语法,这样本领从PHP代码和体现层代码中区别出来,用于smarty引擎去管理。大家开垦二个PHP应用,要求提供出利用的目录布局templates,templates_cconfigs

金沙网投网站,Smarty变量

斯Matty变量提供了接口给PHP代码。1.单个值或许数组。2.Smarty的一时变量:

{assign var="username" value "Sarah Conner"}

POST, COOKIE, SESSION数据

斯马特y系统提供了过多内建艺术去赢得POST,董事长KIE, SESSION数据。

$smarty.cookies.<value name>$smarty.session.<value name>$smarty.request.<value name>$smarty.post.<value name>

内建变量修饰

1.变动大小写

{$variable|capitalize}{$variable|lower}

2.缩进

{$variable|indent:<#ofspaces>}

3.使用HTML的<br/>替代换行符

{$variable|nl2br}

4.其余的

{section}用于循环

{section name=<name value> loop=$array} {$array[<name value>].<column name>}{/section}

本文实例汇报了斯马特y保留变量用法。分享给我们供我们参谋,具体如下:

什么是Smarty?

Smarty是模板(html+css卡塔尔引擎能力之少年老成,能够使得“php代码” 与 “html代码” 分离的本事都叫作模板引擎手艺。(原本的信用社的php代码使用了原生的php,网页展现是由html和php混合在同步付出的,根本不窘迫。后来接受thinkphp框架,才使的html和php代码分开,很清晰),除了smarty外还应该有其余的沙盘模拟经营引擎本事:smarty、Template Lite、 TinyButStrong 、XTemplate 、Savant、 phemplate 、Dwoo、Sugar等。

Smarty使用

目录构造

金沙网上娱乐赌场 2金沙网上娱乐赌场,澳门金沙手机版,图片.png

/libs/中是大家下载的意气风发体斯Matty文件夹。大家要确立一个.php文本和相对应的.tpl文本(保存在templates文件夹下)。

smartyHeader.php:

<?phprequire_once('./libs/Smarty.class.php');$smarty = new Smarty();$smarty->caching = true;$smarty->cache_lifetime = 120; // 我们设置了编译后的模板文件存储时间120s$smarty->template_dir = './templates'; // 配置模板目录$smarty->compile_dir = './templates_c'; // 配置编译后的模板目录

test.php:

<?phprequire('./smartyHeader.php');$msg = 'hello world, this is my first Smarty!';$title = 'Smarty Title';$smarty->assign('title', $title); // 我们可以将这个`title`称作doorway$smarty->assign('message', $msg);$smarty->display('test.tpl'); // 会将这个模板发送给smarty引擎

1)引入创造金沙网上娱乐赌场 3smarty的变量。3)大家要指明关联的.tpl文件。

test.tpl:

<html> <head> <title>{$title}</title> </head> <body> {$message} </body></html>

for循环

 {foreach from = $movie_arr key=title item=dir} // key指定为title item指定为dir,注意不是value指定为 {$title} {$dir} <br> {/foreach}

circle

{circle values='gray, sliver'}

 <table> {foreach from = $movie_arr key=title item=dir} <tr style="background: {cycle values='gray, sliver'}"> <td>{$title}</td> <td>{$dir}</td> </tr> {/foreach} </table>

使用smartyBC可以用{php}标签

{php} echo sha1;{/php}

{$smarty}变量没有必要分配,它可以直接在模板中,用于访谈片段特别的模版变量,有不菲变量,比方说:页面哀告变量$_GET,$_POST,$_REQUEST,$_SESSION,$_主管KIE,还也是有点诸如景况变量$_ENV,$_SE哈弗VE奥德赛,它们能够直接通过如下方式来获得:

何以要有模板引擎本领

举例说上边包车型客车代码,是php和html混合编程的例证,html代码和php混合在一起了,借使工程中现身过多那样代码特别倒霉,html部分应该是前面五个负担的有的,那样的话前端必得懂php,何况php程序员必需熟习js,html,不便利分工同盟,因为效益未有完全剥离,而是紧密的关系在联合签名了,再有少数,html文件php语法是一贯不提示的,种种符号混在合作,平日轻巧出错。下边包车型地铁四个案例php把js的行事给做了,是不无独有偶的。

<div><?php echo "".$title.""; ?></div>

<td class="labels">
    <!--遍历学生个性标签并展示-->
        <?php
            foreach($labels as $v){
                //定义数组保存标签块展示颜色
                $class_name = array('blue','red','yellow','green');
                $index = array_rand($class_name);
                echo ''.$v.'';
            }
        ?>
</td>

题指标根本是html中包括太多的php语法,能够经过事情发生前的预订简化php变量在html的象征,然后在真的运营时候遵照定点的模版将自定义的变量替换来需求的php语法就足以了。php加载html文件的各类形成了:
php->html模板文件->模板引擎拆解深入分析标签->php和html混合文件

日常来讲是一个谈得来完结的分寸的模版引擎。

金沙网上娱乐赌场 4

smarty工程目录.png

index.php 中先用模板引擎将模板翻译成要求的html和php混编文件

 $name = 'zhangsan';
 $age = 10;
 require '../MiniSmarty.php';
 $smarty = new MiniSmarty();
 $smarty->assign('name',$name);//传递变量的值和属性,用于展示
 $smarty->assign('age',$age);
 $smarty->translate('../view/index.html');//翻译对应的模板
 require "../phtml/index.html.php";

模板引擎根据准绳替换变量,何况将替换的内容保留到混编文件。

class MiniSmarty
{
    private $vars;
    function __construct()
    {
       $this->vars = array();
    }
    function get($varname){
        return $this->vars[$varname];
    }
    function assign($varname = 'null',$varval = 0){
        $this->vars[$varname] = $varval;
    }
    function translate($tp_file){
        //比如 {$var} 应该翻译为 <?php echo $var >
        $compf =  "../phtml/".basename($tp_file).".php";
        if(file_exists($compf)&&filemtime($compf)<filemtime($tp_file)) {
            require $compf;
            return;
        }
        $content = file_get_contents($tp_file);
        $content = preg_replace('#{\$([a-zA-Z][a-zA-Z0-9]*)}#',"<?php echo ".'$this->vars['.'"$1"'.']'."?>",$content);
        //替换完成后保存为html+php混编文件
        file_put_contents($compf,$content);
        require $compf;
    }
}

实则应用中准绳肯定非常多,相对不仅唯有下边那一个。比方援引全局变量,if,for语句等等,所以斯Matty引擎能够提供强有力的沙盘模拟经营替换功能。

{$smarty.get}

学学应用斯马特y

** 使用的smarty版本为3.1.16**
讲smarty的lib文件夹加入工程,展开smarty.class.php 查看模板和混编文件的目录,能够依靠要求改换.

金沙网上娱乐赌场 5

模板文件目录.png

还会有别的的装置,比方分隔符标识,left_delimiter,right_delimiter 分别是{,};

选拔smarty后调换的混编文件能够见到,和地点自个儿完结替换的秘籍接近

    <div>姓名:<?php echo $_smarty_tpl->tpl_vars['name']->value;?>
</div>
    <div>年龄:<?php echo $_smarty_tpl->tpl_vars['age']->value;?>
</

同$_GET获取url参数

自定义变量assign

自定义的变量能够一直通过assign格局同地方这样在模板中调用.
<tr><td>assign变量</td><td>{$name}</td></tr>

如:$_GET['page'] 通过{$smarty.get.page}获取

大局保留变量

全局变量比方_GET,_POST,_SESSION等等通过如下情势调用
$smarty.xxx.variables

<tr><td>保留变量[_GET|_POST..]</td><td>{$smarty.get.getsvar}</td></tr>
{$smarty.post}

配备变量

网络有些比较容易的变量消息,美术专业职员能够团结调用,没有须求程序猿,职业比较独立,能够完结通过配备文件落到实处配置变量消息。私下认可的铺排目录是configs,所以在工程目录下创立configs,然后创立布局文件如configs,内容格式 变量名=变量值,比如:

COMPANY = 'beijing hskaoyan'
AUTHOR = 'ALL PROGRAMER'
TIME = '2017-3-10'

在模板文件首先应当引进改文件

{config_load file = "configs"}

下一场使用下面方式调用

{#variable#}或者{$smarty.config.variable}

<tr><td>本地配置文件</td><td>{#COMPANY#}-{$smarty.config.AUTHOR}</td></tr>

遇见难题,smarty语法和style的语法冲突

  1. 能够透过在style的{,}内部左右加空格。
    2.把smarty的标识{}改良为任何的标识。
    3.安装literal标识,内部内容不通过smarty深入解析。{literal}..{/literal}

布局文件:first、second、thrid 分别是节

[FIRST]
BC=yellow
TC=red
LH=30px
[SECOND]
BC=red
TC=yellow
LH=30px
[THRID]
BC=black
TC=yellow
LH=30px

在html能够钦点布置文件的section,读取差异的源委。

{config_load file = "configs" section=$style}
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        div { color:{#TC#};background-color:{#BC#};line-height:{#LH#};margin: 0 auto }
    </style>
</head>
<body>
    <div>这是行内标签.根据不同的配置颜色不同</div>
</body>
</html>

同$_POST获取参数

数组遍历

1.foreach

{foreach  数组 as 下标变量  =>  值变量}
{foreach  数组 as 值变量}
    做具体数组遍历
{foreachelse}
    数组没有任何元素信息
{/foreach}

如下:

        {foreach $books as $key => $value}
        <tr><td>数组循环,索引{$value@index}</td><td>{$key}{$value}</td></tr>
        {foreachelse}
        <tr><td>数组循环</td><td>没有元素</td></tr>
        {/foreach}
{section  name=”自定义名称”  loop=”被遍历数组”}
      {$数组[名称]}  获得被遍历出来的元素的值
        关键字使用:
        {$smarty.section.名称.iteration}
              {$smarty.section.名称.index}
              {$smarty.section.名称.first}
              {$smarty.section.名称.last}
{/section}
{$smarty.request}

分段协会

  1. 单路分支
    {if 条件} 代码 {/if}
  2. 双路分支
    {if 条件}{else}{/if}
  3. 多路分段
    {if 条件}{elseif 条件}{elseif 条件}...{/if}

同$_REQUEST得到央求参数

html标签使用间隔

$smarty->assign('sexs',array(0 =>'男',1 =>'女', 2 =>'保密'));
$smarty->assign('sex_select',1);
$smarty->assign('schools',array(0 =>'请选择',1 =>'小学', 2 =>'初中',3 =>'高中',4=>'大学'));
$smarty->assign('school_select',0);
$smarty->assign('hobbys',array(0 =>'篮球',1 =>'足球', 2 =>'羽毛球'));
$smarty->assign('hobbys_selects',array(0,1));

{html_radios name="user_sex" options=$sexs selected=$sex_select}
{html_checkboxes name="user_hobbys" options=$hobbys selected=$hobbys_selects}
{html_options name="user_school" options=$schools selected=school_select}

越来越多能够查看手册

{$smarty.cookie}

本来就有模板和smarty结合

  1. 模板文件引进css、js、img文件路线相对“入口程序”文件设置
  2. 设置css样式文件本人的图片路线路线相对css文件本人安装
![](https://upload-images.jianshu.io/upload_images/2747346-bc25affc830d5c75.png)

模板和html结合路径设置.png

经过上海教室能够看出来,css文件本人的图片路径必得绝对于css文件本身设置。
结合具体步骤:
把模版复制到View目录,复制js、css、img静态财富文件到public内定目录,在模板文件中安装路线引进静态能源(js/css/img卡塔尔文件,路线相对进口文件设置css文件本人有引进img图片,其路线相对css文件设置,在输入php文件获得变量音信用于模板展现。