Вход Регистрация
Файл: framework/web/renderers/CViewRenderer.php
Строк: 144
<?php
/**
 * CViewRenderer class file.
 *
 * @author Qiang Xue <qiang.xue@gmail.com>
 * @link http://www.yiiframework.com/
 * @copyright 2008-2013 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>
 * @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.
     * @throws CException
     */
    
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';
    }
}
Онлайн: 2
Реклама