mirror of
https://github.com/yiisoft/yii2.git
synced 2025-11-02 21:41:19 +08:00
Smarty: added path function and exposed $app and $this
This commit is contained in:
@ -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();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user