我已经习惯了ASP.NET MVC,在这里我可以在Razor视图中定义一个这样的部分:
@Html.RenderSection( "scripts" )
我通常把它放在布局视图的底部。这样,我可以从我的视图中添加这样的脚本,它们将被包含在主体的底部,其中定义了脚本部分:
@section scripts {
<script>
(function () {
// do stuff...
}());
</script>
}
在Phalcon中,我可以将它放在布局视图的底部:
$this->assets->outputJs();
然后我可以在我的视图中添加脚本:
$this->assets->addJs('js/whatever.js');
此方法的唯一缺点是此视图的脚本必须位于单独的文件中,这意味着单独的请求。我希望能够像使用Razor一样将脚本直接添加到视图中,并且仍然可以将其渲染到正文的底部。 Phalcon允许你这样做吗?
答案 0 :(得分:1)
是的,您可以使用Partials:
<?php $this->partial("partials/js/whatever") ?>
其中js/whatever
是views/partials/js/whatever.phtml
中的php模板文件。
您也可以使用Volt模板引擎并执行相同操作:
{{ partial('partials/js/whatever') }}
或使用include:
{% include "partials/js/whatever" %}
在Volt中,您还可以使用[Blocks] [3],您可以在主模板文件中定义主要布局的各个部分(例如footer
),在每个视图文件中,您可以定义应放置的内容。
{# templates/base.volt #}
<!DOCTYPE html>
<html>
<head>
<title>My Page</title>
</head>
<body>
<div id="content">{% block content %}{% endblock %}</div>
<div id="footer">
{% block footer %}{% endblock %}
</div>
</body>
</html>
并且在视野中:
{% extends "templates/base.volt" %}
{% block content %}
<h1>My page</h1>
{% endblock %}
{% block footer %}{{ partial('partials/js/whatever') }}{% endblock %}
我写的这个是用于Phalcon的Volt模板引擎,但是如果您使用普通的PHP,那么我就不会知道类似的解决方案。您可以创建简单的服务,收集控制器中模板的链接,然后将它们作为主模板中的部分输出。