Class yii\smarty\ViewRenderer
Inheritance | yii\smarty\ViewRenderer » yii\base\ViewRenderer |
---|---|
Available since extension's version | 2.0 |
Source Code | https://github.com/yiisoft/yii2-smarty/blob/master/src/ViewRenderer.php |
SmartyViewRenderer allows you to use Smarty templates in views.
Public Properties
Property | Type | Description | Defined By |
---|---|---|---|
$cachePath | string | The directory or path alias pointing to where Smarty cache will be stored. | yii\smarty\ViewRenderer |
$compilePath | string | The directory or path alias pointing to where Smarty compiled templates will be stored. | yii\smarty\ViewRenderer |
$extensionClass | string | Extension class name | yii\smarty\ViewRenderer |
$imports | array | Class imports similar to the use tag | yii\smarty\ViewRenderer |
$options | array | Additional Smarty options | yii\smarty\ViewRenderer |
$pluginDirs | array | Add additional directories to Smarty's search path for plugins. | yii\smarty\ViewRenderer |
$smarty | \Smarty | The Smarty object used for rendering | yii\smarty\ViewRenderer |
$smartyClass | string | The Smarty class | yii\smarty\ViewRenderer |
$widgets | array | Widget declarations | yii\smarty\ViewRenderer |
Public Methods
Method | Description | Defined By |
---|---|---|
__call() | Mechanism to pass a widget's tag name to the callback function. | yii\smarty\ViewRenderer |
aliasHandler() | Resolves Yii alias into file path | yii\smarty\ViewRenderer |
init() | Instantiates and configures the Smarty object. | yii\smarty\ViewRenderer |
render() | Renders a view file. | yii\smarty\ViewRenderer |
Protected Methods
Method | Description | Defined By |
---|---|---|
resolveTemplateDir() | The directory can be specified in Yii's standard convention using @, // and / prefixes or no prefix for view relative directories. | yii\smarty\ViewRenderer |
Property Details
The directory or path alias pointing to where Smarty cache will be stored.
The directory or path alias pointing to where Smarty compiled templates will be stored.
Extension class name
Additional Smarty options
Add additional directories to Smarty's search path for plugins.
The Smarty class
Method Details
Mechanism to pass a widget's tag name to the callback function.
Using a magic function call would not be necessary if Smarty would support closures. Smarty closure support is announced for 3.2, until its release magic function calls are used to pass the tag name to the callback.
public string __call ( $method, $args ) | ||
$method | string | |
$args | array | |
throws | \yii\base\InvalidConfigException | |
---|---|---|
throws | BadMethodCallException |
public function __call($method, $args)
{
$methodInfo = explode('__', $method);
if (count($methodInfo) === 2) {
$alias = $methodInfo[1];
if (isset($this->widgets['functions'][$alias])) {
if (($methodInfo[0] === '_widget_function') && (count($args) === 2)) {
return $this->widgetFunction($this->widgets['functions'][$alias], $args[0], $args[1]);
}
} elseif (isset($this->widgets['blocks'][$alias])) {
if (($methodInfo[0] === '_widget_block') && (count($args) === 4)) {
return $this->widgetBlock($this->widgets['blocks'][$alias], $args[0], $args[1], $args[2], $args[3]);
}
} else {
throw new InvalidConfigException('Widget "' . $alias . '" not declared.');
}
}
throw new \BadMethodCallException('Method does not exist: ' . $method);
}
Resolves Yii alias into file path
public boolean|string aliasHandler ( $type, $name, &$content, &$modified, \Smarty $smarty ) | ||
$type | string | |
$name | string | |
$content | string | |
$modified | string | |
$smarty | \Smarty | |
return | boolean|string |
Path to file or false if it's not found |
---|
public function aliasHandler($type, $name, &$content, &$modified, Smarty $smarty)
{
$file = Yii::getAlias($name);
return is_file($file) ? $file : false;
}
Instantiates and configures the Smarty object.
public void init ( ) |
public function init()
{
$this->smarty = new $this->smartyClass();
$this->smarty->setCompileDir(Yii::getAlias($this->compilePath));
$this->smarty->setCacheDir(Yii::getAlias($this->cachePath));
foreach ($this->options as $key => $value) {
$this->smarty->$key = $value;
}
$this->smarty->addTemplateDir([
dirname(Yii::$app->getView()->getViewFile()),
Yii::$app->getViewPath(),
]);
// Add additional plugin dirs from configuration array, apply Yii's dir convention
foreach ($this->pluginDirs as &$dir) {
$dir = $this->resolveTemplateDir($dir);
}
$this->smarty->addPluginsDir($this->pluginDirs);
if (isset($this->imports)) {
foreach(($this->imports) as $tag => $class) {
$this->smarty->registerClass($tag, $class);
}
}
// Register block widgets specified in configuration array
if (isset($this->widgets['blocks'])) {
foreach(($this->widgets['blocks']) as $tag => $class) {
$this->smarty->registerPlugin('block', $tag, [$this, '_widget_block__' . $tag]);
$this->smarty->registerClass($tag, $class);
}
}
// Register function widgets specified in configuration array
if (isset($this->widgets['functions'])) {
foreach(($this->widgets['functions']) as $tag => $class) {
$this->smarty->registerPlugin('function', $tag, [$this, '_widget_function__' . $tag]);
$this->smarty->registerClass($tag, $class);
}
}
new $this->extensionClass($this, $this->smarty);
$this->smarty->default_template_handler_func = [$this, 'aliasHandler'];
}
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.
public string render ( $view, $file, $params ) | ||
$view | \yii\web\View |
The view object used for rendering the file. |
$file | string |
The view file. |
$params | array |
The parameters to be passed to the view file. |
return | string |
The rendering result |
---|
public function render($view, $file, $params)
{
/* @var $template \Smarty_Internal_Template */
$template = $this->smarty->createTemplate($file, null, null, empty($params) ? null : $params, false);
// Make Yii params available as smarty config variables
$template->config_vars = Yii::$app->params;
$template->assign('app', \Yii::$app);
$template->assign('this', $view);
return $template->fetch();
}
The directory can be specified in Yii's standard convention using @, // and / prefixes or no prefix for view relative directories.
protected string resolveTemplateDir ( $dir ) | ||
$dir | string |
Directory name to be resolved |
return | string |
The resolved directory name |
---|
protected function resolveTemplateDir($dir)
{
if (strncmp($dir, '@', 1) === 0) {
// e.g. "@app/views/dir"
$dir = Yii::getAlias($dir);
} elseif (strncmp($dir, '//', 2) === 0) {
// e.g. "//layouts/dir"
$dir = Yii::$app->getViewPath() . DIRECTORY_SEPARATOR . ltrim($dir, '/');
} elseif (strncmp($dir, '/', 1) === 0) {
// e.g. "/site/dir"
if (Yii::$app->controller !== null) {
$dir = Yii::$app->controller->module->getViewPath() . DIRECTORY_SEPARATOR . ltrim($dir, '/');
} else {
// No controller, what to do?
}
} else {
// relative to view file
$dir = dirname(Yii::$app->getView()->getViewFile()) . DIRECTORY_SEPARATOR . $dir;
}
return $dir;
}