smarty模板引擎基础知识整理


  模板引擎
模板引擎:将PHP和HTML分开的一种解决方案;
<?php
 mysql_connect("localhost","root","");
 mysql_select_db();
 $sql="select * from stu";
 $result=mysql_query($sql);
 echo "<ul>";
 while($row=mysql_fetch_assoc())
  echo "<li>".$row['title']."</li>";
 echo "</ul>";
?>
{@ news typeip='?' lmit=5@}
<div id="news">
  {@ news typeip='?' lmit=5@}
</div>
   好处:
      1、PHP与HTML分开,可以后期方便的更改模板
      2、PHP程序员和美工各司其责,并行开发,提高了开发速度;
   坏处:
      1、中小型的项目不适合
      2、实时更新数据的网站中不适用
流行模板引擎:
   smarty   smart template   phplib

smarty:
   1、支持编译和缓存,可以提高用户体验度(页面加载)
   2、smarty模板中有丰富的控制结构
   3、smarty中具有丰富的自定义插件
   4、PHP编写模板引擎-可以学习模板引擎编写
   5、丰富的缓存控制

smarty的基本使用步骤:
   1、smarty.net中下载smarty包
      libs->smarty
   2、引入smarty
      将smarty中代码引入程序
      引入smarty解析类
   3、初始化smarty类
      $tpl = new Smarty;
      2.6:
       模板目录:
          $tpl -> template_dir = "./tpl";
       编译目录:
          $tpl -> compile_dir  = "./comp";
      3.0
        模板目录:
          $tpl -> template_dir = "./tpl";
 编译目录时自动生成的  template_c
   4、使用smarty:
      调用模板:   index.html   index.tpl   
         $tpl -> display("模板文件名");
smarty的基本操作:

【变量】
     1、PHP分配给smarty变量
        $tpl -> assign("前台变量名",PHP变量名|数据);
       模板中变量输出:
          {$变量名}
       防止标签成对出现:
          1)原样输出不解析;
     {literal}
  代码{}
     {/literal}
   2)手动修改变量的左右定界符
      $tpl -> left_delimiter = "{@ ";
      $tpl -> right_delimiter ="@}";  
     2、smarty模板内定义的局部变量
        {@ assign var="" value=""@}
 var:定义的模板变量名
 value:定义的变量的数据;

     3、smarty前台样式配置变量
     4、smarty中session,get等变量使用
【控制结构】
     分支控制结构:
         {@ if 条件1@}
     操作1
  {@ else if 条件2@}
     操作2
  {@ else@}
     操作3
  {@ /if@}
     注意:
       比较运算符
         >    gt
  <    lt
  ==   eq
  >=   gte
  <=   lte
=1    浏览权限
=2    修改和删除
=3    增加权限
其他  你没有权限
    循环结构】
       foreach:  几维数组,几次循环
 格式:
   {@ foreach name="" item="" key="" from=""@}
   {@ /foreach@}
   name:循环体名字
   item:被遍历出得数组元素
   key:数组元素的键名或者是索引值
   from:被遍历的数组
        关联数组元素:
      $item.键名

       section:可以省掉一次循环,并且可以对记录进行二次记录筛选;
          格式:
     {@ section name="" loop="" start="" step="" max="" show=""@}

     {@ /section@}

     name:循环体的名字,可以当做下标使用,但是不是下标
     loop:被遍历的数组名字
     start:被遍历的数组的起始记录  索引从0开始
         正值:从头到尾的去找起始记录
  负值:从尾到头的去找起始记录

     step:步长
         正值:从头到尾的取得记录
  负值:从尾到头的取得记录
            eg:
        start=-1   step=-1    将记录进行倒序排列

     max:循环次数,被遍历的数组记录条数
     show:被遍历出得数据是否显示
     true:显示数据
     false:不显示数据
【文件引入】
     1、静态模板文件引入
        {@ include file="路径+文件名"@}
 路径计算是以当前的模板页面计算的
 另外:
    {@ *注释内容*@}
     2、动态PHP页面引入
        {@ include_php file="路径+名字"@}
 路径计算是以调用该模板的PHP页面来计算的

 或者
 {@ php@}
  echo "你好";
 {@ /php@}

 3.1  初始化的对象必须是smartyBC
       $tpl -> allow_php_templates=true
        3.0  $tpl -> allow_php_tag=true;
 2.6  直接使用
     3、前台样式配置文件引入:配置的是前台显示的某些数据和样式
        {@ config_load file="" section=""@}
   section:模块名
【前台样式配置】
    注意文件后缀名:
         .conf
    语法格式:
         变量名=值
  变量2=值
  .......
    路径计算以该前台样式的模板文件计算的;
    变量:
        {@ #变量名#@}

 {@ $smarty.config.变量名@}
    模块定义:模块区域:从定义的位置开始直到下个模块定义或者是页面结束
       [模块名]
          变量=值
       [模块名]
【系统定义的标签】
    1、单选按钮组
       {@ html_radios name="" output="" values="" checked="" separator=""@}
       name:单选按钮的名字
       output:显示的数据内容组成的一维索引数组
       values: 每个单选按钮value值组成的一维的索引数组
       checked:被选中按钮的value值
       separator:按钮组的样式

       options:以value当键名,以显示数据当元素值,组成的关联数组;
    2、复选框按钮组
       {@ html_checkboxes name="" output="" values="" checked="" separator=""@}
       checked:可以是单个数值也可以是被选中的按钮value组成的一维索引数组
    3、下拉列表框
       {@ html_options name="" output="" values="" selected=""@}
       checked改成selected
    4、时间插件
       {@ html_select_time@}
    5、日期插件
       {@ html_selecte_date  start_year="" end_year=""@}
       start_year:起始的年份
       end_year:终止的年份
    6、html_image
    7、html_table
【修饰函数】对传递到前台的数据进行二次修改
    使用格式:
       {@ 变量名|函数名:参数1:参数2[|函数名:参数1:参数2]@}

     capitalize:首字母大写
     date_format:设置日期格式
     truncate:截取字符串
     count_characters:统计字符个数
     default:设置默认值
     indent:缩进
     lower:将字符转换为小写
     strip_tags:去掉HTML标签
     upper:将字符转换为大写
     replace:字符串替换
【session|cookie|get|post】     
     $smarty.session.变量名
     $smarty.cookie.变量名
     $smarty.get.变量名
     $smarty.post.变量名
【用户自定义插件】
     plugins:用户自定义插件目录
     sysplugins:系统插件目录
     1】修饰函数插件:
        文件名:modifier.插件名.php
 函数名:
     function smarty_modifier_插件名($string,参数1,参数2,参数3...){

     }
     $string:所要修饰的数据是什么
     参数:使用该插件时,冒号后面的参数
     修饰数据可以return 也可以是echo出得;
        eg:
     modifier.color.php
     function smarty_modifier_color($string,$color){
        return "<font color='".$color."'>".$string."</font>";
     }
     2】块状插件:就好像literal标签类型似的插件
         {@  标签名 参数1=值1 参数2=值2 参数3=值3......@}

  {@ /标签名@}

        文件名:block.插件名.php
 函数名:
     function smarty_block_插件名($params, $content, $template, &$repeat){

     }
            $params:将参数名当做键名,用参数值作为数组元素值,组成的关联数组
     $content:标签中的数据内容
     $template:smarty对象

     3】function类型插件:好像html_radios   html_select_time
        文件名:
      function.插件名.php
 函数名:
      function smarty_function_插件名($params, $template){

      }
        $params:将参数名当做键名,用参数值作为数组元素值,组成的关联数组
 $template:smarty对象
 显示数据:
   1)直接输出:操作轻松
   2)assign传递前台:可以自由的控制样式


【简易的缓存控制】
   缓存目录
    $tpl -> cache_dir = "./cache";
   缓存时间:时间超过后回重新的生成缓存
    $tpl -> cache_life_tim=60
   打开缓存:
    $tpl -> caching = true;
      false:就是关闭缓存

    display("index.tpl",20111199)
       第二个参数是缓存文件快速识别的ID编号

    clearallcache():清除缓存目录下得所有的缓存文件
    clearcache("那个缓存文件"):清除那个缓存文件
    iscached():判断缓存是否已经存在

    plugins插件中的所有插件在默认情况下,全部是会生成缓存的

    regist_block("前台标签名","PHP函数名",true|false);
       1)在当前PHP页面中定义一个函数
       2)将函数注册成插件
       3)true|false:控制是否缓存的;

    regist_function("前台标签名","PHP函数名",true|false);
【静态HTML页面的生成和原理】
    为了提高SEO优化和页面加载速度
    伪静态

    方法:
       1)字符串替换,文件操作
       2)使用输出流:输出到终端的数据流
         5    4    3    2    1
    ob_start():打开输出流缓冲池
    ob_get_contents():从缓冲池中取得数据
    ob_clear():清除缓冲池

       3)使用smarty内置函数
         fetch(模板文件名[,缓存编号])
  如果没有缓存文件,fetch去编译目录下找编译文件生成html代码
  如果有缓存,fetch自动的加载缓存后的文件
  返回的模板文件被编译后生成的HTML代码;
    时间:
       1)手动生成:后台设置功能按钮
       2)自动生成:
         即时生成静态HTML页面
  根据时间设置生成HTML
【多国语言网站】
    1)风格设计
      风格完全不同,设计两套 调用模板页面使用session固定风格
      风格一样,内容不一样,那么使用语言包使用
    2)数据库设计
       1]数据库级别:浪费磁盘空间  数据量较大时,推荐使用
          数据库名
    ch_gccms
    en_gccms
       2]表级别:现在比较实用一种方式,检索速度不影响,磁盘浪费不严重
          表名:
     ch_news
     en_news
       3]字段级别:检索速度较慢 不浪费磁盘空间
         news
  id   ch_title   en_title   ch_content en_content
    3)程序设计
       使用session保存语言类型,然后根据session语言类型调去不同语言的数据内容和模板风格  为了应付客户端每个人的选择,可以使用cookie保存用户数据.
【单入口程序中引入smarty】
   1)使用smarty目录替换掉原来的gctemplate;
   2)将smarty的配置文件引入到单入口的配置文件中
   3)将将smarty的初始化信息,放入到model.class.php页面
   4)3.0以后,将common.inc.php中的autoload和smarty中的autoload合并;
   注意:将model.class.php中display内的模板文件后缀改掉;

 

你可能感兴趣的:(开发,smarty,解决方案,的)