You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
			
				
					79 lines
				
				2.7 KiB
			
		
		
			
		
	
	
					79 lines
				
				2.7 KiB
			| 
											13 years ago
										 | <?php
 | ||
|  | 
 | ||
|  | namespace yii\base;
 | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * Created by JetBrains PhpStorm.
 | ||
|  |  * User: qiang
 | ||
|  |  * Date: 2/1/13
 | ||
|  |  * Time: 12:43 PM
 | ||
|  |  * To change this template use File | Settings | File Templates.
 | ||
|  |  */
 | ||
|  | abstract class ViewRenderer extends Component
 | ||
|  | {
 | ||
|  | 	/**
 | ||
|  | 	 * @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';
 | ||
|  | 		}
 | ||
|  | 	}
 | ||
|  | }
 |