模板语法
学习Smarty模板语法的最佳资源是其官方文档,您可以在www.smarty.net找到 。另外,下面还介绍了Yii特定的语法扩展。
设置对象属性
有一个称为的特殊功能set
,可让您设置视图和控制器的通用属性。目前可用的属性title
,theme
以及layout
:
{set title="My Page"}
{set theme="frontend"}
{set layout="main.tpl"}
对于标题,还有一个专用块:
{title}My Page{/title}
设置元标记
可以将元标签设置如下:
{meta keywords="Yii,PHP,Smarty,framework"}
还有一个专用的块用于描述:
{description}This is my page about Smarty extension{/description}
调用对象方法
有时候你需要打电话
使用小部件作为函数和块导入静态类
您可以直接在模板中导入其他静态类:
{use class="yii\helpers\Html"}
{Html::mailto('eugenia@example.com')}
如果需要,可以设置自定义别名:
{use class="yii\helpers\Html" as="Markup"}
{Markup::mailto('eugenia@example.com')}
扩展有助于以方便的方式使用小部件,将其语法转换为函数调用或块。对于常规小部件,可以使用如下功能:
{use class='@yii\grid\GridView' type='function'}
{GridView dataProvider=$provider}
对于具有begin
和end
方法(例如ActiveForm)的小部件,最好使用block:
{use class='yii\widgets\ActiveForm' type='block'}
{ActiveForm assign='form' id='login-form' action='/form-handler' options=['class' => 'form-horizontal']}
{$form->field($model, 'firstName')}
<div class="form-group">
<div class="col-lg-offset-1 col-lg-11">
</div>
</div>
{/ActiveForm}
如果您经常使用特定的小部件,则最好在应用程序配置中对其进行声明并{use class
从模板中删除调用:
'components' => [
'view' => [
// ...
'renderers' => [
'tpl' => [
'class' => 'yii\smarty\ViewRenderer',
'widgets' => [
'blocks' => [
'ActiveForm' => '\yii\widgets\ActiveForm',
],
],
],
],
],
],
引用其他模板
在include
和extends
语句中引用模板的方式主要有两种:
{include 'comment.tpl'}
{extends 'post.tpl'}
{include '@app/views/snippets/avatar.tpl'}
{extends '@app/views/layouts/2columns.tpl'}
在第一种情况下,将相对于当前模板路径搜索视图。对于comment.tpl
,post.tpl
这意味着将在与当前渲染的模板相同的目录中搜索这些文件。
在第二种情况下,我们使用路径别名。@app
默认情况下,所有Yii别名(例如)都可用。
CSS,JavaScript和资产捆绑
为了注册JavaScript和CSS文件,可以使用以下语法:
{registerJsFile url='http://maps.google.com/maps/api/js?sensor=false' position='POS_END'}
{registerCssFile url='@assets/css/normalizer.css'}
如果直接在模板中需要JavaScript和CSS,则有一些方便的块:
{registerJs key='show' position='POS_LOAD'}
$("span.show").replaceWith('<div class="show">');
{/registerJs}
{registerCss}
div.header {
background-color: #3366bd;
color: white;
}
{/registerCss}
资产捆绑包可以通过以下方式注册:
{use class="yii\web\JqueryAsset"}
{JqueryAsset::register($this)|void}
这里我们使用void
修饰符,因为我们不需要方法调用结果。
网址
您可以使用两个函数来构建URL:
<a href="http://%7Bpath%20route='blog/view'%20alias=%24post.alias%7D" target="_blank">{$post.title}</a>
<a href="http://%7Burl%20route='blog/view'%20alias=%24post.alias%7D" target="_blank">{$post.title}</a>
path
生成相对URL,而url
生成绝对URL 。内部都使用\ yii \ helpers \ Url。
附加变量
在Smarty模板中,始终定义以下变量:
$app
,等于 \Yii::$app
$this
,等于当前View
对象
访问配置参数
可以通过Yii::$app->params->something
以下方式使用应用程序中可用的Yii参数:
`{#something#}`
</div>