博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
学习Smarty3要点记录+顶级页面模板代码:
阅读量:4960 次
发布时间:2019-06-12

本文共 3784 字,大约阅读时间需要 12 分钟。

!!! 顶级页面模板代码

 

  1. 在模板tpl中定义{2+3*4},会计算成14;
  2. {$x + $y}必须紧挨着大括号,+之间有无空格关系不大;
  3. 模板tpl中可定义{$str = strlen($hello)},输出{$a};{$a = strlen("$hello")}可以加引号,还可以加{}
  4. 模板tpl中定义多维数组{assign var=foo value=array(1, array(3,4), 7)},也可以{assign var=foo value=array[1, [3,4], 7]},还可以{assign var=foo value=[0=>1, 1=>[3,4], 2=>7]},调用方式{$foo[1][1]},或者{$foo.1.1},输出4;
  5. Smarty3模板tpl中支持动态的变量名{assign var=foo_3 value=[0=>1, 1=>[3,4], 2=>7, 8, 12, 79]},执行{$foo_{$x}[1][1]},输出4;
  6. 支持对象链:

{$object->method1($x)->method2($y)}

在Php中定义如下:

class Test {

function f1()

    {

        echo "调用方法1.<br/>";

              return $this;

    }

    function f2()

    {

        echo "调用方法2.<br/>";

}

}

 

$t = new Test;

$smarty->assign("t", $t);

 

模板tpl中可以这样引用:

{$t->f1()->f2()}

 

  1. for语句:

{for $i=0; $i<$x; $i++}

hello, {$i}<br/>

{/for}

也可以

{for $i = 0 to 3 step 1}

hello, {$i}<br/>

{/for}

{for $i = 0 to 3}

hello, {$i@iteration}, {$i@total}, {$i@first}, {$i@last}<br/>

{/for}

{foreach $myarray as $var}...{/foreach}

{while $foo}...{/while}

 

  1. 函数递归:

{function name=menu level=0}

  <ul class="level{$level}">

  {foreach $data as $entry}

    {if is_array($entry)}

      <li>{$entry@key}</li>

       {menu data=$entry level=$level+1}

    {else}

      <li>{$entry}</li>

    {/if}

  {/foreach}

  </ul>

{/function}

 

{$menu = ['item1','item2','item3' => ['item3-1','item3-2','item3-3' =>

['item3-3-1','item3-3-2']],'item4']}

 

{menu data=$menu}

 

  输出:

    * item1

    * item2

    * item3

          o item3-1

          o item3-2

          o item3-3

                + item3-3-1

                + item3-3-2

* item4

 

  1. 代码块不缓存:

{nocache}...{/nocache}之间的代码永远不会缓存

 

  1. 模板tpl中:

{$smarty.current_dir}输出模板当前目录

 

11.字符串直接用于smarty中:

 $smarty->display('string:This is my template, {$foo}!'); // php

{include file="string:This is my template, {$foo}!"} // template

均是直接显示出string来。

 

  1. 限定变量存储:

$tpl = $smarty->createTemplate('index.tpl',$smarty);

或$tpl = $smarty->createTemplate('index.tpl')

$tpl->assign('hello',"hello world!");

 

//引用模板文件

$tpl->display('index.tpl');

 

  1. 可以将在一个tpl中定义的变量的范围放大,以在其他的tpl文件中使用:

{assign var=foo value='bar'}           // no scope is specified, the default 'local'

{$foo='bar'}                        // same, local scope

{assign var=foo value='bar' scope='local'} // same, local scope

 

{assign var=foo value='bar' scope='parent'}

// Values will be available to the parent object

{$foo='bar' scope='parent'}       // (normally the calling template)

 

{assign var=foo value='bar' scope='root'} 

 // Values will be exported up to the root object, so they can

{$foo='bar' scope='root'}   // be seen from all templates using the same root.

 

{assign var=foo value='bar' scope='global'}

// Values will be exported to global variable storage,

{$foo='bar' scope='global'}    // they are available to any and all templates.

 

  1. 模板继承:

parent.tpl:

<html>

  <head>

    <title>{block name='title'}My site name{/block}</title>

  </head>

  <body>

    <h1>{block name='page-title'}Default page title{/block}</h1>

    <div id="content">

      {block name='content'}

        Default content

      {/block}

    </div>

  </body>

</html>

 

child.tpl:

{extends file='parent.tpl'}

{block name='title'}

Child title

{/block}

 

grandchild.tpl:

{extends file='child.tpl'}

{block name='title'}Home - {$smarty.block.parent}{/block}

{block name='page-title'}My home{/block}

{block name='content'}

  {foreach $images as $img}

    <img src="{$img.url}" alt="{$img.description}" />

  {/foreach}

{/block}

 

We redefined all the blocks here, however in the title block we used {$smarty.block.parent},which tells Smarty to insert the default content from the parent template in its place.The content block was overriden to display the image files, and page-title has also be overriden to display a completely different title.

 

If we render grandchild.tpl we will get this:

<html>

  <head>

    <title>Home - Child title</title>

  </head>

  <body>

    <h1>My home</h1>

    <div id="content">

      <img src="/example.jpg" alt="image" />

      <img src="/example2.jpg" alt="image" />

      <img src="/example3.jpg" alt="image" />

    </div>

  </body>

</html>

转载于:https://www.cnblogs.com/carl2380/archive/2012/05/21/2512055.html

你可能感兴趣的文章
64内核开发第11讲.多线程开发.以及同步.
查看>>
django中的FBV和CBV
查看>>
Web | JavaScript学习笔记
查看>>
数据结构大总结系列之B树和R树
查看>>
14-使用glusterfs做持久化存储
查看>>
....
查看>>
课后作业4
查看>>
自动打包发布到服务器的持续集成工具:Jenkins+钉钉
查看>>
下推栈 中缀-后缀表达式转换 后缀表达式求值 数组与链表实现
查看>>
Xshell连接ESXI方法
查看>>
小白都会超详细--ELK日志管理平台搭建教程
查看>>
Leetcode 219. Contains Duplicate II
查看>>
C#_函数参数的值传递和引用传递笔记
查看>>
专业实训日志04
查看>>
Unique Paths II - LeetCode
查看>>
微信朋友圈分享链接的【图片】设置
查看>>
朱晔的互联网架构实践心得S1E2:屡试不爽的架构三马车
查看>>
2018.11.16 bzoj4827: [Hnoi2017]礼物(ntt)
查看>>
os 模块
查看>>
Perl文件句柄引用
查看>>