请教php smarty 插件调用 错误

Mi丶Long 发布于 2013/12/28 14:37
阅读 487
收藏 0

在smarty/plugins/下,新建文件:modifier.truncate_cn.php

内容如下:

<?php

/*
*作者:http://www.phpernote.com/
*时间:2013年1月31日06:31:52
*作用:截取中文字符串
*/
function smarty_modifier_truncate_cn($string,$length=0,$ellipsis='…',$start=0){
	$string=strip_tags($string);
	$string=preg_replace('/\n/is','',$string);
	//$string=preg_replace('/ | /is','',$string);//清除字符串中的空格
	$string=preg_replace('/&nbsp;/is','',$string);
	preg_match_all("/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|\xe0[\xa0-\xbf][\x80-\xbf]|[\xe1-\xef][\x80-\xbf][\x80-\xbf]|\xf0[\x90-\xbf][\x80-\xbf][\x80-\xbf]|[\xf1-\xf7][\x80-\xbf][\x80-\xbf][\x80-\xbf]/",$string,$string);
	if(is_array($string)&&!empty($string[0])){
		$string=implode('',$string[0]);
		if(strlen($string)<$start+1){
			return '';
		}
		preg_match_all("/./su",$string,$ar);
		$string2='';
		$tstr='';
		//www.phpernote.com
		for($i=0;isset($ar[0][$i]);$i++){
			if(strlen($tstr)<$start){
				$tstr.=$ar[0][$i];
			}else{
				if(strlen($string2)<$length+strlen($ar[0][$i])){
					$string2.=$ar[0][$i];
				}else{
					break;
				}
			}
		}
		return $string==$string2?$string2:$string2.$ellipsis;
	}else{
		$string='';
	}
	return $string;
}

?>



前台模板调用:
<div id="slider">
{foreach $NewsRotaryView as $value}
    <div>
        <a href="http://www.hair8.net/news/{$value.year}/{$value.id}.html"><img lazyload="{$value.bpic}"></a>
       <p>{$value.title}</p>
    </div>
{/foreach} 
</div>



上面这个代码,能执行成功。

调用插件功能就报错了,写法如下:

<div id="slider">
{foreach $NewsRotaryView as $value}
    <div>
        <a href="http://www.hair8.net/news/{$value.year}/{$value.id}.html"><img lazyload="{$value.bpic}"></a>
       <p>{$value.title|truncate_cn:'5'}</p>
    </div>
{/foreach} 
</div>



直接运行报错:如下图:

求指点。

加载中
0
Mi丶Long
Mi丶Long

引用来自“多萨穆大叔”的答案

经过测试,按照你的代码,没有问题。

感谢您的关注,这样代码本身应该是没有问题的,问题应该出在配置的地方,请问smarty除了如下的配置,还有其他地方需要配置的吗?

<?php
require_once('/common/smarty/Smarty.class.php');
/*
 * Created on 2011-9-13
 *
 * To change the template for this generated file go to
 * Window - Preferences - PHPeclipse - PHP - Code Templates
 */
 class view extends Smarty{
 	
 	public function __construct(){
        $this->config_dir = ROOT_DIR . '/tmp/smarty_config';// 目录变量
        $this->caching = false; //是否使用缓存,项目在调试期间,不建议启用缓存
 		$this->template_dir = ROOT_DIR . '/templates/';//设置模板目录
 		$this->compile_dir = ROOT_DIR . '/tmp/templates_c/'; //设置编译目录
 		$this->cache_lifetime = 60;
 		$this->cache_dir    = ROOT_DIR . '/tmp/smarty_cache/';
        $this->left_delimiter = '{{';
 		$this->right_delimiter = '}}';
 	}
    
    public function display($template,$check_token=false,$page='',$time_limit=30){
        if($check_token && !empty($page)){
            parent::assign('token',get_post_token($page,$time_limit));
        }
        parent::display($template);
    }
 }
?>



在 php.ini的配置文件,里面需要配置什么东西吗

Smarty 版本是,3.0.8

Mi丶Long
Mi丶Long
回复 @多萨穆大叔 : 太感谢了,原因: $this->setPluginsDir(array( SMARTY_PLUGINS_DIR, dirname(__FILE__) . '/plugins/' )); 配置文件里面,这个没写。
__FresHmaN
__FresHmaN
http://topphp.org/smarty-inherited-settings.html
0
Mi丶Long
Mi丶Long
有没有知道,指点下啊,那里出了问题啊。
0
欣儿
欣儿
看起来有点像插件文件夹没有读的权限
0
南湖船老大
南湖船老大
你写的这个插件,smarty不认识
Mi丶Long
Mi丶Long
是还需要其他地方,配置吗?
0
__FresHmaN
__FresHmaN
经过测试,按照你的代码,没有问题。
0
sun007521
Mi丶Long
Mi丶Long
--,您看出来啥了??
返回顶部
顶部