博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
smarty模板入门笔记
阅读量:6734 次
发布时间:2019-06-25

本文共 3689 字,大约阅读时间需要 12 分钟。

hot3.png

 

smarty笔记

1、smarty里面默认标签是{},在里面调用值。但是当解析的时候,会把javascript里面的花括号也解析成smarty里面的标签。因此,我们需要自定义一下smarty的标签。

左边界标签:[left_delimiter]

右边界标签:[right_delimiter]

那我们就可以在php文件中定义了:

$smarty->left_delimiter = “{hd:”;

$smarty->right_delimiter = “/}”;

那么在模板html文件中就要使用{hd:$data}了。

注意:标签,自己定义,要定义一个好记的。自己看着办。

2、  在模板中使用函数

第一种:使用内置的函数

eg: {hd:$data|substr:0:2|strtoupper} 

 其中使用了substr()strtoupper()两个函数,函数之间用|来隔开。函数与参数和参数与参数用冒号:隔开。

第二种:使用自定义的函数

那么首先要写一个包含自定义方法的php文件,比如在smarty目录下建立一个lib文件夹,再在其下面建立function.php文件。然后在index.php中把该文件包含进来。include “./smarty/lib/function.php”

那我们在function.php定义一个把文字描红的函数。代码如下:

<?php

       function red($str){

              return "<span style='color:red'>{$str}</span>";

       }

?>

eg: {hd:$data|substr:0:2|strtoupper|red

3、配置文件,创建一个smarty.php文件

<?php

/*常用的配置文件*/

       include "./smarty/Smarty.class.php";

       include "./smarty/lib/function.php";

       $smarty = new Smarty();

       $smarty->left_delimiter = "{hd:}";

       $smarty->right_delimiter = "}";

       $smarty->template_dir = "./smarty/tpl";

       $smarty->compile_dir = "./smarty/compile";

?>

4、我发现smarty的内置变量只能用原始定界符号{},否则会不显示。于是还是用默认定界符。那么解决javascript{}smarty冲突的方法如下:

Smarty 提供了一个转义一段代码的标签:{literal}…{/literal}  javascript的代码写在这两个标签中间。

5、Smarty视图模板的复用

传统的PHP程序中是在PHP代码中使用<?php include “top.html”?>;包含进去.

smarty中,要在模板html文件中包含。{include file=”top.html”}

6、  section用法

7、  自定义任意smarty函数和标签

1、在pulgins里面,以modifier开头的,我们复制一份,修改其中间的名字为自己需要的,然后重写里面的函数即可。

eg:其中substr_d是我们新定义的函数名称,前缀smarty_modifier_不要动他。

<?php

function smarty_modifier_substr_d($string,$len)

{

    return mb_substr($string,0,$len,"utf-8");

}

?>

在模板中调用。如:{$bbs|substr_d:3}

2、还有一种是以function开头的,我们同样弄一份,比如这里设置一个调用jquery插件的方法。

<?php

function smarty_function_jquery($params, &$smarty)

{

    return "<script type='text/javascript' src='jquery.min.js'></script>";

}

?>

在模板中调用。如:{jquery}

3、还是以function开头的,定义一个标签,调用css文件。其中$params是一个数组,返回标签后面的值。如这里返回file的值houduwang.css给变量$cssFile. 与上面jquery不同之处在于后面跟了参数。

<?php

function smarty_function_css($params, &$smarty)

{

     $cssFile = $params['file'];

     return "<link rel='stylesheet' type='text/css' href='{$cssFile}' />";

}

?>

在模板中调用。如:{css file=”houdunwang.css”}

8、  smarty操作数据库

function.php中定义操作数据的函数,并返回值.如下面:

<?php

       function query1($sql){

              static $db=null;

              if(is_null($db)){

                     mysql_connect("localhost","root","");

                     mysql_select_db("think");

                     mysql_query("set names utf8");

              }

              $result = mysql_query($sql);

              $rows = array();

              while($row = mysql_fetch_assoc($result)){

                     $rows[] = $row;

              }

              return $rows;

       }

      

       function query2($sql){

              static $db=null;

              if(is_null($db)){

                     mysql_connect("localhost","root","");

                     mysql_select_db("think");

                     mysql_query("set names utf8");

              }

              $result = mysql_query($sql);

              $arr =array();

              while($info = mysql_fetch_array($result)){

                     $arr[] = $info;

              }

              return $arr;

}

?>

9、  自定义block标签

plugins文件夹下面以block开头的文件,自定义一个叫做smarty_block_arclist.php的文件。然后写入以下代码:其中$content是指标签中包含的内容。

<?php

       function smarty_block_arclist($params, $content, &$smarty)

       {

       $row = isset($params['row'])?$params['row']:3;#显示条数

       $limit = "limit ".$row;

       $sql = "select * from hd_wish ".$limit;

       $result = mysql_query($sql);

       $rows = query($sql);

       if(!$rows){

              return false;

       }

       foreach($rows as $row){

              $tmp = $content;

              $fieldName = array_keys($row);#取得字段名

              foreach($fieldName as $name){

                     $tmp = str_replace("[\$field.".$name."]",$row[$name],$tmp);

              }

              $str.=$tmp;

       }

       return $str;

}

?>

然后在模板文件中写入以下标签块

{arclist row="3"}

       [$field.id] | [$field.username] <br>

{/arclist}

10、            smarty缓存cache使用

<?php

       header("Content-type:text/html;charset=utf-8");

       include "smarty.php";

       $smarty->caching = 1;//开启缓存

       $smarty->cache_dir = "cache";//缓存目录

       $smarty->cache_lifetime = 10;//缓存时间

       if(!$smarty->is_cached("8.html")){

              $data = query("select * from hd_wish");

              $smarty->assign("data",$data);

       }

       $smarty->display("8.html")

?>

转载于:https://my.oschina.net/u/214052/blog/396080

你可能感兴趣的文章
SQL Server附加数据库出现错误5123的正确解决方法
查看>>
插入图片、背景图片
查看>>
c++官方文档-class
查看>>
腾讯2017暑期实习编程题2
查看>>
Android定位&地图&导航——基于百度地图,实现自定义图标绘制并点击时弹出泡泡...
查看>>
Asymptote 学习记录(3) 画赵爽弦图练习
查看>>
泰勒公式的发现以及证明
查看>>
FPGA管脚约束
查看>>
软件测试用例
查看>>
oracle 自动启动
查看>>
python mysql 单表查询 多表查询
查看>>
day10决策树和随机森林实践
查看>>
rsyslog日志服务的配置文件分析
查看>>
nyoj113字符串替换
查看>>
android handler概念解释
查看>>
eclipse代码左虚线对齐设置
查看>>
storm trident的filter和函数
查看>>
设计模式-命令模式简单理解
查看>>
使用 Bullet,BulletManager 在 XNA 中创建子弹攻击目标(十五)
查看>>
C中的sizeof
查看>>