3 changed files with 158 additions and 0 deletions
			
			
		| @ -0,0 +1,31 @@ | |||||||
|  | Yii2 view renderers | ||||||
|  | =================== | ||||||
|  | 
 | ||||||
|  | By default Yii uses PHP as template language but you can change it in your application. | ||||||
|  | The component responsible for rendering a view using custom template enging is | ||||||
|  | called `viewRenderer`. You can configure it as follows: | ||||||
|  | 
 | ||||||
|  | ```php | ||||||
|  | array( | ||||||
|  | 	'components' => array( | ||||||
|  | 		'viewRenderer' => array( | ||||||
|  | 			'class' => 'yii\renderers\TwigViewRenderer', | ||||||
|  | 			// or 'class' => 'yii\renderers\SmartyViewRenderer', | ||||||
|  | 		), | ||||||
|  | 	), | ||||||
|  | ) | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | Twig | ||||||
|  | ---- | ||||||
|  | 
 | ||||||
|  | In order to use Twig you need to put you templates in files with extension `.twig`. | ||||||
|  | Also you need to specify this extension explicitly when calling `$this->render()` | ||||||
|  | or `$this->renderPartial()` from your controller. | ||||||
|  | 
 | ||||||
|  | Smarty | ||||||
|  | ------ | ||||||
|  | 
 | ||||||
|  | In order to use Smarty you need to put you templates in files with extension `.tpl`. | ||||||
|  | Also you need to specify this extension explicitly when calling `$this->render()` | ||||||
|  | or `$this->renderPartial()` from your controller. | ||||||
| @ -0,0 +1,63 @@ | |||||||
|  | <?php | ||||||
|  | /** | ||||||
|  |  * Smarty view renderer class file. | ||||||
|  |  * | ||||||
|  |  * @link http://www.yiiframework.com/ | ||||||
|  |  * @copyright Copyright © 2008 Yii Software LLC | ||||||
|  |  * @license http://www.yiiframework.com/license/ | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | namespace yii\renderers; | ||||||
|  | 
 | ||||||
|  | use \yii\base\View; | ||||||
|  | use \yii\base\ViewRenderer; | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * SmartyViewRenderer allows you to use Smarty templates in views. | ||||||
|  |  * | ||||||
|  |  * @author Alexander Makarov <sam@rmcreative.ru> | ||||||
|  |  * @since 2.0 | ||||||
|  |  */ | ||||||
|  | class SmartyViewRenderer extends ViewRenderer | ||||||
|  | { | ||||||
|  | 	public $smartyDir = '@app/vendors/Smarty'; | ||||||
|  | 	public $cacheDir = '@app/runtime/Smarty/cache'; | ||||||
|  | 	public $compileDir = '@app/runtime/Smarty/compile'; | ||||||
|  | 	public $fileExtension = 'tpl'; | ||||||
|  | 
 | ||||||
|  | 	/** @var \Smarty */ | ||||||
|  | 	protected $_smarty; | ||||||
|  | 
 | ||||||
|  | 	public function init() | ||||||
|  | 	{ | ||||||
|  | 		require_once(\Yii::getAlias($this->smartyDir).'/Smarty.class.php'); | ||||||
|  | 		$this->_smarty = new \Smarty(); | ||||||
|  | 		$this->_smarty->setCompileDir(\Yii::getAlias($this->compileDir)); | ||||||
|  | 		$this->_smarty->setCacheDir(\Yii::getAlias($this->cacheDir)); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	/** | ||||||
|  | 	 * Renders a view file. | ||||||
|  | 	 * | ||||||
|  | 	 * This method is invoked by [[View]] whenever it tries to render a view. | ||||||
|  | 	 * Child classes must implement this method to render the given view file. | ||||||
|  | 	 * | ||||||
|  | 	 * @param View $view the view object used for rendering the file. | ||||||
|  | 	 * @param string $file the view file. | ||||||
|  | 	 * @param array $params the parameters to be passed to the view file. | ||||||
|  | 	 * | ||||||
|  | 	 * @return string the rendering result | ||||||
|  | 	 */ | ||||||
|  | 	public function render($view, $file, $params) | ||||||
|  | 	{ | ||||||
|  | 		$ext = pathinfo($file, PATHINFO_EXTENSION); | ||||||
|  | 		if($ext === $this->fileExtension) { | ||||||
|  | 			/** @var \Smarty_Internal_Template $template */ | ||||||
|  | 			$template = $this->_smarty->createTemplate($file, null, null, $params, true); | ||||||
|  | 			return $template->fetch(); | ||||||
|  | 		} | ||||||
|  | 		else { | ||||||
|  | 			return $view->renderPhpFile($file, $params); | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
| @ -0,0 +1,64 @@ | |||||||
|  | <?php | ||||||
|  | /** | ||||||
|  |  * Twig view renderer class file. | ||||||
|  |  * | ||||||
|  |  * @link http://www.yiiframework.com/ | ||||||
|  |  * @copyright Copyright © 2008 Yii Software LLC | ||||||
|  |  * @license http://www.yiiframework.com/license/ | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | namespace yii\renderers; | ||||||
|  | 
 | ||||||
|  | use \yii\base\View; | ||||||
|  | use \yii\base\ViewRenderer; | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * TwigViewRenderer allows you to use Twig templates in views. | ||||||
|  |  * | ||||||
|  |  * @author Alexander Makarov <sam@rmcreative.ru> | ||||||
|  |  * @since 2.0 | ||||||
|  |  */ | ||||||
|  | class TwigViewRenderer extends ViewRenderer | ||||||
|  | { | ||||||
|  | 	public $twigDir = '@app/vendors/Twig'; | ||||||
|  | 	public $cacheDir = '@app/runtime/Twig/cache'; | ||||||
|  | 	public $fileExtension = 'twig'; | ||||||
|  | 
 | ||||||
|  | 	/** | ||||||
|  | 	 * @var \Twig_Environment | ||||||
|  | 	 */ | ||||||
|  | 	protected $_twig; | ||||||
|  | 
 | ||||||
|  | 	public function init() | ||||||
|  | 	{ | ||||||
|  | 		\Yii::setAlias('@Twig', $this->twigDir); | ||||||
|  | 
 | ||||||
|  | 		$loader = new \Twig_Loader_String(); | ||||||
|  | 		$this->_twig = new \Twig_Environment($loader, array( | ||||||
|  | 			'cache' => \Yii::getAlias($this->cacheDir), | ||||||
|  | 		)); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	/** | ||||||
|  | 	 * Renders a view file. | ||||||
|  | 	 * | ||||||
|  | 	 * This method is invoked by [[View]] whenever it tries to render a view. | ||||||
|  | 	 * Child classes must implement this method to render the given view file. | ||||||
|  | 	 * | ||||||
|  | 	 * @param View $view the view object used for rendering the file. | ||||||
|  | 	 * @param string $file the view file. | ||||||
|  | 	 * @param array $params the parameters to be passed to the view file. | ||||||
|  | 	 * | ||||||
|  | 	 * @return string the rendering result | ||||||
|  | 	 */ | ||||||
|  | 	public function render($view, $file, $params) | ||||||
|  | 	{ | ||||||
|  | 		$ext = pathinfo($file, PATHINFO_EXTENSION); | ||||||
|  | 		if($ext === $this->fileExtension) { | ||||||
|  | 			return $this->_twig->render(file_get_contents($file), $params); | ||||||
|  | 		} | ||||||
|  | 		else { | ||||||
|  | 			return $view->renderPhpFile($file, $params); | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
					Loading…
					
					
				
		Reference in new issue