@ -13,6 +13,7 @@ use Yii;
use Smarty;
use yii\base\View;
use yii\base\ViewRenderer;
use yii\helpers\Html;
/**
* SmartyViewRenderer allows you to use Smarty templates in views.
@ -48,6 +49,34 @@ class SmartyViewRenderer extends ViewRenderer
$this->smarty = new Smarty();
$this->smarty->setCompileDir(Yii::getAlias($this->compilePath));
$this->smarty->setCacheDir(Yii::getAlias($this->cachePath));
$this->smarty->registerPlugin('function', 'path', array($this, 'smarty_function_path'));
}
/**
* Smarty template function to get a path for using in links
*
* Usage is the following:
*
* {path route='blog/view' alias=$post.alias user=$user.id}
*
* where route is Yii route and the rest of parameters are passed as is.
*
* @param $params
* @param \Smarty_Internal_Template $template
*
* @return string
*/
public function smarty_function_path($params, \Smarty_Internal_Template $template)
{
if(!isset($params['route'])) {
trigger_error("path: missing 'route' parameter");
}
array_unshift($params, $params['route']) ;
unset($params['route']);
return Html::url($params);
}
/**
@ -67,6 +96,10 @@ class SmartyViewRenderer extends ViewRenderer
$ext = pathinfo($file, PATHINFO_EXTENSION);
/** @var \Smarty_Internal_Template $template */
$template = $this->smarty->createTemplate($file, null, null, $params, true);
$template->assign('app', \Yii::$app);
$template->assign('this', $view);
return $template->fetch();
}
}