첫 번째 방법
YII 시스템 방식에 따라 뷰를 생성하는 것이 조금 번거롭고 스마트하게 사용하는 것이 더 쉬운 것 같습니다. 똑똑한 템플릿을 추가해 보았습니다.
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;//模板路径 }
가장 큰 문제는 자동으로 로드되는 클래스의 실행 충돌입니다.
YII는 자동 로딩 클래스 spl_autoload_register(array('YiiBase','autoload'))를 등록했고 SMARTY도 자동 로딩 클래스 spl_autoload_register('smartyAutoload')를 등록했으며 YII가 먼저 등록했기 때문에 클래스 이름을 지정할 때 , YII의 사용자 정의 자동 로딩 클래스 함수가 먼저 실행됩니다. SMARTY의 각 클래스 이름에 대해 YII의 자동 로딩 클래스 함수도 먼저 호출됩니다. 그러나 YII 자동 로딩 조건이 충족되지 않으면 SMARTY의 자동 로딩 클래스 함수가 호출됩니다. 로딩 클래스 함수는 실행될 것입니다. 그러나 클래스를 자동으로 로딩할 때 SMARTY의 클래스 이름은 YII의 자동 로딩 클래스의 논리문과 일치합니다. 그 결과 YII는 포함할 클래스를 확실히 찾을 수 없습니다. 성명.
해결책은 SMARTY 클래스가 자동으로 로드될 때 YII에 정의된 자동 로딩 기능에서 벗어나 SMARTY 로딩 기능이 실행되도록 하는 것입니다.
구체적인 구현 방법은 YIIBase 클래스의 자동 로드 기능을 수정하고 각 Action에서 스마트 템플릿을 사용할 수 있도록
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自动加载类代码 }
코드를 추가하는 것입니다.
public function actionIndex(){ $this->_smarty->assign('test', '测试'); $this->_smarty->display('create.html'); }
protected 아래의 확장 폴더에 smarty 템플릿 플러그인을 넣고 다음 내용으로 CSmarty 클래스 파일을 만듭니다.
<?php require_once(Yii::getPathOfAlias('application.extensions.smarty').DIRECTORY_SEPARATOR.'Smarty.class.php'); define('SMARTY_VIEW_DIR', Yii::getPathOfAlias('application.views')); 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 = '<!--{'; $this->right_delimiter = '}-->'; $this->cache_lifetime = 3600; } function init() {} } ?>
그런 다음 필요한 template_c를 만듭니다. samrty, 캐시 및 기타 폴더.
다음 단계는 구성 부분입니다
protected/config/main.php를 열고 구성 요소 배열에
'smarty'=>array( 'class'=>'application.extensions.CSmarty', ),
를 추가하고 마지막으로 Yii::app()->smarty를 직접 사용합니다. 지금 Smarty를 시도해 보세요. 액션에서 매번 Yii::app()->smarty를 사용하는 것이 번거롭다면, 컴포넌트 아래 컨트롤러에
protected $smarty = ''; protected function init() { $this->smarty = Yii::app()->smarty; }
를 추가한 후 액션에서 직접 $this->를 사용하면 됩니다. smarty는 smarty를 사용합니다.
Yii 프레임워크를 기반으로 한 PHP에서 스마트한 템플릿을 사용하는 방법에 대한 자세한 설명은 PHP 중국어 웹사이트를 참고하세요!