2010-11-15 2 views
10

Sto imparando il baffo per un progetto che ho iniziato durante il fine settimana.Baffi parziali e riutilizzo del codice

Sto usando l'implementazione di PHP. Ho, tuttavia, un paio di richieste perché non sono abituato al sistema.

Come gestite l'ereditarietà del modello o riutilizzate? Conosco i partial, ma come dovrei usarli? Sto facendo qualcosa di simile, ala includono:

top.mustache:

<!DOCTYPE html> 
<html lang='es'> 
<head> 
    <meta charset=utf-8" /> 
    <link rel="stylesheet" href="/media/style.css" type="text/css" media="screen" /> 
</head> 
<body> 
    <header><h1><a href="/">Top</a></h1> 
    </header> 
    <section> 

bottom.mustache:

 </section> 
     <footer><a href="http://potajecreativo.com/">potaje</a></footer> 
</body> 
</html> 

E al fine di rendere questo modello:

{{>top}} 
<form action="/album/" method="post"> 
    <p><label for="name">Name</label> <input type="text" name="name" value=""/></p> 
    <p><label for="description">Description</label> <textarea name="description" rows="8" cols="40"></textarea></p> 
    <p><input type="submit" value="Save" /></p> 
</form> 
{{>bottom }} 

È questo l'approccio giusto?

risposta

6

Ecco un esempio di come funziona l'implementazione di php di Mustache. Di nota è che Mustache.php sarà non espandere i partial/template inclusi, quindi devi passarli ai baffi come mostrato di seguito. Questo esempio è stato messo insieme su un vecchio framework cakephp.

<? 
    # php cannot recognize multiple acceptable file extensions for partials, 
    # so toggle it to mustache's extension 
    $this->ext = '.mustache'; 

    # Mustache says it's logic-less, but that's not exactly true. 
    # Render out the basic header which calls the logo partial and has 
    # a {{# logged_in? }} condition which dictates which user box we 
    # show. Thus, we need to render out the html for both the logged in 
    # and logged out user boxes 
    $basic_header_html = $this->renderElement('basic_header'); 
    $logo  = $this->renderElement('shared/logo'); 
    $logged_in = $this->renderElement('shared/logged_in_user_box'); 
    $logged_out = $this->renderElement('shared/logged_out_user_box'); 

    $m = new Mustache($basic_header_html,      
        array('logged_in?' => !empty($this->Auth->userData), 
          'cache_buster' => time(), 
          'display_name' => 'StackOverflow Customer'), 
        array('shared/logo' => $logo, 
          'shared/logged_in_user_box' => $logged_in, 
          'shared/logged_out_user_box' => $logged_out)); 
?> 

<!DOCTYPE html> 
<html> 
<head> 
    <title>Mustache Test</title> 
</head> 

<body> 
    <?= $m->render(); ?> 
</body> 
</html> 

basic_header.mustache

<div id="header" class="basic"> 
    {{> shared/logo }} 

    {{# logged_in? }} 
    {{> shared/logged_in_user_box }} 
    {{/ logged_in? }} 

    {{^ logged_in? }} 
    {{> shared/logged_out_user_box }} 
    {{/ logged_in? }} 
</div> 

condiviso/logo.mustache

<a class="logo" href="/foo/bar"><img alt="" src="/images/logo.png?{{ cache_buster }}" /></a> 

condiviso/logged_in_user_box.mustache

Hello {{display_name}}, you are logged in. 

condiviso risposta/logged_out_user_box.mustache

Hello. You are not logged in. 
+5

Suppongo che tu stia utilizzando la struttura della torta nel tuo esempio qui, anche se nulla nella domanda o nella tua risposta allude a questo. Potresti voler chiarire che nella tua risposta rendi meno confusa. – jsdalton