Merge branch 'develop'
This commit is contained in:
commit
d7db6778dc
|
@ -1,6 +1,6 @@
|
||||||
# Kostache
|
# Kostache
|
||||||
|
|
||||||
Kostache is a [Kohana 3](https://github.com/kohana/kohana) module for using [Mustache](http://defunkt.github.com/mustache/) templates in your application.
|
Kostache is a [Kohana 3](https://github.com/kohana/kohana) module for using [Mustache](http://mustache.github.com/) templates in your application.
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
|
@ -54,4 +54,4 @@ For specific usage and documentation, see:
|
||||||
|
|
||||||
[PHP Mustache](http://github.com/bobthecow/mustache.php)
|
[PHP Mustache](http://github.com/bobthecow/mustache.php)
|
||||||
|
|
||||||
[Original Mustache](http://defunkt.github.com/mustache/)
|
[Original Mustache](http://mustache.github.com/)
|
||||||
|
|
|
@ -13,7 +13,7 @@ class Mustache_Loader_Kohana implements Mustache_Loader, Mustache_Loader_Mutable
|
||||||
|
|
||||||
if (isset($options['extension']))
|
if (isset($options['extension']))
|
||||||
{
|
{
|
||||||
$this->_extension = '.' . ltrim($options['extension'], '.');
|
$this->_extension = ltrim($options['extension'], '.');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -29,7 +29,13 @@ class Mustache_Loader_Kohana implements Mustache_Loader, Mustache_Loader_Mutable
|
||||||
|
|
||||||
protected function _load_file($name)
|
protected function _load_file($name)
|
||||||
{
|
{
|
||||||
$filename = Kohana::find_file($this->_base_dir, $name, $this->_extension);
|
$filename = Kohana::find_file($this->_base_dir, strtolower($name), $this->_extension);
|
||||||
|
|
||||||
|
if ( ! $filename)
|
||||||
|
{
|
||||||
|
throw new Kohana_Exception('Mustache template ":name" not found', array(':name' => $name));
|
||||||
|
}
|
||||||
|
|
||||||
return file_get_contents($filename);
|
return file_get_contents($filename);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,23 +0,0 @@
|
||||||
<?php defined('SYSPATH') or die('No direct script access.');
|
|
||||||
|
|
||||||
return array(
|
|
||||||
// Leave this alone
|
|
||||||
'modules' => array(
|
|
||||||
|
|
||||||
// This should be the path to this modules userguide pages, without the 'guide/'. Ex: '/guide/modulename/' would be 'modulename'
|
|
||||||
'kostache' => array(
|
|
||||||
|
|
||||||
// Whether this modules userguide pages should be shown
|
|
||||||
'enabled' => TRUE,
|
|
||||||
|
|
||||||
// The name that should show up on the userguide index page
|
|
||||||
'name' => 'KOstache',
|
|
||||||
|
|
||||||
// A short description of this module, shown on the index page
|
|
||||||
'description' => 'Logic-less View/Mustache Module for Kohana v3',
|
|
||||||
|
|
||||||
// Copyright message, shown in the footer for this module
|
|
||||||
'copyright' => 'Zombor',
|
|
||||||
)
|
|
||||||
)
|
|
||||||
);
|
|
|
@ -1,139 +0,0 @@
|
||||||
# Kostache Examples
|
|
||||||
|
|
||||||
## Complex Example
|
|
||||||
|
|
||||||
Model (This example uses [AutoModeler](http://github.com/zombor/Auto-Modeler)):
|
|
||||||
|
|
||||||
class Model_Test extends AutoModeler
|
|
||||||
{
|
|
||||||
protected $_table_name = 'tests';
|
|
||||||
|
|
||||||
protected $_data = array(
|
|
||||||
'id' => '',
|
|
||||||
'name' => '',
|
|
||||||
'value' => '',
|
|
||||||
);
|
|
||||||
|
|
||||||
protected $_rules = array(
|
|
||||||
'name' => array('not_empty'),
|
|
||||||
'value' => array('not_empty'),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
View:
|
|
||||||
|
|
||||||
class View_Example extends Kostache
|
|
||||||
{
|
|
||||||
public $title = 'Testing';
|
|
||||||
|
|
||||||
public function things()
|
|
||||||
{
|
|
||||||
return Inflector::plural(get_class(new Model_Test));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function tests()
|
|
||||||
{
|
|
||||||
$tests = array();
|
|
||||||
foreach (AutoModeler::factory('test')->fetch_all() as $test)
|
|
||||||
{
|
|
||||||
$tests[] = $test->as_array();
|
|
||||||
}
|
|
||||||
return $tests;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Template:
|
|
||||||
|
|
||||||
<!DOCTYPE html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8" />
|
|
||||||
<title>{{title}}</title>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<h1>{{title}}</h1>
|
|
||||||
<p>Here are all my {{things}}:</p>
|
|
||||||
<ul>
|
|
||||||
{{#tests}}
|
|
||||||
<li><strong>{{id}}:</strong> ({{name}}:{{value}})</li>
|
|
||||||
{{/tests}}
|
|
||||||
</ul>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
|
|
||||||
Controller:
|
|
||||||
|
|
||||||
class Controller_Welcome extends Controller {
|
|
||||||
|
|
||||||
public function action_index()
|
|
||||||
{
|
|
||||||
echo new View_Example;
|
|
||||||
}
|
|
||||||
|
|
||||||
} // End Welcome
|
|
||||||
|
|
||||||
## Grabbing a single model value
|
|
||||||
|
|
||||||
Model (This example uses [AutoModeler](http://github.com/zombor/Auto-Modeler)):
|
|
||||||
|
|
||||||
class Model_Test extends AutoModeler
|
|
||||||
{
|
|
||||||
protected $_table_name = 'tests';
|
|
||||||
|
|
||||||
protected $_data = array(
|
|
||||||
'id' => '',
|
|
||||||
'name' => '',
|
|
||||||
'value' => '',
|
|
||||||
);
|
|
||||||
|
|
||||||
protected $_rules = array(
|
|
||||||
'name' => array('not_empty'),
|
|
||||||
'value' => array('not_empty'),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
View:
|
|
||||||
|
|
||||||
class View_Singular extends Kostache
|
|
||||||
{
|
|
||||||
protected $_pragmas = array(Kostache::PRAGMA_DOT_NOTATION => TRUE);
|
|
||||||
|
|
||||||
public $thing_id = NULL;
|
|
||||||
public $title = 'Testing';
|
|
||||||
|
|
||||||
public function thing()
|
|
||||||
{
|
|
||||||
return new Model_Test($this->thing_id);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Template:
|
|
||||||
|
|
||||||
<!DOCTYPE html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8" />
|
|
||||||
<title>{{title}}</title>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<h1>{{title}}</h1>
|
|
||||||
<p>This is just one thing:</p>
|
|
||||||
<h2>{{thing.id}}</h2>
|
|
||||||
<ul>
|
|
||||||
<li>Name: {{thing.name}}</li>
|
|
||||||
<li>Value: {{thing.value}}</li>
|
|
||||||
</ul>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
|
|
||||||
Controller:
|
|
||||||
|
|
||||||
class Controller_Welcome extends Controller {
|
|
||||||
|
|
||||||
public function action_singular($id)
|
|
||||||
{
|
|
||||||
$view = new View_Singular;
|
|
||||||
$view->thing_id = $id;
|
|
||||||
echo $view;
|
|
||||||
}
|
|
||||||
} // End Welcome
|
|
|
@ -1,7 +0,0 @@
|
||||||
# About Kostache
|
|
||||||
|
|
||||||
Kostache is a Kohana module for using [Mustache](http://defunkt.github.com/mustache/) templates in your application.
|
|
||||||
|
|
||||||
Mustache is a logic-less template class. It is impossible to embed logic into mustache files.
|
|
||||||
|
|
||||||
This module requires mustache.php and includes it as a git submodule. See [Working With Git](tutorials.git) for more information about managing submodules.
|
|
|
@ -1,4 +0,0 @@
|
||||||
1. **Kostache**
|
|
||||||
- [About](index)
|
|
||||||
- [Usage](usage)
|
|
||||||
- [Examples](examples)
|
|
|
@ -1,58 +0,0 @@
|
||||||
# Kostache Usage
|
|
||||||
|
|
||||||
View classes go in classes/view/
|
|
||||||
|
|
||||||
classes/view/example.php
|
|
||||||
|
|
||||||
class View_Example extends Kostache
|
|
||||||
{
|
|
||||||
public $foo = 'bar';
|
|
||||||
}
|
|
||||||
|
|
||||||
Template files go in templates/
|
|
||||||
|
|
||||||
templates/example.mustache
|
|
||||||
|
|
||||||
This is a {{foo}}
|
|
||||||
|
|
||||||
In your controller, just do:
|
|
||||||
|
|
||||||
$view = new View_Example;
|
|
||||||
echo $view;
|
|
||||||
|
|
||||||
And you get:
|
|
||||||
|
|
||||||
"This is a bar"
|
|
||||||
|
|
||||||
## Partials
|
|
||||||
|
|
||||||
To use a partial in your template you use the greater than sign (>) and the name, e.g. {{>header}}.
|
|
||||||
|
|
||||||
You must define partials within the $_partials array in your view class. The key is the name that you use in your template and the value is a path to your partial file.
|
|
||||||
|
|
||||||
protected $_partials = array(
|
|
||||||
'header' => 'header', // Loads templates/header.mustache
|
|
||||||
'footer' => 'footer/default', // Loads templates/footer/default.mustache
|
|
||||||
);
|
|
||||||
|
|
||||||
## Using the Kostache_Layout class
|
|
||||||
|
|
||||||
Kostache comes with a Kostache_Layout class instead of a template controller. This allows your layouts to be more OOP and self contained, and they do not rely on your controllers so much.
|
|
||||||
|
|
||||||
To use it, have your view extend the Kostache_Layout class. You can then specify your own layout file by placing it in templates/layout.mustache. At a minimum, it needs to have a {{>content}} partial defined in it.
|
|
||||||
|
|
||||||
If you have a view that extends the Kostache_Layout class, but wish to render only the template and not the entire layout, you can set the public $render_layout property to FALSE. This is useful if you want to use the same view class for external requests and HMVC requests.
|
|
||||||
|
|
||||||
$view = new View_Post_List;
|
|
||||||
if ($this->request !== Request::instance) // Is internal request
|
|
||||||
{
|
|
||||||
$view->render_layout = FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
## Mustache Documentation
|
|
||||||
|
|
||||||
For specific usage and documentation, see:
|
|
||||||
|
|
||||||
[PHP Mustache](http://github.com/bobthecow/mustache.php)
|
|
||||||
|
|
||||||
[Original Mustache](http://defunkt.github.com/mustache/)
|
|
Loading…
Reference in a new issue