views:

44

answers:

1

Hi All,

I am a PHP dev trying to start using HAML, using this implementation: http://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

+1  A: 

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.

Richard Cook
This is awesome, thank you!
simpleguy
Would you mind accepting my answer? Thanks!
Richard Cook