smarty - 如何获取()Smarty模板的子部分

标签 smarty smarty3

背景 Smarty 是一个模板引擎,将 Web 应用程序的表示层与逻辑层分开。它非常适合用于开发 Web 应用程序的模型- View -控制方法。 View 可以用 Smarty 模板表示,它只包含 HTML 和 Smarty 标签。控件可以由 PHP 文件实现,这些文件通过 PHP 代码根据包含在其中的逻辑为适当的 View 提供服务。通过 display() 命令显示模板来实例化 View 。或者,可以将模板作为变量读入,而不通过 fetch() 命令显示它。模板的文件名是这两个命令的参数。

问题 fetch() 命令可以读取整个模板。为了读取模板的部分/子部分,这些部分中的每一个通常都需要存储在一个单独的文件中,该文件具有自己的名称,可以作为命令的参数。这会创建不必要的文件。

问题是否可以通过某种方式标记模板的部分来仅获取 Smarty 模板的部分内容?

案例 下面我展示了一个带有 Smarty 和 HTML 标签的示例模板文件,以及带有 PHP 代码的相应 Controller 文件。

模板文件 (index.tpl)

<html>
<body>
    <div id="sec1">
        First section
    </div>
    <div id="sec2">
        Second section
    </div>
</body>
</html>

Controller 文件 (index.php)

<?php
    $smarty = new Smarty;
    $template = $smarty->fetch("index.tpl");
?>

在上面的示例中,$template 变量将包含模板页面的完整输出。下面是示例中的内容转储。

$template => string(255)
"<html><body>
<div id="sec1">First section</div>
<div id="sec2">Second section</div>
</body></html>"

但是,假设我希望分别从每个 DIV 容器中读取代码,并将它们存储到单独的变量中,我该如何实现呢?例如,假设我有一个名为 fetch_sub() 的神奇函数。这是我对使用它的期望。

<?php
    $smarty = new Smarty;
    $div1 = $smarty->fetch_sub("index.tpl", "sec1");
    $div2 = $smarty->fetch_sub("index.tpl", "sec2");
?>

那么 $div1 等将只包含相关的子部分,而不是整个模板。

其他信息不是 Smarty 的初学者,并且对基本概念和 Smarty 的一些高级概念有相当好的处理。以下是我迄今为止对问题概念化和解决方案的尝试。我最初的粗略想法是使用 {capture} 将模板划分为多个部分,然后以某种方式引用每个部分。我在下面展示了这个想法的一个大纲示例。

    {capture name=sec1}
    <div id="sec1">
        First section
    </div>
    {/capture}
    . . .

最佳答案

Smarty(自 Smarty 3.1 起)没有内置功能来帮助您实现目标。我在 2011 年提出了类似的建议,但我们还没有开始实现它。

也许您可以将生成的 HTML 解析为 DOM 并使用 xpath 或类似的东西帮助自己?

关于smarty - 如何获取()Smarty模板的子部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11891286/

相关文章:

php - Smarty {if $foo} 相当于 isset()

php - 将没有命名空间的类导入命名空间类

php - 如何设置由 php 创建的日期并在单个 span 元素中输出

javascript - 为什么在以下场景中没有设置 href 属性?

jquery - 使用 jquery 加载 smarty tpl

php - <body> 标签 & script 标签和 link 标签下方的空白区域位于 head 标签的 body 标签下方

php - Smarty 可以只读取一个 block 而不是模板吗?

php - 在 session 中存储值并在 tpl 文件 xcart 上检索

php - 使用 SmartyBC 类文件时,{php} 无法在最新的 smarty 中工作

php - 如何在 Smarty 中使用一组 PHP 函数