Smarty程序應(yīng)用范例:留言簿(Guestbook)第二節(jié)
我們將從“index.php”腳本文件開始留言簿程序的編寫歷程,它將直接被WEB瀏覽器訪問,所以說是我們這個程序的“大門”。
/web/www.example.com/docs/guestbook/index.php
<?php
/**
* Project: Guestbook Sample Smarty Application
* Author: Monte Ohrt <monte [AT] ohrt [DOT] com>
* Date: March 14th, 2005
* File: index.php
* Version: 1.0
*/
// define our application directory
define('GUESTBOOK_DIR', '/web/www.example.com/smarty/guestbook/');
// define smarty lib directory
define('SMARTY_DIR', '/usr/local/lib/php/Smarty/');
// include the setup script
include(GUESTBOOK_DIR . 'libs/guestbook_setup.php');
// create guestbook object
$guestbook =& new Guestbook;
// set the current action
$_action = isset($_REQUEST['action']) ? $_R EQUEST['action'] : 'view';
switch($_action) {
case 'add':
// adding a guestbook entry
$guestbook->displayForm();
break;
case 'submit':
// submitting a guestbook entry
$guestbook->mungeFormData($_POST);
if($guestbook->isValidForm($_POST)) {
$guestbook->addEntry($_POST);
$guestbook->displayBook($guestbook->getEntries());
} else {
$guestbook->displayForm($_POST);
}
break;
case 'view':
default:
// viewing the guestbook
$guestbook->displayBook($guestbook->getEntries());
break;
}
?>
“index.php”扮演著整個程序的控制者這個角色。它掌控著所有來自WEB瀏覽器的訪問請求,并指導程序發(fā)生些什么相應(yīng)的動作。它定義了程序目錄,包括程序的安裝腳本,以及根據(jù)全局變量$_REQUEST所定義的action值,并指導程序做出相應(yīng)的動作。
這里有三個基本的動作設(shè)置(actions):
“添加”當用戶往留言簿里寫內(nèi)容時; “提交”當用戶寫完內(nèi)容提交時; “瀏覽”當用戶瀏覽留言簿時。
缺省情況是“瀏覽”。
/web/www.example.com/smarty/guestbook/libs/guestbook_setup.php
<?php
/**
* Project: Guestbook Sample Smarty Application
* Author: Monte Ohrt <monte [AT] ohrt [DOT] com>
* Date: March 14th, 2005
* File: guestbook_setup.php
* Version: 1.0
*/
require(GUESTBOOK_DIR . 'libs/sql.lib.php');
require(GUESTBOOK_DIR . 'libs/guestbook.lib.php');
require(SMARTY_DIR . 'Smarty.class.php');
require('DB.php'); // PEAR DB
// database configuration
class GuestBook_SQL extends SQL {
function GuestBook_SQL() {
// dbtype://user:pass@host/dbname
$dsn = "mysql://guestbook:foobar@localhost/GUESTBOOK";
$this->connect($dsn);
}
}
// smarty configuration
class Guestbook_Smarty extends Smarty {
function Guestbook_Smarty() {
$this->template_dir = GUESTBOOK_DIR . 'templates';
$this->compile_dir = GUESTBOOK_DIR . 'templates_c';
$this->config_dir = GUESTBOOK_DIR . 'configs';
$this->cache_dir = GUESTBOOK_DIR . 'cache';
}
}
?>
我們通過“guestbook_setup.php”進行一些基本的程序運行環(huán)境設(shè)置,比如設(shè)置程序的后臺數(shù)據(jù)庫和模板文件位置。我們使用PEAR的PEAR::DB庫,請確認能夠通過你的php.ini中的“include_path”設(shè)置訪問“DB.php”腳本文件,或者干脆使用“DB.php”的絕對路徑。我們用MySQL作為程序的后臺數(shù)據(jù)庫,在這里書寫恰當?shù)摹癲sn”信息以便使用你自己的MySQL數(shù)據(jù)庫。
注意:如果運行中你得到一個類似“Call to undefined function: query()”樣的錯誤,說明“$dsn”不正確,請檢查“$dsn”是否正確,并測試是否數(shù)據(jù)庫已經(jīng)連接上了。
我們需要安裝一個基本的數(shù)據(jù)庫結(jié)構(gòu)。接下來這個命令行腳本會把我們的數(shù)據(jù)表導入MySQL數(shù)據(jù)庫中。 mysql < guestbook.sql 注意,其中的“GRANT ...”語句修改了數(shù)據(jù)庫的用戶權(quán)限設(shè)置。
guestbook.sql CREATE DATABASE GUESTBOOK;
CONNECT GUESTBOOK;
CREATE TABLE GUESTBOOK ( id int(11) NOT NULL auto_increment, Name varchar(255) NOT NULL default '', EntryDate datetime NOT NULL default '0000-00-00 00:00:00', Comment text NOT NULL, PRIMARY KEY (id), KEY EntryDate (EntryDate) ) TYPE=MyISAM;
GRANT ALL ON GUESTBOOK.* to guestbook@localhost identified by 'foobar';
出處:藍色理想
責任編輯:moby
上一頁 Smarty程序應(yīng)用范例 [1] 下一頁 Smarty程序應(yīng)用范例 [3]
◎進入論壇網(wǎng)絡(luò)編程版塊參加討論
|