【问题标题】:How can I split a HAML template into different partials/includes in PHP?如何在 PHP 中将 HAML 模板拆分为不同的部分/包含?
【发布时间】:2011-04-16 11:08:28
【问题描述】:

我是一名 PHP 开发人员,尝试开始使用 HAML,使用以下实现: http://phphaml.sourceforge.net/

HAML 看起来很棒,但我不明白它是否/如何支持部分(或包含,因为它们在 PHP 世界中被称为)。

我想要一个主模板 HAML 文件,然后为所有小片段加载一堆部分。 (然后我也可以在其他模板中重复使用这些部分。)

在 PHP 或 Ruby 中,这真的很容易,有没有办法用 HAML 做到这一点?谢谢!

迪伦

【问题讨论】:

  • 我不认为 phpHaml 直接支持这个。但是您可以使用 display_haml 或编写自己的全局 render_haml_partial 方法来实现类似(但略有不同)的东西 - 有关此方法的详细信息,请参阅我的答案。

标签: php ruby haml partials


【解决方案1】:

相当老的问题,但我已经更新了 phpHaml 的源代码以反映这个新功能!

查看提交@github https://github.com/endorama/phphaml/commit/8d95d5ebff06275db8b14438e566c6e41ec91b7f

【讨论】:

  • 我刚刚检查了对 phpHaml 的更改。感谢您采用这种新方法!
【解决方案2】:

您可以通过类比 phpHaml 现有的 display_haml 方法来创建一个全局 render_haml_partial 方法,该方法可能类似于:

function render_haml_partial($sFilename, $aVariables = array(), $sTmp = true, $bGPSSC = false)
{
    $sPath = realpath($sFilename);
    $haml = new HamlParser(dirname($sPath), $sTmp);
    $haml->append($GLOBALS);
    if ($bGPSSC)
    {
        $haml->append($_GET);
        $haml->append($_POST);
        $haml->append($_SESSION);
        $haml->append($_SERVER);
        $haml->append($_COOKIE);
    }
    $haml->append($aVariables);
    return $haml->fetch($sFilename);
}

此方法可以放在 phpHaml 的 HamlParser.class.php 文件中,以便您的所有模板都可以使用它。

这和display_haml 之间的唯一区别是它在最后调用fetch 而不是display 并返回结果,以便您可以将其就地插入到调用模板中。

然后您将在您的 PHP/HAML 模板中使用它,如下所示:

= render_haml_template("path to partial")

这将与 Rails/HAML 语法非常相似:

= render :partial => 'path to partial'

请注意,直接使用display_haml 不会产生完全相同的效果,因为它会将模板直接呈现到输出,而不是将结果返回给调用者。因此,您可以执行以下操作:

- display_haml("path to partial")

但这不会捕获渲染的结果。

我猜对 phpHaml 足够关心的人最终可能会添加这样的 render_haml_partial 或类似的东西 - 我可能会在一段时间内向作者建议。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-26
    • 1970-01-01
    • 2014-01-19
    • 1970-01-01
    • 2019-08-02
    • 1970-01-01
    相关资源
    最近更新 更多