教大家写个smarty插件
时间:2008-11-24
来源:互联网
写这个插件是因为我觉得Smarty的截取字符函数太菜了,不能截取UTF8的字符!所以我今天就是为了实现截取UTF8字符功能而写这个教程的!!开始了:
1.首先,下载Smarty。
到http://www.smarty.net/ 下载一个稳定的版本。
2.安装Smarty。
其实Smarty是不用安装的,只要解压到你需要的地方就可以了!
3.了解插件目录。
解压之后,我会会发现有个plugins的文件夹,这个文件夹就是放置插件的目录。
好了,我们在这个文件夹中新建一个文件function.utf8cut.php,其中utf8cut这个就是函数名,用文本编辑器打开它,写入以下代码:
注意函数名的写法:要以“smarty_function_ ” 或者“smarty_modifier_”为前缀,前一种情况是PHP本身没有的函数,后一种是修改PHP本身有的函数!!
[php]
<?php
function smarty_function_utf8cut($string, $leng=100, $dot='...') {
if(!isset($string) || $string == '') {
return '';
}
preg_match_all("/.{1}/", $string, $chars);
$c = '';
$all = array();
$timer = 0;
foreach($chars[0] as $char) {
$timer++;
if(ord($char) > 127) {
$c .= $char;
if($timer == 3) {
$all[] = $c;
$c = '';
$timer = 0;
}
} else {
$c = $char;
$timer = 0;
$all[] = $c;
$c = '';
}
}
if(sizeof($all) <= $leng) {
return implode('', $all);
}
return implode('',array_slice($all, 0, $leng)).$dot;
}
?>
[/php]
至于这个函数是怎么样截取utf8字符的,自己可以研究一下。Smarty插件函数都要返回一个值的。
好了,现在我们可以使用这个插件了:
index.tpl
<html>
<head></head>
<body>
<h2>插件实现</h2>
<p>{$content|utf8cut:20}</p>
</body>
</html>
可以看见utf8cut就是我们刚才写的函数,冒号后面的是我们的第二个参数(为什么不是第一个,因为第一个是Smarty帮我们自动写入的,就是$content)。如此类推,第三个参数可以这样utf8cut:10:'......';
index.php
<?php
require_once 'smarty/smarty.class.php';
$smarty = new Smarty();
$smarty->assign('content','随意混用PHP 与其他Web 页面标记将导致程序逻辑、HTML、层叠样式表(Cascading Style Sheets,CSS)和JavaScript 处于混乱状态');
$smarty->display('index.tpl');
?>
输出:
- 插件实现
- 随意混用PHP 与其他Web 页面标记将...
[ 本帖最后由 liexusong 于 2008-11-24 13:57 编辑 ]
作者: liexusong 发布时间: 2008-11-24
作者: 生命如蓝 发布时间: 2008-11-24
作者: liexusong 发布时间: 2008-11-24
作者: qingqiang 发布时间: 2008-11-24
作者: 冯.于安 发布时间: 2008-11-24
作者: hoday 发布时间: 2008-11-24
哈哈
作者: love__xijun 发布时间: 2008-11-25
作者: sheak 发布时间: 2008-11-25
之前乔总 讲课时 讲过改写 truncate 函数 支持utf-8 的截取~
哈哈
你试试就知道!
作者: liexusong 发布时间: 2008-11-25
作者: xiejohnson 发布时间: 2008-11-25
作者: ieliwb 发布时间: 2008-11-25
<?php
/**
* Smarty plugin
* @package Smarty
* @subpackage plugins
*/
/**
* Smarty truncate modifier plugin
*
* Type: modifier<br>
* Name: truncate<br>
* Purpose: Truncate a string to a certain length if necessary,
* optionally splitting in the middle of a word, and
* appending the $etc string or inserting $etc into the middle.
* @link http://smarty.php.net/manual/en/language.modifier.truncate.php
* truncate (Smarty online manual)
* @author Monte Ohrt <monte at ohrt dot com>
* @param string
* @param integer
* @param string
* @param boolean
* @param boolean
* @return string
*/
function smarty_modifier_mtruncate($string, $length = 80, $etc = '...')
{
/* if ($length == 0) return '';
if($length>=strlen($string)) return $string;
$string = strip_tags($string);
$s="";
for($i=0;$i<$length;$i++)
{
if(ord($string{$i})>127)
{
$s.=$string{$i}.$string{++$i};
continue;
}else{
$s.=$string{$i};
continue;
}
}
return $s.$etc; */
$string = strip_tags($string);
if (strlen($string) <= $length )
{
return $string;
}
else
{
$I = 0;
while ($I < $length)
{
$StringTMP = substr($string,$I,1);
if ( ord($StringTMP) >=224 )
{
$StringTMP = substr($string,$I,3);
$I = $I + 3;
}
elseif( ord($StringTMP) >=192 )
{
$StringTMP = substr($string,$I,2);
$I = $I + 2;
}
else
{
$I = $I + 1;
}
$StringLast[] = $StringTMP;
}
$StringLast = @implode("",$StringLast);
if($etc)
{
$StringLast .= "...";
}
return $StringLast;
}
}
/* vim: set expandtab: */
?>
[/php]
以前写的,经常用,截字符的
[ 本帖最后由 wukewei00o 于 2008-11-25 08:30 编辑 ]
作者: wukewei00o 发布时间: 2008-11-25
作者: 小郭同志 发布时间: 2008-11-26
作者: wangzhe 发布时间: 2008-11-26
作者: phpzxh 发布时间: 2008-12-29
作者: max_qu 发布时间: 2009-03-20
作者: kwlong2008 发布时间: 2009-03-24
好牛,学习中!
作者: okjoyel 发布时间: 2009-03-25
作者: libailin 发布时间: 2009-04-11
作者: y81348016 发布时间: 2009-04-11
:shutup:
作者: aoyoo 发布时间: 2009-04-19
作者: huwuling922 发布时间: 2009-04-20
作者: fly_sharp 发布时间: 2009-07-31
作者: loki 发布时间: 2009-08-02
作者: witer666 发布时间: 2009-08-03
作者: xlbc 发布时间: 2009-08-17
作者: dgjj 发布时间: 2009-08-24
作者: cone 发布时间: 2009-08-26
作者: dyl213 发布时间: 2009-08-26
作者: Alog_W 发布时间: 2009-10-10
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28