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 相关文章推荐
提取HTML标签
Oct 09 PHP
php下图片文字混合水印与缩略图实现代码
Dec 11 PHP
PHP之数组学习
May 29 PHP
Fine Uploader文件上传组件应用介绍
Jan 06 PHP
php 创建以UNIX时间戳命名的文件夹(示例代码)
Mar 08 PHP
php轻松实现中英文混排字符串截取
May 28 PHP
php使用PDO方法详解
Dec 27 PHP
PHP解析RSS的方法
Mar 05 PHP
Yii获取当前url和域名的方法
Jun 08 PHP
PHP安装threads多线程扩展基础教程
Nov 17 PHP
使用XHProf查找PHP性能瓶颈的实例
Dec 13 PHP
PHP getDocNamespaces()函数讲解
Feb 03 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
PHP 危险函数全解析
2009/09/09 PHP
在MongoDB中模拟Auto Increment的php代码
2011/03/06 PHP
smarty表格换行实例
2014/12/15 PHP
php使用file函数、fseek函数读取大文件效率对比分析
2016/11/04 PHP
php_pdo 预处理语句详解
2016/11/21 PHP
Laravel框架实现多数据库连接操作详解
2019/07/12 PHP
window.js 主要包含了页面的一些操作
2009/12/23 Javascript
javascript 图片上一张下一张链接效果代码
2010/03/12 Javascript
js下通过prototype扩展实现indexOf的代码
2010/12/08 Javascript
JavaScript生成福利彩票双色球号码
2015/05/15 Javascript
jQuery的框架介绍
2016/05/11 Javascript
AngularJS基础 ng-focus 指令简单示例
2016/08/01 Javascript
浅谈$_FILES数组为空的原因
2017/02/16 Javascript
JS中利用localStorage防止页面动态添加数据刷新后数据丢失
2017/03/10 Javascript
微信小程序实现图片懒加载的示例代码
2017/12/13 Javascript
vue使用原生js实现滚动页面跟踪导航高亮的示例代码
2018/10/25 Javascript
详解Vue中watch对象内属性的方法
2019/02/01 Javascript
Vue 刷新当前路由的实现代码
2019/09/26 Javascript
vue-cli4项目开启eslint保存时自动格式问题
2020/07/13 Javascript
[00:32]2018DOTA2亚洲邀请赛Secret出场
2018/04/03 DOTA
跟老齐学Python之关于循环的小伎俩
2014/10/02 Python
Python中集合类型(set)学习小结
2015/01/28 Python
利用Tkinter(python3.6)实现一个简单计算器
2017/12/21 Python
numpy库与pandas库axis=0,axis= 1轴的用法详解
2019/05/27 Python
Python+OpenCV实现实时眼动追踪的示例代码
2019/11/11 Python
python+appium+yaml移动端自动化测试框架实现详解
2020/11/24 Python
HTML5实现多张图片上传功能
2016/03/11 HTML / CSS
使用html2canvas实现将html内容写入到canvas中生成图片
2020/01/03 HTML / CSS
Allsole美国/加拿大:英国一家专门出售品牌鞋子的网站
2018/10/21 全球购物
澳大利亚优质的家居用品和生活方式公司:Bed Bath N’ Table
2019/04/16 全球购物
公司门卫岗位职责
2015/04/13 职场文书
创业计划书之儿童理发店
2019/09/27 职场文书
python中print格式化输出的问题
2021/04/16 Python
解决Goland 同一个package中函数互相调用的问题
2021/05/06 Golang
详解java如何集成swagger组件
2021/06/21 Java/Android
Python查找算法的实现 (线性、二分,分块、插值查找算法)
2022/04/24 Python