【问题标题】:How to retrieve content in layout zend framework2?如何在布局 zend framework2 中检索内容?
【发布时间】:2016-12-25 22:26:14
【问题描述】:

我在 zend 框架中使用 phtml 文件。现在我正在使用 .tpl 文件。 我发现了如何使用 html 脚本等等。但是当我想使用php代码时。然后我正在使用:

<?php 
    echo "test";
    echo $this->content; 
?>

问题在于它在 layout.tpl 文件中。主要内容在其他模块的 index.tpl 中。

而不是获取索引文件的内容它只是回显“测试”。如何使其工作?

编辑:我也试过{$this-&gt;content}

【问题讨论】:

  • 也许你需要使用Smarty 语法,而不是php
  • 如果我搜索得到的只是这种语法的建议:(
  • 我得到了 PHP : Smarty : {$foo} 但没用

标签: php zend-framework zend-framework2


【解决方案1】:

如果您使用 Smarty 模板引擎和 SmartyModule,那么您必须在视图脚本中使用 Smarty 语法,因为 Zend\View\Renderer\PhpRenderer 将被 Smarty 渲染器(和 Smarty 模板引擎)覆盖。此外,如果您希望在 Smarty 中使用布局,请参阅Smarty's Template Inheritance 机制。这是一个例子:

layout.tpl

<html>
<head>
  <title>{block name=title}Default Page Title{/block}</title>
</head>
<body>
{block name=body}{/block}
</body>
</html>

我的页面.tpl

{extends file="layout.tpl"}
{block name=title}My Page Title{/block}
{block name=body}My HTML Page Body goes here{/block}

否则,如果您使用 PhpRenderer,即使您将视图脚本的文件扩展名更改为 .tpl,它也不会“识别”任何模板语言,因为它只会include 视图脚本的内容(参见渲染器source code 的第 502-503 行)。因此,与任何include 一样,PHP 代码将立即执行并存储在渲染器的$__content 属性中。这可能是您的echo 命令立即执行的原因。

因此,基本上,您必须选择您的渲染器(PhpRenderer 或 Smarty Renderer 通过 SmartyModule),然后遵守其内部工作原理(分别为 PHP/HTML 或 Smarty 语法(例如variables))。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-09
    • 1970-01-01
    • 2016-10-27
    • 2015-05-09
    • 2014-03-05
    • 1970-01-01
    • 1970-01-01
    • 2011-05-20
    相关资源
    最近更新 更多