PHP テンプレート テクノロジーの例
1. サイト構造
?
?
サイト
┗includes
?┗index.htm
?┗content.htm
⁄index.php
┗content.php
?
2. ライブラリ構造
?
?
?
-- -- Database: `test` -- -- -------------------- -- -- Table structure for table `test` -- CREATE TABLE `test` ( `id` smallint(3) NOT NULL auto_increment, `name` varchar(10) NOT NULL default '', `sex` enum('male','female') NOT NULL default 'male', `age` smallint(2) NOT NULL default '0', `email` varchar(20) NOT NULL default '', PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ; -- -- Dumping data for table `test` -- INSERT INTO `test` VALUES (1, 'freshlove', 'male', 28, 'freshlove@gmail.com'); INSERT INTO `test` VALUES (2, 'dinahani', 'female', 29, 'dinahani@gmail.com'); INSERT INTO `test` VALUES (3, 'sam', 'male', 1, 'sam@gmail.com'); INSERT INTO `test` VALUES (4, 'girl', 'female', 0, 'girl@gmail.com');?
3. ?コード
?
--------------- class.inc ファイル --------?
?
?
<?php class db{ private $host; private $user; private $pwd; function __construct($host='localhost',$user='root',$pwd='root'){ $this->host = $host; $this->user = $user; $this->pwd = $pwd; } function connect(){ return mysql_connect($this->host,$this->user,$this->pwd); } } class template{ private $source_file; function get_file($filename){ $this->source_file = file_get_contents($filename); } function parse($tags,$vals){ if(!is_array($tags)) return preg_replace('|{'.$tags.'}|',$vals,$this->source_file); else{ foreach($tags as $row) $keys[] = '|{'.$row.'}|'; return preg_replace($keys,$vals,$this->source_file); } } } ?>?
?----------------index.htm ファイル-------------------
?
?
?
?
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Home Page</title> </head> <body style="font-size:12px"> <table width="100%" cellpadding="0" cellspacing="1" bgcolor="#000000"> <caption>Members List</caption> <tr bgcolor="#ffffff"> <th>Name</th> <th>Sex</th> <th>Age</th> <th>Email</th> </tr> {all_lists} <tr bgcolor="#ffffff"> <td colspan=2>Total: {total_numbers}, Display {per_numbers}/page</td> <td colspan=2 align=right>{page}</td> </tr> <table> <body> <html>?
-----------------list.htm ファイル-----------------
?
?
?
?
<tr bgcolor="#ffffff" align="center"> <td><a href="content.php?id={mid}">{name}</a></td> <td>{sex}</td> <td>{age}</td> <td>{email}</td> </tr>?
-------------------content.htm ファイル----------------------
?
?
?
?
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Home Page</title> </head> <body style="font-size:12px"> <table width="100%" cellpadding="0" cellspacing="1" bgcolor="#000000"> <caption>Member Infos</caption> <tr bgcolor="#ffffff"> <td>Name</td> <td>{name}</td> </tr> <tr bgcolor="#ffffff"> <td>Sex</td> <td>{sex}</td> </tr> <tr bgcolor="#ffffff"> <td>Age</td> <td>{age}</td> </tr> <tr bgcolor="#ffffff"> <td>Email</td> <td>{email}</td> </tr> <table> <div>{back}</div> <body> <html>----------------index.php ファイル-------------------------------------
?
?
?
<?php include('includes/class.inc'); $tmpl = new template(); $db = new db(); $con = $db->connect(); mysql_select_db('test',$con); $limit = 20; //每页显示行数 $p = ($_GET['p']) ? $_GET['p'] : 1; //当前页号 /***** 生成列表开始 *****/ $lists = ''; $tmpl->get_file('templates/list.htm'); $tags = array('mid','name','sex','age','email'); //应与表字段同顺序 $result = mysql_query('select * from test order by id desc limit '.($p-1)*$limit.','.$limit); while($row = mysql_fetch_row($result)) $lists .= $tmpl->parse($tags,$row); /***** 生成列表完成, 分页开始 *****/ $tmpl->get_file('templates/index.htm'); $total = @mysql_result(mysql_query('select count(id) from test'),0); //总记录数 $ps = ceil($total/$limit); //总页数 $pagination = 'First Page '; if($p>1) $pagination .= ''; else $pagination .= ''; $pagination .= 'Prev '; if($p<$ps) $pagination .= ''; else $pagination .= ''; $pagination .= 'Next Last Page '; /***** 分页完成, 生成页面开始 *****/ $tags = array('all_lists','total_numbers','per_numbers','page'); $vals = array($lists,$total,$limit,$pagination); echo $tmpl->parse($tags,$vals); ?>---------------- content.php ファイル ------------------
?
?
?
<?php include('includes/class.inc'); $tmpl = new template(); $db = new db(); $con = $db->connect(); mysql_select_db('test',$con); $tmpl->get_file('templates/content.htm'); $rs = mysql_query('select * from test where id='.$_GET['id']); $row=@mysql_fetch_row($rs); unset($row[0]); //去掉表中读出的多余字段,对齐替换项,或在SELECT语句中列表字段 $tags = array('name','sex','age','email','back'); $row[] = '<a href="index.php">Back</a>'; echo $tmpl->parse($tags,$row); ?>?
?
完了
?
?
?