16
回答
php Smarty
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   

第一次搞PHP,Smarty 模板框架,3.0.8版本

{{foreach $NewsRotaryView as $value}}
    <div>
        <a href="/news/{{$value.year}}/{{$value.id}}.html"><img lazyload="{{$value.bpic|replace:"_s":"_b"}}"></a>
        <p>{{$value.title|truncate:30}}</p>
    </div>
{{/foreach}} 

|replace:"_s":"_b"

|truncate:30 

这个2个,都报错,写法是看,Smarty 文档写的,不知道对不对,和版本有没关系,或者还是什么地方没有配置好。

"{{" 双大括号是我自定义配置的,这个没问题。

求指点。

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

没记错的话,replace和truncate都是插件,看看这两个插件在吗

插件不在会报错的

--- 共有 3 条评论 ---
Mi丶Long是配置文件里面,没有配置插件,导致找不到插件。 缺少:$this->setPluginsDir(array(SMARTY_PLUGINS_DIR, '/common/smarty/plugins/')); 感谢您的解答。 4年前 回复
欣儿回复 @Enterprise : 没有错误提示吗? 4年前 回复
Mi丶Long--汗,这2个不是,smarty 自带的吗,这个还真不知道是插件,一直是搞C#的,明天回公司在研究下,谢谢啦。 4年前 回复
虽然也有用过Smarty~现在看依然觉得很......头大
--- 共有 6 条评论 ---
Jiazz@欣儿 呃~就是把模板的处理放到前端,后端只返回JSON吗?youku的体验做的很差 哈哈 4年前 回复
欣儿回复 @ljz : 不是。JS框架 4年前 回复
Jiazz@Enterprise PHP本身就是一个很好的模板引擎 不需要第三方的介入了~~性能没的说 4年前 回复
Jiazz@欣儿 改成Smarty??? 4年前 回复
欣儿回复 @Enterprise : 现在看的最多的是js的前端框架。土豆,优酷这些都在朝这方面改版 4年前 回复
<ul>
    <li>友情链接:</li>
    <{foreach from=$link_data item=link_data}>
        <li><a href="<{$link_data.url}>" target="_blank" title="<{$link_data.note}>"><{$link_data.name}></a></li>
    <{/foreach}>
</ul>




<?php
/***********************************
#->  版本:rxcms 0.1
#->  日期: 1999年9月99日
#->  by 铂金小狗
#->  by notepad++  utf-8
***********************************/

/***********************************
加载SMARTY类
***********************************/
require_once 'smarty/libs/Smarty.class.php'; //此处大小写必须一直,否则上传至LINUX环境报错

/***********************************
实例化SMARTY类
***********************************/
$smarty = new Smarty();

/***********************************
设置SMARTY
***********************************/
$smarty->template_dir = 'templates';  //设置SMARTY模板目录

$smarty->compile_dir = 'smarty/templates/templates_c';  //设置SMARTY编译目录

$smarty->config_dir = 'smarty/templates/config';  //设置SMARTY的CONFIG的目录

$smarty->cache_dir = 'smarty/templates/cache';  //设置SMARTY的缓存目录

$smarty->caching = false;  //是否开启缓存

$smarty->left_delimiter = "<{";   //设置SMARTY模板左包含符号

$smarty->right_delimiter = "}>";   //设置SMARTY模板右包含符号

?>



引用来自“铂金小狗”的答案

我靠...楼主..你语法都不对...参看我的写法和配置!~~
{{foreach $NewsRotaryView as $value}}
    <div>
        <a href="/news/{{$value.year}}/{{$value.id}}.html"><img lazyload="{{$value.bpic}}"></a>
        <p>{{$value.title}</p>
    </div>
{{/foreach}} 


这个写法是完全能执行成功的,“{{”,“}}” 这个是被我自定义过的,问题应该是出在 replace,truncate 这2个函数的引用上,不知道是缺少什么,还是写的不对。

搞定,换了一个方法:

写法:{{$value.title|mb_substr:0:5:'utf-8'}} 这样就对了,上面写错了,应该还是缺少,插件方法。mb_substr 这个好像是PHP自带的方法。

Smarty查看了下,插件:smarty/plugins/modifier.truncate.php 有这个类

function smarty_modifier_truncate($string, $length = 80, $etc = '...',
    $break_words = false, $middle = false)
{
    if ($length == 0)
        return '';

    if (is_callable('mb_strlen')) {
        if (mb_detect_encoding($string, 'UTF-8, ISO-8859-1') === 'UTF-8') {
            // $string has utf-8 encoding
            if (mb_strlen($string) > $length) {
                $length -= min($length, mb_strlen($etc));
                if (!$break_words && !$middle) {
                    $string = preg_replace('/\s+?(\S+)?$/u', '', mb_substr($string, 0, $length + 1));
                } 
                if (!$middle) {
                    return mb_substr($string, 0, $length) . $etc;
                } else {
                    return mb_substr($string, 0, $length / 2) . $etc . mb_substr($string, - $length / 2);
                } 
            } else {
                return $string;
            } 
        } 
    } 
    // $string has no utf-8 encoding
    if (strlen($string) > $length) {
        $length -= min($length, strlen($etc));
        if (!$break_words && !$middle) {
            $string = preg_replace('/\s+?(\S+)?$/', '', substr($string, 0, $length + 1));
        } 
        if (!$middle) {
            return substr($string, 0, $length) . $etc;
        } else {
            return substr($string, 0, $length / 2) . $etc . substr($string, - $length / 2);
        } 
    } else {
        return $string;
    } 
}



但是,就是不支持
{$articleTitle|truncate:30}  这样的写法,是不是我哪里没配置好?

顶部