<?php
/* Put this somewhere in your bootstrap process */
use lithium\net\http\Media;
Media::type('email', 'text/html', array());
Media::type('default', null, array(
'view' => '\app\extensions\View',
'paths' => array(
'template' => '{:library}/views/{:controller}/{:template}.{:type}.php',
'layout' => '{:library}/views/layouts/{:layout}.{:type}.php',
),
));
/* And then put this in app/extensions/View.php */
namespace app\extensions;
use \lithium\core\Libraries;
use \lithium\core\Environment;
use \lithium\util\String;
class View extends \lithium\template\View {
/**
* The 'element' render type handler.
*
* @param string $template Template to be rendered.
* @param array $data Template data.
* @param array $options Renderer options.
*/
protected function _element($template, $data, array $options = array()) {
$options += array('controller' => 'elements', 'template' => $template);
$template = $this->_loader->template('template', $options);
$data = (array) $data + $this->outputFilters;
$data = $this->_renderer->render($template, $data, $options);
return $this->_pathized($data, $template);
}
/**
* The 'template' render type handler.
*
* @param string $template Template to be rendered.
* @param array $data Template data.
* @param array $options Renderer options.
*/
protected function _template($template, $data, array $options = array()) {
$template = $this->_loader->template('template', $options);
$data = (array) $data + $this->outputFilters;
$data = $this->_renderer->render($template, $data, $options);
return $this->_pathized($data, $template);
}
/**
* Wrap the passed data with HTML comments.
*
* @param string $data The data to be wrapped.
* @param string $path The path to the template that corresponds to the data.
* @return string Data wrapped by HTML comments.
*/
protected function _pathized($data, $path) {
if (Environment::is('production')) {
return $data;
}
$message = "<!-- START OF {:start} -->\n{$data}\n<!-- END OF {:stop} -->";
return String::insert($message, array('start' => $path, 'stop' => $path));
}
}
?>