2010-11-15 13 views
10

Zdobywam wąsy do projektu, który zacząłem w weekend.Wąsy częściowe i ponowne użycie kodu

Używam implementacji PHP. Mam jednak kilka pytań, ponieważ nie jestem przyzwyczajony do systemu.

W jaki sposób radzić sobie z dziedziczeniem szablonów lub używać go ponownie? Wiem o cząstkach, ale jak mam ich użyć? Robię coś takiego, ala to:

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> 

i widok do renderowania ten szablon:

{{>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 }} 

Czy to właściwe podejście?

Odpowiedz

6

Oto przykład działania php w Moustache. Warto zauważyć, że Mustache.php będzie nie rozwinąć włączone części/szablony, więc musisz podać je wąsy, jak widać poniżej. Ten przykład został złożony razem na starszej strukturze cacephp.

<? 
    # 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> 

shared/logo.mustache

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

dzielony/logged_in_user_box.mustache

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

wspólne odbierania/logged_out_user_box.mustache

Hello. You are not logged in. 
+5

Domyślam się, że korzystasz z frameworka Cake w swoim przykładzie tutaj, chociaż nic w pytaniu ani w twojej odpowiedzi nie nawiązuje do tego. Możesz to wyjaśnić w swojej odpowiedzi, aby było mniej mylące. – jsdalton