# Maron テンプレートの仕組み
Maron は Little Beast のカスタム HTML テンプレートエンジンです。

## 構文

構文は以下の通りです:

```
{@ include(common/header.maron) @} // これは別の Maron ファイルを含めます。
                                   // シングルクォートやダブルクォートを
                                   // 追加しないで下さい!

{@ kys($var) @} // これは変数を読み易い形式で出力し、
                // その後テンプレートの残りの実行を終了します。

{@ if (true) @}
  // 何かを実行
{@ elif (null) @}
  // 別の事を実行
{@ else @}
  // その他を実行
{@ endif @}

{@ foreach ($array as $value) @}
{{ $value }}<br />
{@ endforeach @}

{@ foreach ($array as $key => $value) @}
{{ $key }}: {{ $value }}<br />
{@ endforeach @}

{@ for ($i = 0; $i < 10; $i++) @}
{{ $i }}<br />
{@ endfor @}

{# This is a comment #}
{{ $var }} // これは特殊文字をエスケープして変数を出力します
{{{ $var }}} // これは変数をそのままの形で出力します
{$ $var = 200 $} // これは $var を 200 として定義します
{! echo "hello world"; !} // これは生の PHP コードをそのまま実行します
```

## コントローラー機能
更に、Little Beast では Maron テンプレート内で使用出来る
コントローラー用の機能も提供しています。
多言語ウェブサイトを使用する場合、
`new Template()` の後にその言語のルートディレクトリを指定出来ます。
但し、これには `/view` ディレクトリ内にそれらのルートディレクトリも
設定する必要があります。
例えば、構造が `/view/en/index.maron` の場合、
`new Template('/en')` と定義します。
然し構造が `/view/index.maron` の場合は、
単に `new Template()` とします。

### assign()
`->assign()` メソッドを使用すると、
Maron テンプレートで使用したい変数を割り当てます。

例:
```
$tmpl = new Template();

$sum = 1 + 1;
$tmpl->assign('total', $sum);
```

この場合、Maron テンプレートで `{{ $total }}` を
使用して `2` を出力します。

### addCss()
デフォルトでは、 `style.css` は常に含まれています。
但し、全てのページ又は大部分のページで使用する
予定の物だけを `style.css` に入れ、
特定のページでのみ使用する予定の全ての物は、
`style-` の接頭辞を付けた独自のファイルに入れる事をお勧めします。
例えば、お問い合わせページがあり、
そのページでのみ使用する CSS がある場合は、
`/public/static` に新しい `style-contact.css` ファイルを作成し、
`render` メソッドの前に `$tmpl->addCss('contact');` を追加します。

### render()
`render()` メソッドは Maron テンプレートの内容を取得し
、ウェブブラウザが理解出来る有効な HTML と PHP に全てを変換します。
Maron ファイルが `/view/index.maron` の場合、
`$tmpl->render('index');` を実行しますが、
`/view/en/index.maron` の場合、
`$tmpl = new Template('/en');` に続いて `$tmpl->render('index');` か、
`$tmpl = new Template();` に続いて `$tmpl->render('en/index');` の
いずれかを実行出来ます。