Phalcon中的占位符

Placeholders in Phalcon

本文关键字:占位符 Phalcon      更新时间:2023-09-26

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

是的,您可以使用Partials:

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

其中js/whateverviews/partials/js/whatever.phtml中的php模板文件。

你也可以使用Volt模板引擎并做同样的事情:

{{ partial('partials/js/whatever') }}

或使用包括:

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