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