Haanga templates

Maybe this will help to some one…

Wanted to create an extension, but decided that Haanga not that flexible and I don’t know Yii that good yet…

Download haanga, and put it in vendorts under Haanga directory

in main config


'viewRenderer'=>array(

	     'class'=>'ext.Haanga.EHaangaViewRenderer',

	     'fileExtension' => '.html',

	     'options' => array(

	     ),

	  ),

In extension




<?php

/**

 * Haanga view renderer

 *

 * @author David Kurushin

 * @link http://haanga.org/

 * 

 * @version 1.0.4

 */

class EHaangaViewRenderer extends CApplicationComponent implements IViewRenderer {

	/**

	 * The templete files extension

	 * @var string the extension

	 */

    public $fileExtension='.html';


	/**

	 * @var array Haanga options

	 * @see https://github.com/crodas/Haanga

	 */

	public $options = array();


    /**

     * Component initialization

     */

    function init(){

		parent::init();


        Yii::import('application.vendors.*');


        // need this since Yii autoload handler raises an error if class is not found

        spl_autoload_unregister(array('YiiBase','autoload'));


        // registering twig autoload handler

        require_once 'Haanga/lib/Haanga.php"';

        

        // adding back Yii autoload handler

        spl_autoload_register(array('YiiBase','autoload'));


        // setting cache path to application runtime directory

		$config['cache_dir'] = Yii::app()->getRuntimePath().DIRECTORY_SEPARATOR.'views_haanga'.DIRECTORY_SEPARATOR;

		$config['template_dir'] = Yii::app()->getBasePath();

        // here we are using twig loader

        /*

        $loader = new Twig_Loader_Filesystem($this->getBasePath());

        $this->twig = new Twig_Environment($loader, $this->options);

        */

		Haanga::Configure($config);

    }


    /**

	 * Renders a view file.

	 * This method is required by {@link IViewRenderer}.

	 * @param CBaseController the controller or widget who is rendering the view file.

	 * @param string the view file path

	 * @param mixed the data to be passed to the view

	 * @param boolean 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) {

		

        // current controller properties will be accessible as {{this.property}}

        $data['this'] = $context;

		

		

        // check if view file exists

        

        if(!is_file($sourceFile) || ($file=realpath($sourceFile))===false)

            throw new CException(Yii::t('yiiext','View file "{file}" does not exist.', array('{file}'=>$sourceFile)));


		$sourceFile = substr($sourceFile, strlen($this->getBasePath()));


		return Haanga::Load($sourceFile, $data);

	}


	/**

	 * Theme-aware basepath

	 * @return string

	 */

	protected function getBasePath()

	{

		if(Yii::app()->theme == null)

			return Yii::app()->getBasePath();


		return Yii::app()->theme->getBasePath();

	}

}




I think Haanga the best template engine in terms of performance and yet functions…