Merge branch 'develop'

This commit is contained in:
Jeremy Bush 2013-01-17 12:38:33 -06:00
commit d7db6778dc
7 changed files with 10 additions and 235 deletions

View file

@ -1,6 +1,6 @@
# 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
@ -54,4 +54,4 @@ For specific usage and documentation, see:
[PHP Mustache](http://github.com/bobthecow/mustache.php)
[Original Mustache](http://defunkt.github.com/mustache/)
[Original Mustache](http://mustache.github.com/)

View file

@ -13,7 +13,7 @@ class Mustache_Loader_Kohana implements Mustache_Loader, Mustache_Loader_Mutable
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)
{
$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);
}

View file

@ -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',
)
)
);

View file

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

View file

@ -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.

View file

@ -1,4 +0,0 @@
1. **Kostache**
- [About](index)
- [Usage](usage)
- [Examples](examples)

View file

@ -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/)