6
回答
请教php smarty 插件调用 错误
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   

在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>



直接运行报错:如下图:

求指点。

举报
Mi丶Long
发帖于4年前 6回/481阅
共有6个答案 最后回答: 4年前

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

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

感谢您的关注,这样代码本身应该是没有问题的,问题应该出在配置的地方,请问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

--- 共有 2 条评论 ---
Mi丶Long回复 @多萨穆大叔 : 太感谢了,原因: $this->setPluginsDir(array( SMARTY_PLUGINS_DIR, dirname(__FILE__) . '/plugins/' )); 配置文件里面,这个没写。 4年前 回复
__FresHmaNhttp://topphp.org/smarty-inherited-settings.html 4年前 回复
顶部