10

週末に始めたプロジェクトの口ひげのコツをつかんでいます。

私はPHP実装を使用しています。ただ、システムに慣れていないのでいくつか質問があります。

テンプレートの継承または再利用をどのように処理しますか? パーシャルは知っていますが、どのように使用すればよいですか? 私はこのようなことをしています、ala include:

トップ.口ひげ:

<!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>

下.口ひげ:

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

そして、このテンプレートをレンダリングするビュー:

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

これは正しいアプローチですか?

4

2 に答える 2

6

これは、Mustache の php 実装がどのように機能するかの例です。Mustache.php は、含まれているパーシャル/テンプレートを展開しないことに注意してください。そのため、以下に示すように、それらを mustache に渡す必要があります。この例は、古い 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>

共有/logo.mustache

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

shared/logged_in_user_box.mustache

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

shared/logged_out_user_box.mustache

Hello. You are not logged in.
于 2011-02-15T21:57:36.563 に答える
4

ynkr の答えは古いバージョンに適していますが、バージョン 2.4.1 にアップグレードしたばかりで、ファイルシステムローダーを使用している場合は、アプローチが機能するはずです。

詳細については、 https://github.com/bobthecow/mustache.php/wiki/Template-Loading#partials-loadingを参照してください。

于 2013-08-20T10:14:04.363 に答える