ホームページ >バックエンド開発 >PHPチュートリアル >Yii Framework_PHP チュートリアルに基づいた PHP での Smarty テンプレートの使用方法の詳細な説明

Yii Framework_PHP チュートリアルに基づいた PHP での Smarty テンプレートの使用方法の詳細な説明

WBOY
WBOYオリジナル
2016-07-21 15:07:14863ブラウズ

最初の方法
YIIシステムの方法に従ってビューを生成するのは少し面倒なので、smartyを使用する方が簡単だと思います。スマートなテンプレートを追加してみました。

コードをコピーします コードは次のとおりです:

date_default_timezone_set("PRC");
class PlaceController extends CController {
protected $_smarty;
function __construct(){
parent::__construct('place ');/ /親クラスのコンストラクターを呼び出すには、コントローラー ID であるパラメーターが必要です
$path = Yii::getPathOfAlias('application');//保護されたフォルダーの絶対パスを取得します
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 が最初に登録されるため、クラス名に達すると、SMARTY の各クラス名に対して YII の自動ロード クラス関数が最初に実行されます。ただし、条件が満たされていない場合は、YII の自動ロード クラス関数も最初に呼び出されます。ただし、SMARTY のクラス名は、クラスを自動的にロードするときに YII の自動ロード クラスの論理ステートメントに準拠します。その結果、クラスは Include ステートメントを使用して YII によってインクルードされます。見つからない必要があります。
解決策は次のとおりです: SMARTYクラスが自動的にロードされるとき、YIIで定義された自動ロード関数から抜け出して、SMARTYロード関数が実行されるようにします。
具体的な実装は、YIIBase クラスの autoload 関数を変更し、次のコードを追加することです
コードをコピーします コードは次のとおりです:

public static function autoload($className)
{
//エラーPHPファイルが表示されるようにincludeを使用します
if(preg_match('/smarty/i', $className)){ //クラス名にsmartyが含まれている限り、大文字小文字に関係なく返されます SMARTYの自動クラスロードfunction.UReturn;
}
yii 自動ロードクラスコード}


各アクションテンプレートで使用できます。


コードをコピーします コードは次のとおりです:
public function actionIndex(){
$this->_smarty->assign('test', 'test');
$this-> ;_smarty-> ;display('create.html');
}



2 番目の方法:
smarty テンプレート プラグインを保護された拡張機能フォルダーに配置し、次の内容で CSmarty クラス ファイルを作成します。 content

コードをコピーします コードは次のとおりです:

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() {
親::__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->cache_lifetime = 3600; 
}
関数 init() {}
}
?>

その後、samrty に必要な template_c、キャッシュなどのファイルが構築されます。
次に、構成部分が開きます
protected/config/main.php をコンポーネント数グループに追加します

代コーディング如下:'smarty'=>array( 'class'=>'application.extensions.CSmarty',
),


最後にアクション中に直接使用Yii::app()->smarty就アクションで毎回 Yii::app()->smarty を使用する場合は、
コンポーネントの下のコントローラーに次のように


を追加することができます:
protected $smarty = '';protected function init() { $this->smarty = Yii::app()->smarty; }

その後アクション中に直接使用可能$this- >smartyはsmartyを使用しました。



http://www.bkjia.com/PHPjc/327564.html

www.bkjia.com

tru​​e

技術記事最初の方法は、YII システムのビデオ生成法に従って、smarty モジュールを追加して、より省力な方法を実現します。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。