PHP模板引擎Smarty自定义变量调解器用法


Posted in PHP onApril 11, 2016

本文实例讲述了PHP模板引擎Smarty自定义变量调解器用法。分享给大家供大家参考,具体如下:

在 PHP 中,有很多处理文本的函数,您可以把要处理的文本通过函数处理之后,再调用 Smarty 模板引擎中的 assign() 赋值给变量,分配到模板中进行显示。

Smarty 中的变量调解器和 PHP 中处理文本的函数相似,不过语法不相同,在 Smarty 中,是通过 "|" 后面直接跟调解器函数名,如果有参数,得加在 ":" 后面,多个参数的话,累加即可。

格式:{$var|modifier1:"参数1":"参数2":参数3|modifier2|modifier3|...}

定义调解器的文件必须放置在 Smarty 中,具体路径是:libs/plugins/。其文件名称,必须按照 Smarty 的格式 modifier.调解器名.php

下面通过一个实例演示 Smarty 中,自定义变量调解器的使用

程序思路:做两个变量调解器,功能是:一个转换文本;一个截取文本。

init.inc.php(Smarty初始化文件)

<?php
  define('ROOT_PATH', dirname(__FILE__)); //设置网站根目录
  require ROOT_PATH.'/libs/Smarty.class.php'; //加载 Smarty 模板引擎
  $_tpl = new Smarty(); //创建一个实例对象
  $_tpl->template_dir = ROOT_PATH.'/tpl/'; //设置模板文件目录
  $_tpl->compile_dir = ROOT_PATH.'./com/'; //设置编译文件目录
  $_tpl->left_delimiter = '<{'; //设置左定界符
  $_tpl->right_delimiter = '}>'; //设置右定界符
?>

index.php(主文件)

<?php
  define('CONST_VAR', 'ABC');
  require 'init.inc.php'; //引入模板初始化文件
  global $_tpl;
  $_str = 'abcdEFGHigklmnOPQRSTuvwsYz'; //定义一个字符串
  $_tpl->assign('str',$_str); //字符串赋值给str
  $_tpl->assign('str1',strtolower($_str)); //字符串全部转换为小写赋给str1
  $_tpl->assign('str2',strtoupper($_str)); //字符串全部转换为大写赋给str2
  $_tpl->assign('str3',ucfirst($_str)); //字符串首字母转换为大写赋给str3
  $_tpl->assign('str4',substr($_str, 0,15).'...'); //截取字符串前15个字符,后面的用'...'代替,并赋给str4
  $_tpl->assign('str5',strtoupper(substr($_str, 0,15)).'...'); //截取字符串前15个字符转换为大写,后面的用'...'代替,并赋给str4
  $_tpl->display('index.tpl'); //引入模板
?>

tpl/index.tpl

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Smarty 中的变量调解器</title>
</head>
<body>
  <{$str}><br />   <!-- 输出字符串原形 -->
  <{$str1}><br />  <!-- 输出字符串转换为小写-->
  <{$str2}><br />  <!-- 输出字符串转换为大写 -->
  <{$str3}><br />  <!-- 输出字符串首字母大写 -->
  <{$str4}><br />  <!-- 截取字符串,截取15个字符串,后面的用'...'代替 -->
  <{$str5}><br />  <!-- 截取字符串,截取15个字符串,转换为大写,后面的用'...'代替 -->
  <!--
    您会发现,使用赋值过来的变量,使用起来不是很灵活,
    如果需要处理字符串,就必须得在主文件中设立一个新变量,并把值赋给这个新变量。
    使用变量调解器,可灵活的处理字符串
   -->
  <{$str|transform}><br />      <!-- 输出字符串原形-->
  <{$str|transform:"lower"}><br />  <!-- 输出字符串转换为小写-->
  <{$str|transform:"upper"}><br />  <!-- 输出字符串转换为大写 -->
  <{$str|transform:"firstdx"}><br /> <!-- 输出字符串首字母大写 -->
  <{$str|subString:0:15:"###"}><br /> <!-- 截取字符串,截取15个字符串,后面的用'###'代替 -->
  <{$str|subString:0:15:"@@@"|transform:"upper"}><br />  <!-- 截取字符串,截取15个字符串,后面的用'@@@'代替 -->
  <{$str|transform:"upper"|subString:0:15:"@@@"}><br />  <!-- 功能同上 -->
</body>
</html>

/libs/plugins/modifier.transform.php(转换文件调解器)

<?php
  /**
   * smarty_modifier_transform
   * 字符串转换的变量调解器函数
   * @param string $string 处理字符串
   * @param string $type  处理类型
   */
  function smarty_modifier_transform($string,$type) {
    switch ($type) {
      case 'upper' :
        $str = strtoupper($string);
        break;
      case 'lower' :
        $str = strtolower($string);
        break;
      case 'firstdx' :
        $str = ucfirst($string);
        break;
      default:
        $str = $string;
    }
    return $str;
  }
?>

lib/plugins/modifier.subString.php(截取文本调解器)

<?php
  /**
   * smarty_modifier_subString
   * 处理截取字符串调解器
   * @param string $string  处理字符串
   * @param int $start_num  开始位置,默认从头开始
   * @param int $end_num   结束位置,默认20
   * @param string $addTo   追加字符串,默认'...'
   */
  function smarty_modifier_subString($string,$start_num=0,$end_num=20,$addTo='...') {
    $_str = '';
    if (strlen(substr($string, $start_num, $end_num))>=$end_num) {
      $_str = substr($string, $start_num, $end_num).$addTo;
    } else {
      $_str = substr($string, $start_num, $end_num);
    }
    return $_str;
  }
?>

执行结果:

PHP模板引擎Smarty自定义变量调解器用法

通过上面的实例,表明调解器文件必须放在 Smarty 的插件目录 plugins 下,并且命名必须遵循 Smarty 的规则,这样,才能调用到您编写的调解器函数。还有一点需要说明,定义的函数名称也必须符合 Smarty 内定的命名规则,例如:smarty_modifier_XXX,并且一个调解器文件,只能放一个函数,不能放置多个。

好了,自定义调解器先介绍到这里, Smarty 中有很多已经写的调解器函数,可以拿来直接调用或修改成您自己喜欢的风格。关于 Smary 内置的调解器,后续章节会有详细介绍。

希望本文所述对大家基于smarty模板的PHP程序设计有所帮助。

PHP 相关文章推荐
php自定义函数之递归删除文件及目录
Aug 08 PHP
PHP HTML JavaScript MySQL代码如何互相传值的方法分享
Sep 30 PHP
php接口与接口引用的深入解析
Aug 09 PHP
js+php实现静态页面实时调用用户登陆状态的方法
Jan 04 PHP
PHP PDO fetch 模式各种参数的输出结果一览
Jan 07 PHP
php判断用户是否手机访问代码
Jun 08 PHP
php实现的简单美国商品税计算函数
Jul 13 PHP
php算法实例分享
Jul 14 PHP
PHP读取并输出XML文件数据的简单实现方法
Dec 22 PHP
启用OPCache提高PHP程序性能的方法
Mar 21 PHP
PHP中Static(静态)关键字功能与用法实例分析
Apr 05 PHP
Laravel 微信小程序后端实现用户登录的示例代码
Nov 26 PHP
PHP中如何防止外部恶意提交调用ajax接口
Apr 11 #PHP
PHP读取mssql json数据中文乱码的解决办法
Apr 11 #PHP
PHP模板引擎Smarty中的保留变量用法分析
Apr 11 #PHP
PHP模板引擎Smarty内建函数foreach,foreachelse用法分析
Apr 11 #PHP
PHP模板引擎Smarty之配置文件在模板变量中的使用方法示例
Apr 11 #PHP
PHP模板引擎Smarty中变量的使用方法示例
Apr 11 #PHP
php实现生成验证码实例分享
Apr 10 #PHP
You might like
打造计数器DIY三步曲(上)
2006/10/09 PHP
COM in PHP (winows only)
2006/10/09 PHP
MySQL授权问题总结
2007/05/06 PHP
PHP中date()日期函数有关参数整理
2011/07/19 PHP
浅析虚拟主机服务器php fsockopen函数被禁用的解决办法
2013/08/07 PHP
php实现将任意进制数转换成10进制的方法
2015/04/17 PHP
微信支付扫码支付php版
2016/07/22 PHP
jQuery formValidator表单验证插件开源了 含API帮助、源码、示例
2008/08/14 Javascript
40款非常棒的jQuery 插件和制作教程(系列一)
2011/10/26 Javascript
ejs v9 javascript模板系统
2012/03/21 Javascript
js jquery ajax的几种用法总结(及优缺点介绍)
2014/01/28 Javascript
js判断横竖屏及禁止浏览器滑动条示例
2014/04/29 Javascript
AngularJS实现表单验证功能
2017/01/09 Javascript
jQuery修改DOM结构_动力节点Java学院整理
2017/07/05 jQuery
vue中实现弹出层动画效果的示例代码
2020/09/25 Javascript
[08:17]Ti9 现场cosplay
2019/09/10 DOTA
Python实现对PPT文件进行截图操作的方法
2015/04/28 Python
解析Python中的生成器及其与迭代器的差异
2016/06/20 Python
python函数中return后的语句一定不会执行吗?
2017/07/06 Python
pandas.DataFrame.to_json按行转json的方法
2018/06/05 Python
Python利用Django如何写restful api接口详解
2018/06/08 Python
Python SVM(支持向量机)实现方法完整示例
2018/06/19 Python
python3中zip()函数使用详解
2018/06/29 Python
Python实现二维曲线拟合的方法
2018/12/29 Python
解决django-xadmin列表页filter关联对象搜索问题
2019/11/15 Python
Python使用Chrome插件实现爬虫过程图解
2020/06/09 Python
css3实现图片遮罩效果鼠标hover以后出现文字
2013/11/05 HTML / CSS
C# .NET面试题
2015/11/28 面试题
村官学习十八大感想
2014/01/15 职场文书
大学军训感言800字
2014/02/27 职场文书
3.15国际消费者权益日主题活动活动总结
2014/03/16 职场文书
学校出纳员岗位职责
2014/03/18 职场文书
2014年实习班主任工作总结
2014/11/08 职场文书
党员先进事迹材料
2014/12/19 职场文书
给朋友的赠语
2015/06/23 职场文书
HTML怎么设置下划线?html文字加下划线方法
2021/12/06 HTML / CSS