精华内容
下载资源
问答
  • php smarty

    2014-08-27 16:43:01
    实现新闻的的添加,修改,删除,分页,图片随机码,搜索,调用编辑器等功能,主要使用phpsmarty模板,js等技术。下载后请配置好数据库,注意require后面的路径问题
  • PHP smarty

    2017-10-09 19:46:44
    smarty是一个使用PHP写出来的模板PHP模板引擎,它提供了逻辑与外在内容的分离,简单的讲, 目的就是要使用PHP程序员同美工分离,使用的程序员改变程序的逻辑内容不会影响到美工的页面设计,美工重新修改页面不会影响...
    <?php
    /*
    一、什么是smarty?
    smarty是一个使用PHP写出来的模板PHP模板引擎,它提供了逻辑与外在内容的分离,简单的讲,
    目的就是要使用PHP程序员同美工分离,使用的程序员改变程序的逻辑内容不会影响到美工的页面设计,美工重新修改页面不会影响到程序的程序逻辑,这在多人合作的项目中显的尤为重要。
    
    二、smarty优点:
    
    1. 速度:采用smarty编写的程序可以获得最大速度的提高,这一点是相对于其它的模板引擎技术而言的。
    
    2. 编译型:采用smarty编写的程序在运行时要编译成一个非模板技术的PHP文件,这个文件采用了PHP与HTML混合的方式,在下一次访问模板时将WEB请求直接转换到这个文件中,而不再进行模板重新编译(在源程序没有改动的情况下)
    
    3. 缓存技术:smarty选用的一种缓存技术,它可以将用户最终看到的HTML文件缓存成一个静态的HTML页,当设定smarty的cache属性为true时,在smarty设定的cachetime期内将用户的WEB请求直接转换到这个静态的HTML文件中来,这相当于调用一个静态的HTML文件。
    
    4. 插件技术:smarty可以自定义插件。插件实际就是一些自定义的函数。
    
    5. 模板中可以使用if/elseif/else/endif。在模板文件使用判断语句可以非常方便的对模板进行格式重排。
    
    三、不适合使用smarty的地方
    
    1. 需要实时更新的内容。例如像股票显示,它需要经常对数据进行更新,这类型的程序使用smarty会使模板处理速度变慢。
    
    2. 小项目。小项目因为项目简单而美工与程序员兼于一人的项目,使用smarty会丧失php开发迅速的优点。
    
    
    
    四、samrty目录结构及版本
    打开smarty的官方网站,www.smarty.net/download.php。下载Smarty 3.1.12。有tar.gz和zip分别适用于linux和windows版本。
    
    下载好后Smarty-stable-3.1.12解压缩会得到一个 Smarty-3.1.12 文件夹,里面有两个主要文件夹demo和libs
    
    demo文件夹为示例文件夹,里面包含默认文件夹结构,是我们要进行编写程序代码的主要文件夹。demo里文件夹的名称都是smarty默认的目录结构名称,可以通过改smarty对应属性值,再把文件夹名改成我们想要的名称。
    
    
    libs为smarty代码源文件夹,一般不动。
    
    
    /libs/Smarty.class.php   #主文件
    
    /libs/sysplugins/  #内部plugin
    
    /libs /plugins/   #外部plugin,可自由扩充
    
    /demo/cahce/   #放置缓存文件
    
    /demo/configs /   #放置可以载入的配置文件
    
    /demo/templates/   #放置模板文件
    
    /demo/templates_c/    #放置对模板编译后的文件
    
    可以把解压得到的 Smarty-3.1.12 文件夹名改成我们想要的项目名,demo也可以改成我们想要的具体存放编码的文件夹的名称
    
    2、调试Smarty-3.1.12
    
    创建自己的文件,在demo文件夹下创建index.php。
    在templates目录中创建模板index.tpl
    (几乎可以是任何文本文件的扩展名,常用的是tpl,php,html,不建议使用后两者,因为可以从浏览器直接访问而不安全。可以对apache的httpd.conf进行设置,禁止直接访问.tpl文件。或者将templats目录放在网站文档树之外。)
    
    */
    //index.php代码
    require('../libs/Smarty.class.php');
    $smarty = new Smarty;
    //在调用的模板里可以通过{$name}来输出name的值zhang,{}为这里的smarty分界符
    $smarty->assign('name','zhang');
    //调用模板tpl文件里不能执行PHP语句块
    $smarty->display('templates/index.tpl');
    
    /*
    index.tpl页面内容
    
    <html>
    <body>
    
    <span>你好, {$name}</span>
    
    </body>
    </html>
    */
    
    /*
    Smarty编译时的处理过程是源php文件->模板文件(可能调用多个或多次)->源php文件。。。
    也就是说不影响原php文件的其他处理和输出。所以smarty模板文件可以是完整的html,也可以是其中一部分。
    
    smarty处理过程
    smarty将php源文件,首先编译成中间文件(也是php),如果启用缓存,再根据编译文件生成缓存文件(也是php),需要缓存的部分全部是硬编码。
    之后的每次访问都会访问编译文件(如果编译文件已经存在),一次编译多次调用(可以是单文件的多次,也可以是多文件的多次),如果启用缓存且有缓存文件而且没有过期,则直接访问缓存文件,跳过编译文件。
    编译文件一经生成,就不会被自动更新,除非模板文件或者配置文件更改。源php文件修改是不会引发重新编译的。一旦编译文件重新生成,缓存文件也必然重新生成。
    */
    
    //Smarty允许有两种特殊的编译设置存在:
    //1、 任何时候都不自动重新编译(上线阶段):只有没有该文件的编译文件时才生成,模板文件或者配置文件的更改,不会引发重新编译。
    $smarty->setCompile_check(false);//默认为true,false表示任何时候都不在文件发生变更的情况下生成编译文件,除了无编译文件。
    $smarty->getCompile_check();//获得当前编译检查的设置
    //2、任何时候都重新编译(调试阶段):任何时候都重新编译。
    $smarty->setForce_compile(true);//默认为false,true表示每次都重新编译(启用缓存的话,每次都重新缓存)
    $smarty->getForce_compile();//获得当前强制编译的设置
    
    //开启缓存
    $smarty->setCaching(true);
    $smarty->getCaching();//获取当前缓存状态,默认是false关闭的
    $smarty->setcache_lifetime(60);//设置缓存时间单位秒
    //{*模版文件*}
    //{nocache}
    //{$name}
    //{/nocache}
    //{*如果开启缓存的话放在nocache标签内的变量不会缓存,每次读取PHP源文件的值*}
    
    
    /*
    smarty分界符
    在模板文件中,区分普通html代码和smarty代码靠的是分界符。默认是 {} ,但可能会与js和css相冲突。可以进行变更。
    在3.0中模板标签将不支持空格,如{ $abc }在Smarty2中可以识别的,但是3.0里头就不行了,必须这样{$abc},这样是为了能够更好的支持javascript和css。
    */
    $smarty->left_delimiter = "{";   //左分界符,2.0属性,3.0沿用
    $smarty->right_delimiter = "}";
    /*
    分界符就相当于PHP的echo,分界符中的值都将输出,除非赋值等操作
    smarty tpl文件中分界符中两个**之间的内容为注释内容如
    tpl文件:
    {*这是模板注释内容*}
    */
    
    
    //设置缓存目录路径,不设默认"cache"
    $smarty->setCacheDir("cache");
    //获取缓存目录路径
    $smarty->getCacheDir();
    
    //设置配置目录路径,不设默认"configs"
    $smarty->setConfigDir("configs");
    //添加配置目录路径,所有路径将会以数组形式保存,调用文件时将在所有路径中查找
    $smarty->addConfigDir("configs/test");
    //获取配置目录路径的数组
    $smarty->getConfigDir();
    
    //设置插件目录路径,不设默认"plugins"
    $smarty->setPluginsDir("plugins");
    //添加插件目录路径,所有路径将会以数组形式保存,调用文件时将在所有路径中查找,plugins文件夹里放的就是可以在前台或后台按不同规则调用的函数的存储文件,文件名及函数名的命名按不同调用规则有不同写法要求
    $smarty->addPluginsDir("plugins/test");
    //获取插件目录路径的数组
    $smarty->getPluginsDir();
    
    //设置模板目录路径,不设默认"templates"
    $smarty->setTemplateDir("templates");
    //添加模板目录路径,所有路径将会以数组形式保存,调用文件时将在所有路径中查找
    $smarty->addTemplateDir("templates/test");
    //获取模板目录路径的数组
    $smarty->getTemplateDir();
    
    //设置编译目录路径,不设默认"templates_c"
    $smarty->setCompileDir("templates_c");
    //获取编译目录路径
    $smarty->getCompileDir();
    /*
    我们可以建不同的php源文件文件夹,把编写的php文件按一定的分类放在不同的文件夹中。
    然后在每个文件夹中都创建一个自定义的config文件,在config文件中创建一个新的$smarty = new Smarty 对象
    然后把所有不同的文件夹的php文件的缓存,配置文件,插件,模版,编译目录都设置到同一个缓存,配置文件,插件,模版,编译目录
    让该文件夹下所有PHP源文件都引用该配置文件即可获取相同配置
    */
    
    //模版变量
    $arr = array(array("zhang","li"),'a'=>array("liu","wang"),array("ming","yi"));
    $smarty->assign("testArr", $arr);
    //设置模版变量,为将要调用的模版提供变量,在接下来调用的模版中可以通过{$testArr}或者{$testArr['a'][0]}或者{$testArr.a.0}来访问具体某数组元素
    //在模版中可以直接通过 {$testArr = "testValue" scope="global"} 来更改传过来的模板变量的值(如果不存在则在模板中创建并设置该模版变量),scope属性是标注模板变量使用范围的可不写
    //在模版中更改或创建成其他数组 {$testArr = [1,2,3]}也可以{$testArr = [1,'a'=>2,2=>3]}也可以{$testArr[] = 4}或其他类似PHP中创建数组方式
    //php源文件可通过 $smarty->getTemplateVars("testArr") 获取指定模版变量,如要获取模板中改变或创建的模版变量,在模板中创建或更改其值时必须加上scope属性并把值设置为scope="global"或scope="parent"
    
    class A{
        function aa($nam){
            echo $nam;
        }
    }
    $smarty->assign("obj", new A);
    //设置的模版变量是对象时在模版页可以如下这样调用,给模版传类对象时也是传址
    //{$obj->aa('my name is y')}
    
    //Smarty可以识别嵌入在双引号中的模版变量,只要此变量只包含数字、字母、下划线。但貌似只支持能直接转换成字符串的模版变量
    $smarty->assign("testStr", "this is testStr");
    //模板中可通过{"$testStr OK !"}来访问
    
    
    /*
    tpl模板包含模板
    模板文件:
    {include file="header.tpl"}
    header.tpl内容:
    <span>这是顶部内容!!,欢迎你,{$name}</span>
    
    模板包含模板也可以是这样格式
    {include file="header.tpl" testVar="这是顶部内容!!!"}
    header.tpl则可以通过{$testVar}使用调用页包含时传来的模板变量
    header.tpl内容:
    <span>{$testVar},欢迎你,{$name}</span><hr />
    */
    
    
    
    /*
    可以预先规定一系列的变量与值的对应,并放在配置文件中,在使用时载入。
    配置文件默认放在configs文件夹中,可以自定义修改文件夹名。
    */
    
    /*
    #模板test.conf文件:
    #键对应的值可以不用引号括起来
    title = Welcome to Smarty!!
    cutoff_size = 40
    
    [china]
    language = chinese
    
    [england]
    language = english
    
    #[china],[england]为标签,未设置标签的键值为全局的只要调用该配置文件就可以在模版中使用,设置了标签的键值只有在调用配置文件时指定了对应标签才可以使用
    #在PHP源文件调用配置文件语句$smarty->configLoad('test.conf', $sections = 'england');该语句下面调用的模版才可以使用该配置文件,通过$sections属性指定使用哪个标签下的键和值
    #$sections参数可以不写,默认值为null,$smarty->configLoad('test.conf')则只使用全局的键值,而不能使用标签下的键值
    #在模版下通过{config_load file="test.conf" section="china" scope="global"}语句调用配置文件
    #section属性可以不写,默认是null,scope属性必须写{config_load file="test.conf" scope="global"}
    #section属性可赋三种值
    #local 只有当前模版可以使用该配置文件
    #parent 只有当前模版引入该配置文件语句后包含的模版中,或在php源文件中smarty对象调用该配置文件后调用的模版中可以使用该配置文件中的键值
    #global 测试效果和parent相同
    #在模版中通过{#language#}来使用键值,也可以通过{$smarty.config.language}来访问配置文件键值
    #PHP源文件中可以使用$smarty->getConfigVars('language')或$smarty->getConfigVariable('language')来获取键值,$smarty->getConfigVars('language')获取的还可能是数组
    */
    
    
    /*
    tpl文件中常用函数
    tpl文件:
    <!--将capture标签括起的页面显示内容存在capture指定的testCapture中 -->
    <!--当达到指定条件时可通过 {$smarty.capture.testCapture} 将内容输出出来 -->
    {capture name="testCapture"}
    {include file="f1.tpl"}
    {/capture}
    
    {if true}
    {$smarty.capture.testCapture}
    {/if}
    
    
    
    {if $name == "wang"}
    
    Welcome wang.
    
    {elseif $name == "zhang"}
    
    Welcome zhang.
    
    {else}
    
    Welcome, whatever you are.
    
    {/if}
    {*操作符可以是 ==,>= 等也可以是 eq,ne等*}
    
    
    
    {for $x=0; $x<count($testArr); $x++}
    {$x}
    {/for}
    {*for循环,类似PHP代码*}
    
    
    {$x=0}
    {while $x<count($testArr)}
    {$x++}
    {/while}
    {*While循环,也类似PHP代码。*}
    
    
    <!--name和key属性可不写-->
    {foreach name="testForeach" from=$testArr key=arId item=arVal}
    {$arId}对应的值为:{$arVal}
    <br>
    {$smarty.foreach.testForeach.index}   <!--(循环内部使用)显示当前循环的索引,如果数组为空,返回-1-->
    
    {$smarty.foreach.testForeach.iteration}    <!--(循环内部使用)显示当前的循环次数-->
    
    {$smarty.foreach.testForeach.first} <!--(循环内部使用)如果为第一次循环,返回true-->
    
    {$smarty.foreach.testForeach.last} <!--(循环内部使用)如果为最后一次循环,返回true-->
    
    {$smarty.foreach.testForeach.total} <!-(循环内外部使用)显示循环的总次数-->
    <br>
    {foreachelse}  <!--$testArr数组变量没有值时(0个元素)执行。-->
    $testArr is null
    {/foreach}
    
    {*也可以如下两种类PHP格式*}
    {foreach $testArr as $n}
    {$n}
    {/foreach}
    
    {foreach $testArr as $key=>$n}
    {$key}
    {/foreach}
    
    
    
    {$sectionArr = [0=>"a",4=>"b","c","d","e",6,7,8,9,10,11,12,13,14,15,16]}
    {section name="testSection" loop=$sectionArr start=0 step=4 max=6 show=true}
    
    {$smarty.section.testSection.index}- <!--当前循环到的数组的键值-->
    {$sectionArr[testSection]}- <!--当前循环到的数组的元素值-->
    {$smarty.section.testSection.iteration}-<!--当前section循环的次数,从1计起-->
    <br/>
    
    {sectionelse}
    $sectionArr is null
    {/section}
    <!--section循环适用于纯int型键值的数组-->
    <!--给loop赋一个要循环的数组,start指定从数组指定键值开始循环,step指定数组下次循环的键值与本次循环键值之差,max指定循环最大次数,show指定是否循环false的话直接跳到执行sectionelse-->
    <!--Section的内置变量与foreach 相同-->
    
    */
    
    
    /*
    tpl模板文件:
    {literal}
    
    <script type="text/javascript">
    function a(){
        alert("this is script");
    }
    a();
    </script>
    
    {/literal}
    {*
    literal 标签区域内的数据将被当作网页html文本处理,此时模板将忽略且不分析其内部的所有字符信息。
    该特性用于显示有可能包含大括号等字符信息的 js、css 。当这些信息处于 {literal}{/literal} 标签中时,模板引擎将不分析它们,而直接显示。
    *}
    
    */
    
    //PHP文件:
    //$smarty->setDebugging(true);//对后续调用的模板进行调试。
    //$smarty->getDebugging();//得到当前是否进行调试,默认false
    //或在需要调试的模版中写入{debug}
    
    /*
    模板文件:
    
    smarty3.0支持了模版继承系统,例如
    f1.tpl:
    <html>
    <body>
    
    {block name='top'} f1.header<br />{/block}
    {block name='middle'} f1.middle<br />{/block}
    {block name='buttom'} f1.buttom<br />{/block}
    
    </body>
    </html>
    
    f2.tpl:
    {extends file="f1.tpl"}
    {block name='top'} f2.header<br />{/block}
    {block name='other'} it can`t be show <br />{/block}
    {*
    如果f2.tpl中没有block标签,或f2.tpl中没有和f1.tpl中相同命名的block标签,则f2.tpl完整引入显示f1.tpl中所有内容包括block标签的内容,而f2.tpl中所有内容将忽略
    如果f2.tpl中有和f1.tpl中同名block标签,则在f2.tpl显示时f2.tpl中block标签内容将覆盖f1.tpl中同名block标签的内容,在f2.tpl页面显示时,内容仍将按f1.tpl设置的格式位置显示,f2.tpl其他所有文本包括未同名的block标签及其内容都将被忽略,不显示。
    block标签的内容只会覆盖父模版中同名block标签的内容,或在子模版中显示,在本页面中如果没有调用父模版或父模版中没有要覆盖的同名block标签,block标签内容在本页面中不显示
    这种继承支持多文件,多重继承,意味着可以无限的继承下去
    *}
    
    
    {fetch file="http://www.126.com" assign="testAssign"}
    {$testAssign}
    {fetch file="http://www.126.com"}
    {*fetch可以引用外部http,ftp的页面,如指定assign的值则把引用的内容存在指定名的变量中,否则在哪有fetch在哪显示*}
    */
    
    //php页面:
    //调用模版也可以使用此方法,在输出前做一些处理
    //$output = $smarty->fetch("index.tpl");
    //do something with $output here对将要输出的内容进行处理
    //echo $output;//然后将模板输出
    
    /*
    模板中提交表单
    <form name="input" action="file.php" method="post">
    action属性可以直接写要提交到的php文件名,或者不写空action=""则提交到调用该模板的php文件中
    */
    
    
    //连接数据库
    mysql_connect("localhost","root","root");
    mysql_select_db("test");
    $smarty->assign('webDir',$_SERVER['DOCUMENT_ROOT']);//$_SERVER['DOCUMENT_ROOT']为当前项目文件夹的绝对路径
    //配置JQuery的src路径最好写绝对路径或写要运行文件能找到该JQuery的相对路径因为要编译成编译文件,而编译后的文件和原路径环境不一样
    ?>
    <script type="text/javascript" src="http://localhost/Smarty/demo/JS/jquery-1.7.2.min.js"></script>
    ?>

    转载来自PHP smarty

    展开全文
  • php smarty模板开发电子商务网站 php smarty模板开发电子商务网站 php smarty模板开发电子商务网站 php smarty模板开发电子商务网站
  • PHP smarty 分页

    2012-08-02 16:52:12
    PHP smarty 分页 数据库是mysql
  • PHP smarty详解

    2012-12-04 16:02:58
    详细对PHP smarty模板进行了使用描述。
  • 主要介绍了PHP Smarty模版简单使用方法,结合实例形式分析了PHP调用Smarty模板的配置,变量设置及使用方法,需要的朋友可以参考下
  • php Smarty 字符比较代码,需要的朋友可以参考下。
  • php smarty 后台,PHP Smarty

    2021-04-12 16:50:06
    define("ROOT_PATH", dirname(FILE));// 使用据对路径,引入... "/smarty/Smarty.class.php";// 实例化smarty$smarty = new Smarty();// 根目录$smarty->template_dir = ROOT_PATH . "/templates/";// 编译目...

    define("ROOT_PATH", dirname(FILE));

    // 使用据对路径,引入Smarty

    require ROOT_PATH . "/smarty/Smarty.class.php";

    // 实例化smarty

    $smarty = new Smarty();

    // 根目录

    $smarty->template_dir = ROOT_PATH . "/templates/";

    // 编译目录

    $smarty->compile_dir = ROOT_PATH . "/templates_c/";

    // 配置文件目录

    $smarty->config_dir = ROOT_PATH . "/configs/";

    // 是否开启缓存

    $smarty->caching = ture;

    // 缓存目录

    $smarty->cache_dir = ROOT_PATH . "/cache/";

    // 定界符

    $smarty->left_delimiter = "{";

    $smarty->right_delimiter = "}";

    $smarty->assign("show", "Curtis");

    $smarty->display("demo.tpl");

    展开全文
  • php smarty模版引擎中的缓存应用实例代码。
  • 资源名称:PHP Smarty中文手册 chm格式内容简介: 早在1999年后期,我们就已经开始为模板引擎写说明文档。在完成这个文档之后,我们开始用c写一个模板引擎,并有希望被包含到php里去。在 撞上了许多的技术难题的同时...
  • php smarty模板引擎中几个经常被忽略的但比较有用的标签整理,包括capture标签,config_load标签,php标签,strip标签,fetch标签,以及如何在smarty模板中直接使用define定义的常量
  • 主要介绍了php smarty truncate UTF8乱码问题解决办法,需要的朋友可以参考下
  • php smarty函数扩展

    2020-10-29 07:17:37
    扩展函数放到 */Smarty/libs/plugins目录下,文件命名格式 modifier.xxxx.php,函数名格式function smarty_modifier_xxxx
  • PHP Smarty_gettext下载

    2012-02-17 10:28:13
    PHP Smarty通过gettext制作多语言版本
  • PHP Smarty 用户登录系统 PHP Smarty 用户登录系统
  • php smarty模版引擎中常用的20个变量操作符及使用方法
  • PHPSmarty 视频教程.rar

    2009-11-24 17:21:56
    PHPSmarty 视频教程PHPSmarty 视频教程PHPSmarty 视频教程PHPSmarty 视频教程
  • php Smarty date_format [格式化时间日期] ,需要的朋友可以参考下。
  • PHP Smarty 模板

    2012-08-20 14:23:20
    PHP Smarty 模板 - 什么是Smarty? Smarty是一个使用PHP写出来的模板PHP模板引擎,是目前业界最著名的PHP模板引擎之一。它分 离了逻辑代码和外在的内容,提供了一种易于管理和使用的方法,用来...
     
    

    PHP Smarty 模板 - 什么是Smarty?

    Smarty是一个使用PHP写出来的模板PHP模板引擎,是目前业界最著名的PHP模板引擎之一。它分




    离了逻辑代码和外在的内容,提供了一种易于管理和使用的方法,用来将原本与HTML代码混杂在一起PHP代码逻辑分离。简单的讲,目的就是要使用PHP程序员同美工分离,使用的程序员改变程序的逻辑内容不会影响到美工的页面设计,美工重新修改页面不会影响到程序的程序逻辑,这在多人合作的项目中显的尤为重要。

     

    PHP Smarty 模板 - 什么是PHP模板?

    该如何使我的PHP脚本从设计中独立出来?这无疑地是在PHP邮件列表上所提问的最多的问题之一。虽然PHP被标榜为“HTML嵌入式语言”, 在写过许多PHP和HTML混合式的工程之后,我产生了一个分离表单和内容的想法。而且,在许多公司里规划设计者的角色和程序设计者是分开的。于是,这样的一个模板解决方案产生了……

    例如在一个公司,一个应用程序的开发流程如下:在提交计划文档之后,界面设计者[美工]制作了网站的外观模型,然后把它交给后台程序员。程序员使用PHP实现商业逻辑,同时使用外观模型做成基本架构。然后工程被返回到HTML页面设计者继续完善。就这样工程可能在后台程序员和页面设计者之间来来回回好几次。由于后台程序员不喜欢干预任何有关HTML标签,同时也不需要美工们和PHP代码混在一起;美工设计者只需要配置文件,动态区块和其他的界面部分,不必要去接触那些错综复杂的PHP代码。因此,这时候有一个很好的模板支持就显得很重要了。

    纵观现今存在的许多PHP模板解决方案(比如PHPLIB),大多数都只是提供了用模板取代变量和将动态区块的功能有限的格式化的基本方法。但是我们的需求比这个要高的多。我们完全不想要PHP程序员去设计HTML页面,可是这又是不可避免的。例如:如果美工想要在动态区块之间交替不同的背景颜色,他就可能得和程序员预先说好。同样,美工们也应该有自己对于页面设计的配置文件,这同样可以通过变量把他们拉到模板里边去。

     

    PHP Smarty 模板 - Smarty的诞生

    早在1999年后期,我们就已经开始为模板引擎写说明文档。在完成这个文档之后,我们开始用C写一个模板引擎,并有希望被包含到PHP里去。在 撞上了许多的技术难题的同时,“什么是模板应该做的,什么不该做”这个问题,也被热烈的讨论着。从这些经验,我们决定应该用PHP将模板引擎写成一个类,让任何觉得合适的人使用它。所以我们写了一个引擎,从此就有了Smarty。(注:这个类以前从来没有公开发表过)。这个类几乎达到了我们所有的要求:常规变量替换,支持包括其他模板,使用配置文件集成设置,嵌入PHP代码,限制'if'语句的作用,还有更多的可以多层嵌套的健壮的动态区块。它用常规表达式做到这一切,于是代码变得相当令人费解。在每次调用的时候,都要去解析那些语法和常规表达式,于是在大型应用的时候,它显然慢了下来。在程序员的眼光看来,最大的问题还是使用PHP脚本建立和处理模板和动态区块的所有必要工作。我们应该如何使他变得更简单?

    我们可以想象Smarty应该有怎样的最后表现。我们知道PHP代码如果没有了模板解析的开销将有多快,我们也知道从一般的美工看来PHP语言是多么的“恐怖”,然而这一切可以被一种更简单的模板语法掩饰掉。我们应该怎样把这两种方法的长处结合起来?

    于是,Smarty诞生了……

     

    PHP Smarty 模板 - Smarty优点

    1. 速度:采用Smarty编写的程序可以获得最大速度的提高,这一点是相对于其它的模板引擎技术而言的。

    2. 编译型:采用Smarty编写的程序在运行时要编译成一个非模板技术的PHP文件,这个文件采用了PHP与HTML混合的方式,在下一次访问模板时将WEB请求直接转换到这个文件中,而不再进行模板重新编译(在源程序没有改动的情况下)

    3. 缓存技术:Smarty选用的一种缓存技术,它可以将用户最终看到的HTML文件缓存成一个静态的HTML页,当设定Smarty的cache属性为true时,在Smarty设定的cachetime期内将用户的WEB请求直接转换到这个静态的HTML文件中来,这相当于调用一个静态的HTML文件。

    4. 插件技术:Smarty可以自定义插件。插件实际就是一些自定义的函数。

    5. 模板中可以使用if/elseif/else/endif。在模板文件使用判断语句可以非常方便的对模板进行格式重排。

    不适合使用Smarty的地方

    1. 需要实时更新的内容。例如像股票显示,它需要经常对数据进行更新,导致经常重新编译模板,所以这类型的程序使用Smarty会使模板处理速度变慢。

    2. 小项目。小项目因为项目简单而美工与程序员兼于一人的项目,使用Smarty会在一定程度上丧失PHP开发迅速的优点。

     

    PHP Smarty 模板 - Smarty简明教程

    一. 安装      
    首先打开网页http://www.smarty.net/download.php,下载最新版本的Smarty。解压下载的文件(目录结构还蛮复杂的)。接下来演示给大家一个安装实例,看过应该会举一反三的。
         (1) 在根目录下建立了新的目录learn/,再在learn/里建立一个目录smarty/。将刚才解压缩出来的目录的libs/拷贝到smarty/里,再在smarty/里新建templates目录,templates里新建cache/,templates/,templates_c/, config/.


         (2) 新建一个模板文件:index.tpl,将此文件放在learn/smarty/templates/templates目录下,代码如下:
    [code]


    Smarty
    {$hello}

    [/code]
               新建index.php,将此文件放在learn/下:
    [code]
    template_dir ="smarty/templates/templates";
    $smarty->compile_dir ="smarty/templates/templates_c";
    $smarty->config_dir = "smarty/templates/config";
    $smarty->cache_dir ="smarty/templates/cache";

    //smarty模板有高速缓存的功能,如果这里是true的话即打开caching,但是会造成网页不立即更新的问题,当然也可以通过其他的办法解决
    $smarty->caching = false;

    $hello = "Hello World!";//赋值
    $smarty->assign("hello",$hello);//引用模板文件
    $smarty->display('index.tpl');?>
    [/code]

    (3) 执行index.php就能看到Hello World!了。

    二. 赋值       

    在模板文件中需要替换的值用大括号{}括起来,值的前面还要加$号。例如{$hello}。这里可以是数组,比如{$hello.item1},{$hello.item2}…         
    而PHP源文件中只需要一个简单的函数assign(var , value)。         
    简单的例子:         
    *.tpl:
             Hello,{$exp.name}!Good {$exp.time}

             *.php:
             $hello[name]= “Mr. Green”;

             $hello[time]=”morning”;         
             $smarty->assign(“exp”,$hello);         
             output:
             Hello,Mr.Green!Good morning

    三. 引用         
    网站中的网页一般header和footer是可以共用的,所以只要在每个tpl中引用它们就可以了。         
    示例:*.tpl:
             {include file="header.tpl"}

             {* body of template goes here *}

             {include file="footer.tpl"}

    四. 判断

    模板文件中可以使用if else等判断语句,即可以将一些逻辑程序放在模板里。"eq","ne", "neq", "gt", "lt","lte", "le", "gte"    "ge","is even", "is odd", "is not even", "is notodd", "not", "mod", "div by", "evenby", "odd by","==","!=",">","="这些是if中可以用到的比较。看看就能知道什么意思吧。

            示例:
            {if $name eq"Fred"}

            WelcomeSir.

            {elseif $name eq"Wilma"}

            WelcomeMa'am.  


            
            Welcome,whatever you are.

            {/if}
    五. 循环       

    在Smarty里使用循环遍历数组的方法是section,如何赋值遍历都是在模板中解决,php源文件中只要一个assign就能解决问题。         
    示例:
    {* this examplewill print out all the values of the $custid array *}

    {sectionname=customer loop=$custid}

    id: {$custid[customer]}
    {/section}
    OUTPUT:
    id: 1000id: 1001id: 1002

    六. 常见问题         
    Smarty将所有大括号{}里的东西都视为自己的逻辑程序,于是我们在网页中想插入javascript函数就需要literal的帮忙了,literal的功能就是忽略大括号{}。         
    示例:[code]

             
            

                  function isblank(field) {

                             if (field.value == '') 
                                    { return false; }

                             else
                                    {

                                     document.loginform.submit();
                                    return true;

                                    }

                  }

             {/literal}[/code] 

    展开全文
  • phpSmarty模板中文手册

    2009-03-02 10:50:49
    phpSmarty模板中文手册, Smarty For Template Designers [模板设计者篇] Smarty For Programmers [程序员篇]

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 20,469
精华内容 8,187
关键字:

phpsmarty