开发者

How can I split a HAML template into different partials/includes in PHP?

I am a PHP dev trying to start using HAML, using this implementation: htt开发者_开发知识库p://phphaml.sourceforge.net/

HAML looks awesome, but I don't understand if/how it supports partials (or includes, as they are called in the PHP world).

I would like to have a master template HAML file that then goes and loads up a bunch of partials for all the little pieces. (Then I can reuse those pieces in other templates too.)

In PHP or Ruby this would be really easy, is there any way to do this with HAML? thanks!

dylan


You could create a global render_haml_partial method by analogy with phpHaml's existing display_haml method that might look something like:

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);
}

This method could be placed in phpHaml's HamlParser.class.php file so it is available to all your templates.

The only difference between this and display_haml is that it invokes fetch instead of display at the end and returns the result so you can then insert it in-place into the invoking template.

You would then use it in your PHP/HAML templates as follows:

= render_haml_template("path to partial")

This would then be very similar to the Rails/HAML syntax:

= render :partial => 'path to partial'

Note that using display_haml directly does not have quite the same effect since it renders the template directly to the output instead of returning the result to the caller. Thus you could do the following:

- display_haml("path to partial")

But this doesn't capture the result of the render.

I'm guessing that somebody who cares enough about phpHaml might add such a render_haml_partial or something similar eventually - I might suggest it to the author some time.


Quite an old question, but I've updated the source code of phpHaml to reflect this new functionality!

Check out the commit @github https://github.com/endorama/phphaml/commit/8d95d5ebff06275db8b14438e566c6e41ec91b7f

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜