占位符在Phalcon

时间:2014-10-08 18:13:37

标签: javascript asp.net-mvc razor phalcon

我已经习惯了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允许你这样做吗?

1 个答案:

答案 0 :(得分:1)

是的,您可以使用Partials

<?php $this->partial("partials/js/whatever") ?>

其中js/whateverviews/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,那么我就不会知道类似的解决方案。您可以创建简单的服务,收集控制器中模板的链接,然后将它们作为主模板中的部分输出。