Home > Backend Development > PHP Tutorial > Detailed explanation of how to use smarty templates in PHP based on Yii framework

Detailed explanation of how to use smarty templates in PHP based on Yii framework

高洛峰
Release: 2023-03-05 08:02:01
Original
1376 people have browsed it

The first method
It is a bit troublesome to generate views according to the YII system method, and I think it is easier to use smarty. Tried adding smarty templates.

date_default_timezone_set("PRC");
class PlaceController extends CController {
protected $_smarty;
function __construct(){
parent::__construct('place');//需要一个参数来调用父类的构造函数,该参数为控制器ID
$path = Yii::getPathOfAlias('application');//获得protected文件夹的绝对路径
include (dirname($path).DIRECTORY_SEPARATOR.'Smarty'.DIRECTORY_SEPARATOR.'Smarty.class.php');//smarty所在路径
$this->_smarty = new Smarty();
$this->_smarty->template_dir = dirname($path).DIRECTORY_SEPARATOR.'template'.DIRECTORY_SEPARATOR;//模板路径
}
Copy after login

The main problem is the execution conflict of automatically loaded classes.
YII registered an autoloading class spl_autoload_register(array('YiiBase','autoload')), SMARTY also registered an autoloading class, spl_autoload_register('smartyAutoload'), YII registered first, so when encountering an When specifying a class name, YII's custom auto-loading class function is executed first. For each class name in SMARTY, YII's auto-loading class function is also called first. However, if the conditions for YII auto-loading are not met, If so, SMARTY's auto-loading class function will be executed. However, SMARTY's class name does conform to the logical statement of YII's auto-loading class when automatically loading the class. The result is that YII will definitely not be able to find the class to be included using the Include statement. arrive.
The solution is: when the SMARTY class is automatically loaded, jump out of the automatic loading function defined in YII, so that the SMARTY loading function will be executed.
The specific implementation is to modify the autoload function in the YIIBase class and add the following code

public static function autoload($className)
{
// use include so that the error PHP file may appear
if(preg_match('/smarty/i', $className)){      //只要类名包含smarty的,无论大小写,都返回,这样就跳出了YII自动加载类而去执行                                                                                  SMARTY的自动加载类函数了
return;
}
             YII自动加载类代码
}
Copy after login

so that the smart template can be used in each Action.

public function actionIndex(){
$this->_smarty->assign('test', '测试');
$this->_smarty->display('create.html');
}
Copy after login
The second method:

Put the smarty template plug-in in the extensions folder under protected and create a CSmarty class file with the following content

<?php
require_once(Yii::getPathOfAlias(&#39;application.extensions.smarty&#39;).DIRECTORY_SEPARATOR.&#39;Smarty.class.php&#39;);  
    define(&#39;SMARTY_VIEW_DIR&#39;, Yii::getPathOfAlias(&#39;application.views&#39;));  

    class CSmarty extends Smarty {  
        const DIR_SEP = DIRECTORY_SEPARATOR;  
        function __construct() {  
            parent::__construct();  

            $this->template_dir = SMARTY_VIEW_DIR;  
            $this->compile_dir = SMARTY_VIEW_DIR.self::DIR_SEP.'template_c';  
            $this->caching = true;  
            $this->cache_dir = SMARTY_VIEW_DIR.self::DIR_SEP.'cache';  
            $this->left_delimiter  =  '<!--{&#39;;  
            $this->right_delimiter =  '}-->';  
            $this->cache_lifetime = 3600;  
        }  
        function init() {}  
    }  
    ?>
Copy after login

Then create the template_c required by samrty , cache and other folders.
The next step is the configuration part
Open protected/config/main.php and add it to the components array

'smarty'=>array(
    'class'=>'application.extensions.CSmarty',
),
Copy after login

Finally, use Yii::app()->smarty directly in the action to try it out Smarty now. If it is troublesome to use Yii::app()->smarty every time in the action, you can add

protected $smarty = '';
protected function init() {
       $this->smarty = Yii::app()->smarty;
 }
Copy after login

to the Controller under components and then use $this-> directly in the action. smarty uses smarty.

For more detailed explanations of how to use smarty templates in PHP based on the Yii framework, please pay attention to the PHP Chinese website!

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template