smarty 模板怎样使用php标签

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了smarty 模板怎样使用php标签相关的知识,希望对你有一定的参考价值。

smarty模板貌似默认是屏蔽掉php/php标签的,要怎么才能在模板中使用php/php标签呢?怎么办?没人懂吗?

参考技术A smarty本身是不推荐使用php标记的,可以通过编写插件(block,function,modifier)来代替。
smarty默认不开启php标记,需要在创建smarty对象后做如下设置:
$smarty->php_handling = SMARTY_PHP_ALLOW ;追问

不好意思,这才是模板文件,刚打错

asdasda

echo "dasjkhdkasjh";

还是不能输出php标签里echo的值

追答

需要在服务器端设置:
$smarty->php_handling = SMARTY_PHP_ALLOW ; 来开启php模板标签,默认此标签是不可用的
示例代码:
require("./Smarty/Config_File.class.php");
require(“./Smarty/Smarty.class.php");

//init smarty
$smarty=new Smarty();
$smarty->cache_dir =WEB_ROOT.APP_DIR."/".trim($cfg["cache_dir"])."/";
$smarty->template_dir =WEB_ROOT.APP_DIR."/".trim($cfg["template_dir"])."/";
$smarty->compile_dir =WEB_ROOT.APP_DIR."/".trim($cfg["compiler_dir"])."/";
$smarty->config_dir =WEB_ROOT.APP_DIR."/".trim($cfg["config_dir"])."/";
$smarty->left_delimiter =trim($cfg["left_delimiter"]);
$smarty->right_delimiter =trim($cfg["right_delimiter"]);
$smarty->caching =false;
$smarty->php_handling = SMARTY_PHP_ALLOW ;

参考技术B 用.tpl模版文件 显示你所说的echo的值,只是不能像你在写php中那样写, 要用模版标签<......>显示。
事例代码:
php文件中写的是:
<tr class="tableline">
<td width="24%" class="tdline"><b>留言者:</b><? echo $row['sender'];?></td>
<td width="39%" class="tdline"><b>IP地址:</b><? echo $row['sendIP'];?></td>
<td width="37%" class="tdline"><b>日期:</b><? echo $row['sendDateTime'];?></td>
</tr>
模版文件中就变了:
<tr>
<td width="24%" class="tdline"><b>留言者:</b><$msg.sender></td>
<td width="39%" class="tdline"><b>IP地址:</b><$msg.sendIP></td>
<td width="37%" class="tdline"><b>日期:</b><$msg.sendDateTime></td>
</tr>
如果对你有帮助,请选为最佳答案哦。

PHP Smarty 模板 模板继承 {extends}

{extends}
模板继承中,你可以在子模板内使用{extends}标签来扩展父模板。
1.{extends}必须放在模板的第一行。
2.如果子模板要用{extends}来扩展父模板,那么它只能有 {block}的区域。

3.任何其他的模板内容都会被忽略。

扩展使用在$template_dir 之外的文件,请使用模板资源的语法。

Note
当你扩展一个父模板名称的变量如{extends file=$parent_file},

请确保$parent_file变量放到同一个 $cache_id中. 否则Smarty无法辨别不同的$parent_file变量。

parent.php页面

<?php 
//创建smarty对象
require_once ‘./libs/Smarty.class.php‘;
//定义根目录
define(‘ROOT‘, str_replace("\\", "/",dirname(__FILE__))."/");
//实例化Smarty类
$smarty=new Smarty();
//设定定界符
$smarty->left_delimiter="<{";
$smarty->right_delimiter="}>";
//设置为false 定界符号左右可以有空格
$smarty->auto_literal = false;

//添加一个插件的目录
//$smarty->setPluginsDir(ROOT."/libs/myplugins/");

//注意添加一个插件,要把系统默认设置的路径加入 否则不能使用默认系统的插件
$smarty->setPluginsDir(array(
    ROOT."/libs/plugins/",//系统默认设置的路径
    ROOT."/libs/myplugins/",//自定义的
));

//变量输出
$smarty->display(‘parent.tpl‘);

?>

child.php页面

<?php 
//创建smarty对象
require_once ‘./libs/Smarty.class.php‘;
//定义根目录
define(‘ROOT‘, str_replace("\\", "/",dirname(__FILE__))."/");
//实例化Smarty类
$smarty=new Smarty();
//设定定界符
$smarty->left_delimiter="<{";
$smarty->right_delimiter="}>";
//设置为false 定界符号左右可以有空格
$smarty->auto_literal = false;

//变量输出
$smarty->display(‘child.tpl‘);

?>

parent.tpl页面

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="content-type" content="text/html;charset=utf-8"/>
    <title><{block name="one"}>This is a title<{/block}></title>
</head>
<body>
<{block name="two"}>This is a content....<{/block}>
<{block name="three"}>我是<{/block}>
<{block name="four"}>中国<{/block}>
<{block name="five"}>电影<{/block}>
<{block name="six"}>我要去<{$smarty.block.child}>上大学<{/block}>
</body>
</html>

child.tpl页面

<{extends ‘parent.tpl‘}>
<{block name="one"}>我是第一个block<{/block}>
<{block name="two"}>我是第二个block<{/block}>
<{block name="three" append}>津沙港湾<{/block}>
<{block name="four" prepend}>我爱你,<{/block}>
<{block name="five" }>你喜欢看<{$smarty.block.parent}>吗?<{/block}>
<{block name="six" }>上海<{/block}>

浏览器输出(child.php页面输出)

我是第二个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} 来作为继承。

本文出自 “津沙港湾” 博客,请务必保留此出处http://11410485.blog.51cto.com/11400485/1844354

以上是关于smarty 模板怎样使用php标签的主要内容,如果未能解决你的问题,请参考以下文章

PHP 模板引擎Smarty的基本语法

smarty模板学习备忘

6月3 Smarty基础读取配置

PHP Smarty 模板 模板继承 {extends}

php模板引擎smarty怎么安装?

smarty简单语法