検索
ホームページphp教程php手册使いやすいテンプレートクラス。

テンプレート

PHP コード:---------------------------------------------- -- ----------------------------------

if(!define("__TEMPLATE_H_PHP__ ")) {
define("__TEMPLATE_H_PHP__","template.h.php");
/******************** コード開始 ********************/

//PHPクラスライブラリ:template.h.php
//実行環境:PHP4。 0
/ /更新日時: 2002-08-01
//最終更新日: stangly.wrong
//クラスライブラリの紹介: テンプレートの抽出と表示クラス
////////////// ///// ///////////////////////////////////////////

//クラス名: テンプレート基本クラス Template_base
//関数: テンプレート固有の操作クラス。
class Template_base {
var $classname = "Template_base";

/* 設定されている場合、割り当てをエコーし​​ます */
var $debug = false;

/* $file[handle] = "ファイル名"; file = array();

/* 相対ファイル名はこのパス名に対する相対値です */
var $root = "";

/* $varkeys[key] = "key" = "value"; ; */
var $varkeys = array();
var $varvals = array();

/* "remove" => 未定義の変数をコメントで置き換えます
* " keep" => 未定義の変数を保持します
*/
var $unknowns = "remove";

/* "yes" => 停止、"report" => エラーを報告、続行、"no" => エラーを無視します */
var $halt_on_error = "yes";

/* 最後のエラー メッセージはここに保持されます */
var $last_error = "";


/************************************************* *************************/
/* public: Constructor .
* root : テンプレートディレクトリ
*unknowns: 未知の変数の扱い方
*/
function Template_base($root = ".", $unknowns = "remove") {
$this->set_root($root );
$ this->set_unknowns($unknowns);
}

/* public: setroot(pathname $root)
* root: 新しいテンプレート ディレクトリ
*/
function set_root($root) {
if ( !is_dir($ root)) {
$this->halt("set_root: $root はディレクトリではありません。");
return false;
}

$this->root = $root;
return true ;
}

/* public: set_unknowns(enum $unknowns)
*unknowns: "remove", "comment", "keep"
*
*/
function set_unknowns($unknowns = "keep") {
$this ->unknowns = $unknowns;
}

/* public: set_file(array $filelist)
* filelist: ハンドル、ファイル名のペアの配列
*
* public: set_file(string $handle, string $filename)
* ハンドル: ハンドルファイル名の場合は、
* filename: テンプレート ファイルの名前
*/
function set_file($handle, $filename = "") {
if (!is_array($handle)) {
if ($filename = = "") {
$this->halt("set_file: ハンドル $handle ファイル名が空です。");
return false;
}
$this->file[$handle] = $this-> filename($filename; );
} else {
reset($handle);
while(list($h, $f) = each($handle)) {
$this->file[$h] = $this ->ファイル名($f);
}
}
}

/* public: set_block(string $parent, string $handle, string $name = "")
* $parent からテンプレート $handle を抽出,
* 変数を配置 {
*/
function set_block($parent, $handle, $name = "") {
if (!$this->loadfile($parent)) {
$this-> ;halt(" subst: $parent をロードできません。");
return false;
}
if ($name == "")
$name = $handle;

$str = $this->get_var( $parent);
$reg = "/(.*)ns*/sm";
preg_match_all ($reg, $str, $m);
$str = preg_replace($reg, "{" . "$name}", $str);
$this->set_var($handle, $m[1] [0]) ;
$this->set_var($parent, $str);
}

/* public: set_var(array $values)
* 値: 変数名と値のペアの配列
*
* public: set_var(string $varname, string $value)
* varname: 定義する変数の名前
* value: その変数の値
*/
function set_var($varname, $value = "") {
if (!is_array($varname)) {
if (!empty($varname))
if ($this->debug) echo "スカラー: *$varname* を *$value* に設定
n";
$this->varkeys[$varname] = "/".$this->varname($varname)."/";
$this->varvals[$varname] = $value;
} else {
reset($varname);
while(list($k, $v) = each($varname)) {
if (!empty($k))
if ($this->debug) echo "配列: *$k* を *$v*
n に設定します";
$this->varkeys[$k] = "/".$this->varname($k)."/" ;
$this->varvals[$k] = $v;
}
}
}

/* public: subst(string $handle)
* handle: 変数が置換されるテンプレートのハンドル
* /
function subst($handle) {
if (!$this->loadfile($handle)) {
$this->halt("subst: $handle をロードできません。");
return false;
}

$str = $this->get_var($handle);
$str = @preg_replace($this->varkeys, $this->varvals, $str);
return $str;
}

/* public: psubst(string $handle)
* handle: 変数が置換されるテンプレートのハンドル
*/
function psubst($handle) {
echo $this->subst($handle);

return false;
}

/* public: parse(string $target, string $handle, boolean append)
* public: parse(string $target, array $handle, boolean append)
* target: 変数のハンドルgenerate
* handle: 置換するテンプレートのハンドル
* append: ターゲットハンドルに追加
*/
function parse($target, $handle, $append = false) {
if (!is_array($handle)) {
$ str = $this->subst($handle);
if ($append) {
$this->set_var($target, $this->get_var($target) . $str);
} else {
$this->set_var($target, $str);
}
} else {
reset($handle);
while(list($i, $h) = each( $handle)) {
$str = $this->subst($h);
$this->set_var($target, $str);
}
}

return $str;
}

関数pparse($target, $handle, $append = false) {
echo $this->parse($target, $handle, $append);
return false;
}

/* public: get_vars()*/
関数get_vars() {
reset($this->varkeys);
while(list($k, $v) = each($this->varkeys)) {
$result[$k] = $this ->varvals[$k];
}

return $result;
}

/* public: get_var(string varname)
* varname: 変数の名前
*
* public: get_var(array varname)
* varname: 変数名の配列
*/
function get_var($varname) {
if (!is_array($varname)) {
return $this->varvals[$varname];
} else {
replace($ varname);
while(list($k, $v) = each($varname)) {
$result[$k] = $this->varvals[$k];
}

return $result;
}
}

/* public: get_unknown($handle)
* handle: テンプレートのハンドル
*/
function get_unknown($handle) {
if (!$this->loadfile($handle)) {
$this->halt("get_unknown: $handle をロードできません。");
return false;
}

preg_match_all("/{([^}]+)}/", $this->get_var ($handle), $m);
$m = $m[1];
if (!is_array($m))
return false;

restart($m);
while(list($k, $ v) = each($m)) {
if (!isset($this->varkeys[$v]))
$result[$v] = $v;
}

if (count($result) )
return $result;
else
return false;
}

/* public:finish(string $str)
* str: 終了する文字列
*/
functionfinish($str) {
switch ($this->unknowns) {
case "keep":
Break;
case "remove":
$str = preg_replace('/{[^ trn}]+}/', "", $str) ;
Break;
case "コメント":
$str = preg_replace('/{([^ trn}]+)}/', "", $str);
Break;
}

return $str;
}

/* public: p(string $varname)
* varname: 出力する変数の名前
*/
function p($varname) {
echo $this->finish($this->get_var($varname));
}

function get($varname) {
return $this->finish($this->get_var($varname) ));
}

/************************************************* *************************/
/* private: filename($filename)
* filename: 完成する名前。
*/
function filename($filename) {
if (substr( $filename, 0, 1) != "/") {
$filename = $this->root."/".$filename;
}

if (!file_exists($filename))
$this-> ;halt("filename: ファイル $filename が存在しません。");

return $filename;
}

/* private: varname($varname)
* varname: 保護される置換変数の名前。
* /
function varname($varname) {
return preg_quote("{".$varname."}");
}

/* private:loadfile(string $handle)
* handle: ハンドルで定義されたファイルを読み込みます (if)まだロードされていません。
*/
function loadfile($handle) {
if (isset($this->varkeys[$handle]) and !empty($this->varvals[$handle]))
return true;

if (!isset($this->file[$handle])) {
$this->halt("loadfile: $handle は有効なハンドルではありません。");
return false;
}
$filename = $this->file[$handle];

$str = implode("", @file($filename));
if (empty($str)) {
$this-> halt("loadfile: $handle の読み込み中に、$filename が存在しないか、空です。");
return false;
}

$this->set_var($handle, $str);

return true;
}

/************************************************* *************************/
/* public: halt(string $msg)
* msg: 表示するエラーメッセージ
*/
function halt($msg) {
$this->last_error = $msg;

if ($this->halt_on_error != "いいえ")
$this->haltmsg($msg);

if ($this->halt_on_error == "はい")
die( "停止しました。");

return false;
}

/* public, override: haltmsg($msg)
* msg: 表示するエラー メッセージ。
*/
function haltmsg ($msg) {
printf("テンプレート エラー: %s
n", $msg);
}
}#end Template_base class

//类名:Template
//機能:モール板处理扩展
//说明:继承Tempalte_base、一部修正されたテンプレート处理関数数
class Template extends Template_base {
var $handelkey = array();
var $handelcount;

function Template($filename) {
$this->Template_base();
if(empty($filename) | | !file_exists($filename)) {
die("Template ->Template() : エラー - ファイル $filename が存在しません");
}
$this->set_file('ihtml',$filename);
$this->handelcount = 1;
return true;
}

function Output() {
$this->p('out');
return true;
}

function Compile() {
$this->parse('out','ihtml');
return true;
}

function OP() {
$copyright = '

© 2002 new Maya workroom

';
$this->SetVar('copyright',$copyright);
$this->Compile();
$this->OutPut();
return true;
}

//例: var または array
// $key = array(
// 'row1' => '序号',
// 'row2' => 「姓名」、
// '行3' => '性别'
// )
function SetVar($key,$value = '') {
$this->set_var($key,$value);
return true;
}

// $key は定義されています現在のブロック
関数 SetBlock($blockname) {
$this->handelkey[$blockname] = $this->handelcount;
$this->set_block('ihtml',$blockname,$this-> handelcount);

$this->handelcount ++;
return true;
}

//例: array
// $data = array (
// '0' => array('1', '2','3'),
// '1' => array('4','5','6'),
// );
// または var
関数 SetBlockVar($data, $blockname,$var = '') {
if(is_array($data)) {
$x = count($data);
$y = count($data[0]);

for($i = 0 ; $i for($j = 0 ; $j $this->set_var('var'.$j,$data[ $i][$j]);
}
$this->parse($this->handelkey[$blockname],$blockname,true);
}
} else {
$this->set_var( $var,$data);
}
return true;
}

function BlockParse($blockname) {
if(!empty($blockname)) {
$this->parse($this->handelkey[ $blockname],$blockname,true);
return true;
}
return false;
}

}#end テンプレート クラス

/******************** コード終了 ********************/
}
?>

--- -------------------------------------------------- -------------------------


调用の方法
$t = new template('test.tpl');
$t ->SetVar('test','中国');// 関連する文字列を置き換えます。
$t->OP();

場合によっては、このようなモジュールを使用します







{var0} {var1}









{var0} {var1}


则これ样用

include("template .h.php");
include('template.h.php');
$data=array();
$data['list']=array(
'0'=>array('a1' ,'a2'),
'1'=>array('b1','b2')
);
$data['list2']=array(
'0'=>array('aa1', 'aa2'),
'1'=>array('bb1','bb2')
);
$t = 新しいテンプレート('test.tpl');
$t->SetBlock('list' );
$t->SetBlockVar($data['list'],'list');
$t->SetBlock('list2');
$t->SetBlockVar($data['list2' ],'list2');
$t->OP();
?>

その他の方法大家がさらに研究します。



声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。