如何将HAML模板拆分为PHP中的不同部分/包含?

时间:2010-09-23 19:36:18

标签: php ruby haml partials

我是一个试图开始使用HAML的PHP​​开发人员,使用此实现: http://phphaml.sourceforge.net/

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

我想有一个主模板HAML文件然后去加载所有小块的一堆部分。 (然后我也可以在其他模板中重用这些部分。)

在PHP或Ruby中,这将非常简单,有没有办法用HAML做到这一点?谢谢!

迪伦

2 个答案:

答案 0 :(得分:3)

您可以使用phpHaml现有的render_haml_partial方法类比创建全局display_haml方法,该方法可能类似于:

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或类似的东西 - 我可能会在一段时间内向作者提出建议。

答案 1 :(得分:2)

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

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