【问题标题】:Phalcon PhP - how to disable the main layout for an actionPhalcon PhP - 如何禁用一个动作的主布局
【发布时间】:2016-08-08 13:57:50
【问题描述】:

我正在我的一个 phalcon 控制器中创建一个操作,该操作将用于生成页面的打印版本。这是我的 print.volt 布局:

<!DOCTYPE html>
<html lang="en">
<head>
    <title>Print</title>
</head>
<body>
<!-- Begin page content -->
<div class="container">
    {% block content %}{% endblock %}
</div>
</body>
</html>

我的看法:

{% extends "layouts/print.volt" %}
{% block content %}
    HERE
    <script type="text/javascript">
        window.print();
    </script>
{% endblock %}

它正在工作,但我的问题是生成的内容被插入到另一个具有{{ content() }} 标签的布局中。最后 O 得到一个包含所有网站菜单、我的 print.volt 和我的视图的页面。我想知道如何在没有主布局的情况下仅将视图插入 print.volt 中。如何禁用此行为?

感谢您的帮助!

【问题讨论】:

    标签: php phalcon


    【解决方案1】:

    我想到了两个选项。

    1) 使用简单视图,可以在没有布局的情况下渲染模板:

    $view = new \Phalcon\Mvc\View\Simple();
    $view->setViewsDir('PATH_TO_YOUR_VIEWS');
    $html = $view->render('template-name', $params);
    

    此选项在为电子邮件发送生成 HTML 时也非常方便。

    2) 禁用当前 Controller::method 的布局

    $this->view->setLayout('');
    

    3) 更新: Timothy 推荐了 (2) 的替代方案

    $this->view->setRenderLevel(\Phalcon\Mvc\View::LEVEL_ACTION_VIEW);
    

    【讨论】:

    • $this->view->setLayout('');对我有用,谢谢!我将投票正确的答案
    • $this-&gt;view-&gt;setRenderLevel(View::LEVEL_ACTION_VIEW); 不是更好的解决方案吗?
    • Andre,也许你错过了 View 之前的命名空间?检查上面的选项 (3)。 @Timothy 好话。
    • @Timothy 是的,它可以使用命名空间,这也可以使用 $this->view->setLayout('print.volt');谢谢大家!
    猜你喜欢
    • 2011-05-16
    • 2012-12-05
    • 1970-01-01
    • 1970-01-01
    • 2014-06-28
    • 1970-01-01
    • 2018-09-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多