adding the empty kostache class (I am extending this quite often in projects)

This commit is contained in:
Lorenzo Pisani 2010-07-14 16:13:55 -07:00
parent f6d78dddad
commit 3fce0e49a3
2 changed files with 127 additions and 124 deletions

126
classes/kohana/kostache.php Normal file
View file

@ -0,0 +1,126 @@
<?php
class Kohana_Kostache extends Mustache
{
/**
* KOstache class factory constructor.
*
* This method accepts a $template string and a $view object. Optionally, pass an associative
* array of partials as well.
*
* @access public
* @param string $path the path of the class to load
* @param string $template (default: null)
* @param mixed $view (default: null)
* @param array $partials (default: null)
* @return void
*/
public static function factory($path, $template = null, $view = null, $partials = null)
{
$class = 'View_'.str_replace('/', '_', $path);
if ( ! class_exists($class))
throw new Kohana_View_Exception('Missing Kostache View Class for ":class"', array(':class' => $class));
return new $class($template, $view, $partials);
}
/**
* KOstache class constructor.
*
* This method accepts a $template string and a $view object. Optionally, pass an associative
* array of partials as well.
*
* @access public
* @param string $template (default: null)
* @param mixed $view (default: null)
* @param array $partials (default: null)
* @return void
*/
public function __construct($template = null, $view = null, $partials = null)
{
parent::__construct($template, $view, $partials);
$this->_charset = Kohana::$charset;
// Override the template location to match kohana's conventions
if ( ! $this->_template)
{
$foo = explode('_', get_class($this));
array_shift($foo);
$view_location = strtolower(implode('/', $foo));
}
else
{
$view_location = $this->_template;
}
$template = Kohana::find_file('templates', $view_location, 'mustache');
if ($template)
$this->_template = file_get_contents($template);
else
throw new Kohana_Exception('Template file not found: templates/'.$view_location);
// Convert partials to expanded template strings
foreach ($this->_partials as $key => $partial_template)
{
if ($location = Kohana::find_file('templates', $partial_template, 'mustache'))
{
$this->_partials[$key] = file_get_contents($location);
}
}
}
/**
* Assigns a variable by name.
*
* // This value can be accessed as {{foo}} within the template
* $view->set('foo', 'my value');
*
* You can also use an array to set several values at once:
*
* // Create the values {{food}} and {{beverage}} in the template
* $view->set(array('food' => 'bread', 'beverage' => 'water'));
*
* @param string variable name or an array of variables
* @param mixed value
* @return $this
*/
public function set($key, $value = NULL)
{
if (is_array($key))
{
foreach ($key as $name => $value)
{
$this->{$name} = $value;
}
}
else
{
$this->{$key} = $value;
}
return $this;
}
/**
* Assigns a value by reference. The benefit of binding is that values can
* be altered without re-setting them. It is also possible to bind variables
* before they have values. Assigned values will be available as a
* variable within the template file:
*
* // This reference can be accessed as {{ref}} within the template
* $view->bind('ref', $bar);
*
* @param string variable name
* @param mixed referenced variable
* @return $this
*/
public function bind($key, & $value)
{
$this->{$key} =& $value;
return $this;
}
}

View file

@ -1,126 +1,3 @@
<?php
class Kostache extends Mustache
{
/**
* KOstache class factory constructor.
*
* This method accepts a $template string and a $view object. Optionally, pass an associative
* array of partials as well.
*
* @access public
* @param string $path the path of the class to load
* @param string $template (default: null)
* @param mixed $view (default: null)
* @param array $partials (default: null)
* @return void
*/
public static function factory($path, $template = null, $view = null, $partials = null)
{
$class = 'View_'.str_replace('/', '_', $path);
if ( ! class_exists($class))
throw new Kohana_View_Exception('Missing Kostache View Class for ":class"', array(':class' => $class));
return new $class($template, $view, $partials);
}
/**
* KOstache class constructor.
*
* This method accepts a $template string and a $view object. Optionally, pass an associative
* array of partials as well.
*
* @access public
* @param string $template (default: null)
* @param mixed $view (default: null)
* @param array $partials (default: null)
* @return void
*/
public function __construct($template = null, $view = null, $partials = null)
{
parent::__construct($template, $view, $partials);
$this->_charset = Kohana::$charset;
// Override the template location to match kohana's conventions
if ( ! $this->_template)
{
$foo = explode('_', get_class($this));
array_shift($foo);
$view_location = strtolower(implode('/', $foo));
}
else
{
$view_location = $this->_template;
}
$template = Kohana::find_file('templates', $view_location, 'mustache');
if ($template)
$this->_template = file_get_contents($template);
else
throw new Kohana_Exception('Template file not found: templates/'.$view_location);
// Convert partials to expanded template strings
foreach ($this->_partials as $key => $partial_template)
{
if ($location = Kohana::find_file('templates', $partial_template, 'mustache'))
{
$this->_partials[$key] = file_get_contents($location);
}
}
}
/**
* Assigns a variable by name.
*
* // This value can be accessed as {{foo}} within the template
* $view->set('foo', 'my value');
*
* You can also use an array to set several values at once:
*
* // Create the values {{food}} and {{beverage}} in the template
* $view->set(array('food' => 'bread', 'beverage' => 'water'));
*
* @param string variable name or an array of variables
* @param mixed value
* @return $this
*/
public function set($key, $value = NULL)
{
if (is_array($key))
{
foreach ($key as $name => $value)
{
$this->{$name} = $value;
}
}
else
{
$this->{$key} = $value;
}
return $this;
}
/**
* Assigns a value by reference. The benefit of binding is that values can
* be altered without re-setting them. It is also possible to bind variables
* before they have values. Assigned values will be available as a
* variable within the template file:
*
* // This reference can be accessed as {{ref}} within the template
* $view->bind('ref', $bar);
*
* @param string variable name
* @param mixed referenced variable
* @return $this
*/
public function bind($key, & $value)
{
$this->{$key} =& $value;
return $this;
}
}
class Kostache extends Kohana_Kostache {}