electblake / mustache
CakePHP View Helper Plugin for the Mustache Templating Language
Installs: 38
Dependents: 0
Suggesters: 0
Security: 0
Stars: 14
Watchers: 5
Forks: 10
Open Issues: 2
Type:cakephp-plugin
Requires
- composer/installers: *
- mustache/mustache: dev-master
This package is not auto-updated.
Last update: 2024-12-21 16:10:20 UTC
README
Mustache View helper (originally CakePan) that renders Mustache templates. It will also load and process partials!
Why use Mustache templates in CakePHP?
Portability and scalability! If you have an app that uses lots of front-end coding, you only have to write your templates once. Mustache templates can be rendered in PHP, Javascript, Ruby, Scala, even C++! If you want to move to or from some other framework (Rails, Grails, Lithium etc.), you can be sure that your views and design won't have to be re-built.
For scalability, when the time comes, you can use templates with a more powerful engine like Scala, or just send JSON from any source, and render with Javascript.
Installation
1. From app directory - git submodule add git@github.com:electblake/CakePHP-Mustache-Plugin.git Plugin/Mustache
2. cd into Plugin/Mustache (so we can pull in the latest php implementation of mustache into Plugin/Mustache/Vendor)
3. git submodule init
4. git submodule update
If you want to add Mustache support globally, add it to your AppController
class AppController extends Controller {
...
public $helpers = array('Mustache.Mustache');
...
}
Usage
See the Mustache manual: http://mustache.github.com/
Creating a Mustache Template
Your Mustache templates should all be in the /app/View/Elements/
directory, with a .mustache
extension.
/app/View/Elements/post.mustache
{{#Post}}
<h2>{{title}}</h2\>
<div>
{{text}}
</div>
{{/Post}}
Rendering a Mustache Template
All the variable set by the controller are available, and merged with values passed into $params
.
$params = array(
'title' => 'Show me the bacon!',
'text' => 'Bacon ipsum dolor sit amet fatback pig swine...'
);
$this->Mustache->render('template_name', $params)
Using Partials
Partials should follow the same naming convention. Mustache will pass the variables to the partial in the context that it's called. For example, a nested template for a blog post
with comments
might look like:
/app/View/Elements/posts/post.mustache:
{{#Post}}
<h2>{{title}}</h2\>
<div>
{{text}}
</div>
{{/Post}}
{{#Comment}}
{{>post/comment}}
{{/Comment}}
/app/View/Elements/posts/comment.mustache:
<div>
<h3>{{#User}}{{name}}{{/User}} said: </h3>
<p>{{text}}</p>
</div>