smarty中的母板极制_extends和block标签

模板继承 继承是从面向对象编程而来的概念,模板继承可以让你定义一个或多个父模板,提供给子模板来进行扩展。 扩展继承意味着子模板可以覆盖部分或全部父模板的块区域。

继承结构可以是多层次的,所以你可以继承于一个文件,而这个文件又是继承于其他文件,等等。

在覆盖父模板的{block}块以外的地方, 子模板不能定义任何内容。任何在{block}以外的 内容都会被自动忽略。

在子模板和父模板中的{block}内容,可以通过 append 和 prepend来进行合并。 {block}的选项,和 {$smarty.block.parent} 或 {$smarty.block.child}会持有这些内容。

模板继承在编译时将编译成单独的一个编译文件。对比效果相似的{include}包含模板功能,模板继承的性能更高。

子模板继承使用{extends}标签, 该标签一定放要在子模板的第一行。 另一种做法是将整个模板继承树,在PHP程序调用fetch() 或 display()的时候, 用extends:的模板资源类型,该做法有更大的灵活性。

Note 当开启了$compile_check,继承树里面的全部文件都会在每次调用的时候检查是否有修改。 因此,在生产环境中你最好关闭$compile_check。

Note 如果你的子模板里面有用到{include} 来包含模板,而被包含的模板里面存在供{include}模板 调用的{block}区域, 那么在最顶层的父模板里面,你需要放置一个空的 {block} 来作为继承。

Example 17.6. 模板继承例子

layout.tpl (父模板)

<html>
<head>
  <title>{block name=title}默认页面标题{/block}</title>
  {block name=head}{/block}
</head>
<body>
{block name=body}{/block}
</body>
</html>

myproject.tpl (子模板)

{extends file=‘layout.tpl‘}
{block name=head}
  <link href="/css/mypage.css" rel="stylesheet" type="text/css"/>
  <script src="/js/mypage.js"></script>
{/block}

mypage.tpl (孙子模板)

{extends file=‘myproject.tpl‘}
{block name=title}我的页面标题{/block}
{block name=head}
  <link href="/css/mypage.css" rel="stylesheet" type="text/css"/>
  <script src="/js/mypage.js"></script>
{/block}
{block name=body}我的HTML页面内容在这里{/block}

显示上面的模板

 $smarty->display(‘mypage.tpl‘);

页面将输出:

<html>
<head>
  <title>我的页面标题</title>
  <link href="/css/mypage.css" rel="stylesheet" type="text/css"/>
  <script src="/js/mypage.js"></script>
</head>
<body>
我的HTML页面内容在这里
</body>
</html>

Example 17.7. 用extends:来进行模板继承

代替模板内使用{extends}的继承方式, 你可以通过在PHP内定义继承树来进行继承,使用 extends:的资源类型。

下面的代码将返回和上面例子一样的结果:

<?php
$smarty->display(‘extends:layout.tpl|myproject.tpl|mypage.tpl‘);
?>
时间: 2024-11-14 12:05:35

smarty中的母板极制_extends和block标签的相关文章

Smarty中section的用法

1.循环一个简单的一维数组: <?php $data = array(1000,1001,1002); $smarty->assign('custid',$data); ?> //customer和下面的foo可以随便命名,作用其实仅仅是一个index下标,用来引用数组中的元素 {section name=customer loop=$custid} id: {$custid[customer]}<br /> {/section} <hr /> {section

Smarty中一些标签的使用

Smarty中的标签和php中的标签不一样 foreach标签{foreach   from=$goods(变量名) key='键,不带$' item='值,不带$'}中间的显示内容{/foreach} section标签{section loop=$goods变量名 name=临时角标} 显示内容$goods[临时角标].goods_id{/section} while循环标签{while $age<18}中间是显示内容,$age要进行运算,否则将是死循环{/while} 封装类mySmart

smarty中调用php内置函数

CleverCode发现smarty中调用php内置函数可以通过|实现.|前后没有空格.如果是数组求count需要加上@. 1个参数时候: {{'param1'|functionName}} 例如 {{$tmpStr|strlen}} 2个参数时候: {{'param1'|functionName:'param2'}} {$tmpStr|substr:'1'} 多个参数时候: {{'param1'|functionName:'param2':'param3'..}} {{$tmpStr|subs

Smarty中模板eq相等 ne、neq不相等, gt大于, lt小于

eq相等   ne.neq不相等,   gt大于, lt小于 gte.ge大于等于   lte.le 小于等于   not非   mod求模   is [not] div by是否能被某数整除   is [not] even是否为偶数   is [not] even by $b即($a / $b) % 2 == 0   is [not] odd是否为奇   is not odd by $b即($a / $b) % 2 != 0 示例: equal/ not equal/ greater than

smarty中foreach的使用

foreach.tpl <span style="font-size:18px;"><h1>内建函数foreach的使用</h1> <hr> <meta http-equiv="content-type" content="text/html;charset=utf-8"/> **********foreach的使用**********<br> <{foreach fr

在smarty中通过php脚本获取smarty变量

一,php 脚本(test.php) $smarty = new Sys_SmartyWork(CRON_HOME."/modifyInfo/tpl",CRON_HOME."/modifyInfo/tpl_c"); $hash = array(); $info = array(); $info ['smarty'] = 'i am smarty!'; $info ['php'] = 'i am php'; $hash['arrInfo'] = $info; //进行

二、Smarty中的三种主要变量

1.从PHP中分配的变量 $smarty -> assign(); 从PHP分配给模板使用的变量:动态变量 2.从配置文件中读取的变量 $smarty配置文件中的内容不是PHP读取,而是就在smarty模板中应用变量,让用户修改模板的板式.外观. 1)  配置文件需要放置在什么位置,需要设置多少个配置文件,及如何去命名 2)  配置文件该如何编写 3)  如何在模板中找到配置文件? 4)  如何在模板中读取配置文件中的内容? 例:创建配置文件show.conf,内容为: Bodycolor=bl

smarty 中时间格式化的用法

大家都知道PHP中输出时间和日期可以用 date("Y-m-d H:i:s",时间戳)  , 但是在smarty模板中,$time|date_format:'%Y-%m-%d %H:%M:%S' , 这个让我找了很久.原来 在smarty中,分钟 不是用i ,使用M .留着做记号.

Smarty中的自定义函数(二)复选框、下拉列表、单选框

接Smarty中的自定义函数(一) 7.html_checkboxes 复选框 [php] view plain copy print? $ssss1 = array(2,3,4); $ssss2 = array('学习','工作','生活'); $ssss3 = array(2,4); $smarty->assign('ssss1',$ssss1); $smarty->assign('ssss2',$ssss2); $smarty->assign('ssss3',$ssss3); $s