Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

98 lines (93 sloc) 3.513 kb
<?php
/**
* CViewRenderer class file.
*
* @author Qiang Xue <qiang.xue@gmail.com>
* @link http://www.yiiframework.com/
* @copyright Copyright &copy; 2008-2011 Yii Software LLC
* @license http://www.yiiframework.com/license/
*/
/**
* CViewRenderer is the base class for view renderer classes.
*
* A view renderer is an application component that renders views written
* in a customized syntax.
*
* Once installing a view renderer as a 'viewRenderer' application component,
* the normal view rendering process will be intercepted by the renderer.
* The renderer will first parse the source view file and then render the
* the resulting view file.
*
* Parsing results are saved as temporary files that may be stored
* under the application runtime directory or together with the source view file.
*
* @author Steve Heyns http://customgothic.com/
* @author Qiang Xue <qiang.xue@gmail.com>
* @version $Id$
* @package system.web.renderers
* @since 1.0
*/
abstract class CViewRenderer extends CApplicationComponent implements IViewRenderer
{
/**
* @var boolean whether to store the parsing results in the application's
* runtime directory. Defaults to true. If false, the parsing results will
* be saved as files under the same directory as the source view files and the
* file names will be the source file names appended with letter 'c'.
*/
public $useRuntimePath=true;
/**
* @var integer the chmod permission for temporary directories and files
* generated during parsing. Defaults to 0755 (owner rwx, group rx and others rx).
*/
public $filePermission=0755;
/**
* @var string the extension name of the view file. Defaults to '.php'.
*/
public $fileExtension='.php';
/**
* Parses the source view file and saves the results as another file.
* @param string $sourceFile the source view file path
* @param string $viewFile the resulting view file path
*/
abstract protected function generateViewFile($sourceFile,$viewFile);
/**
* Renders a view file.
* This method is required by {@link IViewRenderer}.
* @param CBaseController $context the controller or widget who is rendering the view file.
* @param string $sourceFile the view file path
* @param mixed $data the data to be passed to the view
* @param boolean $return whether the rendering result should be returned
* @return mixed the rendering result, or null if the rendering result is not needed.
*/
public function renderFile($context,$sourceFile,$data,$return)
{
if(!is_file($sourceFile) || ($file=realpath($sourceFile))===false)
throw new CException(Yii::t('yii','View file "{file}" does not exist.',array('{file}'=>$sourceFile)));
$viewFile=$this->getViewFile($sourceFile);
if(@filemtime($sourceFile)>@filemtime($viewFile))
{
$this->generateViewFile($sourceFile,$viewFile);
@chmod($viewFile,$this->filePermission);
}
return $context->renderInternal($viewFile,$data,$return);
}
/**
* Generates the resulting view file path.
* @param string $file source view file path
* @return string resulting view file path
*/
protected function getViewFile($file)
{
if($this->useRuntimePath)
{
$crc=sprintf('%x', crc32(get_class($this).Yii::getVersion().dirname($file)));
$viewFile=Yii::app()->getRuntimePath().DIRECTORY_SEPARATOR.'views'.DIRECTORY_SEPARATOR.$crc.DIRECTORY_SEPARATOR.basename($file);
if(!is_file($viewFile))
@mkdir(dirname($viewFile),$this->filePermission,true);
return $viewFile;
}
else
return $file.'c';
}
}
Jump to Line
Something went wrong with that request. Please try again.