<?php
/**
* Table Definition for user
*/
require_once 'DB/DataObject.php';
class DataObjects_User extends DB_DataObject
{
###START_AUTOCODE
/* the code below is auto generated do not remove the above tag */
var $__table = 'user'; // table name
var $user_Id; // int(11) not_null primary_key auto_increment
var $first_Name; // string(30) not_null
var $last_Name; // string(40) not_null
var $email; // string(100) not_null
/* Static get */
function staticGet($k,$v=NULL) {
return DB_DataObject::staticGet('DataObjects_User',$k,$v);
}
/* the code above is auto generated do not remove the tag below */
###END_AUTOCODE
}
?>
它还会为user表模式生成example.ini配置文件:
[user]
user_Id = 129
first_Name = 130
last_Name = 130
email = 130
[user__keys]
user_Id = N
Smarty files
It's time to create several files for Smarty:
Smarty文件
现在是创建几个Smarty文件的时候了:
include.php
1 <?
2 require('Smarty.class.php');
3 $smarty = new Smarty;
4 $smarty->template_dir = 'templates/';
5 $smarty->compile_dir = 'templates_c/';
6 $smarty->config_dir = 'configs/';
7 $smarty->cache_dir = 'cache/';
?>
此脚本实例化了一个新Smarty对象.设置Smarty属性.
index.php
1 <?
2 require("include.php");
3 $smarty->assign('TITLE','ACCESS MySQL DATABASE IN THREE TIERS WITH PHP');
4 $smarty->assign('HEADER','WHAT WISH DO ?');
5 $smarty->display('index.tpl');
?>
给Smarty模板分配变量.
insert.php
1 <?
2 require("include.php");
3 $smarty->assign('TITLE','INSERT DATA');
4 $smarty->assign('HEADER','Insert Data');
5 $smarty->assign('data1','First Name');
6 $smarty->assign('data2','Last Name');
7 $smarty->assign('data3','email');
8 $smarty->display('insert.tpl');
?>
添加将在insert.tpl 使用的变量.调用模板insert.tpl .
save.php
1 <?
2 require_once('DB/DataObject.php');
3 require('configDB.php');
4 $user = DB_DataObject::factory('user');
5 $user->first_Name = $x;
6 $user->last_Name = $y;
7 $user->email = $z;
8 $user_Id = $user->insert();
9 $user->update();
10 echo "<script>location.href='index.php'</script>";
11 ?>
This script saves data by using a PEAR::DataObject for the user table. Line 2 loads the class DataObject, and
line 3 calls configdb.php to connect to the database. Line 4 creates an instance of a user object (see User.php).
Lines 5 through 7 pass the variables collected from the form in insert.tpl ($x, $y, and $z) in order to save the
data in the database. The primary key of the table is an autoincrement column, so it doesn't need a value there.
Line 8 inserts the object, and line 9 carries out an update.
view.php
1 <?
2 require_once('DB/DataObject.php');
3 require('configDB.php');
4 require("include.php");
5 $user = DB_DataObject::factory('user');
6 $user->find();
7 while ($user->fetch()) {
8 $smarty->append('users', array(
'ID' => $user->user_Id,
'FIRSTNAME' => $user->first_Name,
'LASTNAME' => $user->last_Name,
'EMAIL' => $user->email,
));
}
9 $smarty->assign('TITLE','List Users');
10 $smarty->assign('HEADER','List User');
11 $smarty->assign('data0','User_Id');
12 $smarty->assign('data1','First Name');
13 $smarty->assign('data2','Last Name');
14 $smarty->assign('data3','email');
15 $smarty->display('view.tpl');
16 ?>
此脚本显示所有存储在user表中的数据.它加载PEAR::DataObject 和include.php文件(给smarty模板分配变量).
第5行创建一个user对象的工厂.第6行执行find()方法.SELECT * FROM user从数据库中检索出了数据,通
过fetch()方法为模板保存数据,一次返回一条记录.
9 到14行是分配其他的变量给Smarty.
这些文件都应当放在dataobjects目录中.
对于模板,这里有index.tpl,list.tpl,和save.tpl.这里是他们的代码:
index.tpl
1 <html>
2 <head>
3 <title>{$TITLE}</title>
4 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
5 </head>
6 <table align="center">
7 <tr>
8 <td>
9 <b>{$HEADER}</b>
10 </td>
11 </tr>
12 </table>
13 <table width="250" border="1" align="center" >
14 <tr>
16 <td align="center">
17 <input type="button" name="insert" value="Insert"
οnclick="javascript:location.href='insert.php';">
18 </td>
19 </tr>
20 <tr>
21 <td align="center">
22 <input type="button" name="view" value="View"
οnclick="javascript:location.href='view.php';">
23 </td>
24 </tr>
25 </table>
26 </body>
27 </html>
站点主页,它在的3行和第9行分别显示$TITLE 和$HEADER,这些变量值是从index.php传递过来的.
这个脚本在web浏览器上生成两个按钮,Insert和View,他们有相应的行为.如果用户点击Insert,系统将调
用Insert.php.如果用户点击View,那么view.php将被调用
insert.tpl
1 <html>
2 <head>
3 <title>{$TITLE}</title>
4 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
5 </head>
6 <body>
7 <form name="form1" action="save.php" method="post">
8 <table width="300" border="1" align="center" >
9 <tr>
10 <td align="center">
11 <b>{$HEADER}</b>
12 </td>
13 </tr>
14 <tr>
15 <td>
16 {$data1}
17 <input type="text" name="x">
18 </td>
19 </tr>
20 <tr>
21 <td>
22 {$data2}
23 <input type="text" name="y">
24 </td>
25 </tr>
26 <tr>
27 <td>
28 {$data3}
29 <input type="text" name="z">
30 </td>
31 </tr>
32 <tr>
33 <td align="center">
34 <input type="submit" name="Submit" value="Add">
35 <input type="button" name="Reset" value="Return/Cancel"
οnclick="javascript:location.href='index.php';">
36 </td>
37 </tr>
38 </table>
39 </form>
40 </body>
41 </html>
这个模板有一个表单和两个按钮,Add 和Return/Cancel.
用户输入数据,first name,last name 和电子邮件字段.insert.php期望在名为x,y,z的变量中接收这些信息,用户点
击Add按钮将运行save.php.如果用户点击Return/Cancel,将会执行index.php.
view.tpl
1 <html>
2 <head>
3 <title>{$TITLE}</title>
4 </head>
5 <body>
6 <table align="center">
7 <tr>
8 <td align="center">
9 <b>{$HEADER}</b>
10 </td>
11 </tr>
12 </table>
13 <table width="500" border="1" align="center">
14 <tr>
16 <td align="center">
17 <b>{$data0}</b>
18 </td>
19 <td align="center">
20 <b>{$data1}</b>
21 </td>
22 <td align="center">
23 <b>{$data2}</b>
24 </td>
25 <td align="center">
26 <b>{$data3}</b>
27 </td>
28 </tr>
29 {section name=display loop=$users}
30 <tr>
31 <td>
32 {$users[display].ID}
33 </td>
34 <td>
35 {$users[display].FIRSTNAME}
36 </td>
37 <td>
38 {$users[display].LASTNAME}
39 </td>
40 <td>
41 {$users[display].EMAIL}
42 </td>
43 </tr>
44 {/section}
45 <br>
46 </table>
47 <br>
48 <table align="center">
49 <tr>
50 <td align="center">
51 <input name="vol" type="button" value="Return"
οnclick="javascript:location.href='index.php';">
52 </td>
53 </tr>
54 </table>
55 </body>
56 </html>
这个模板显示所有存储在example数据库中的所有数据.
最后,Return按钮把用户带回到主页.
所有的这些(*.tpl)文件必须放在templates目录下.