分享
 
 
 

PHP Smarty程序应用范例

王朝php·作者佚名  2006-11-24
窄屏简体版  字體: |||超大  

Smarty程序应用范例:留言簿(Guestbook)第一节

这是一个使用了Smarty的PHP应用程序。目的是就如何在应用程序中使用Smarty,以及如何分离你的“表现”(presentation)作一个示范。这个范例相当简单,但包含了一个完整的迷你框架(mini-framework)用于快速简单地生成一个Smarty驱动的应用程序。一旦你理解了将“表现”分离的观念,你也许会把它用在一些程序开发上。如果真是那样,你需要根据你自己的判断在你的程序中使用以下代码,并为此负责。

你可以从这里下载这个范例的源代码。http://www.phpinsider.com/php/code/guestbook/Guestbook-1.0.tar.gz

你可以在这里先看看这个范例的演示。http://www.phpinsider.com/php/code/guestbook/

这篇文章不指导也不涉及如何安装Apache,PEAR和MySQL。请确认你已经知道这些事情或者有可以直接使用的相关软件环境。如果你的运行环境与范例所示有差别,你需要在给出的代码中进行相应的调整。

接下来我们会开发一个没有管理员界面的留言簿程序,用户可以浏览也可以留言。会涉及到一些与Smarty相关的编程知识,比如表单和数据库数据的读取与显示。

这个范例是Smarty安装指南中留言簿程序的扩展,所以我们是基于此之上进行开发的。以下是我们这个程序用到的文件:

guestbook app files/directories:

/web/www.example.com/docs/

/web/www.example.com/docs/guestbook/

/web/www.example.com/docs/guestbook/index.php

/web/www.example.com/smarty/guestbook/

/web/www.example.com/smarty/guestbook/templates/

/web/www.example.com/smarty/guestbook/templates_c/

/web/www.example.com/smarty/guestbook/configs/

/web/www.example.com/smarty/guestbook/cache/

/web/www.example.com/smarty/guestbook/libs/

/web/www.example.com/smarty/guestbook/libs/guestbook_setup.php

/web/www.example.com/smarty/guestbook/libs/guestbook.lib.php

/web/www.example.com/smarty/guestbook/libs/sql.lib.php

下面,我们一个一个地解释这些文件的用处:

/web/www.example.com/docs/

/docs/ 是我们WEB服务器的根目录(Apache httpd.conf中的DocumentRoot)。

/web/www.example.com/docs/guestbook/

/guestbook/ 是能被浏览器访问的一个相对于根目录的下级目录,存放着我们的程序。

/web/www.example.com/docs/guestbook/index.php

index.php 是我们程序的“大门”,WEB浏览器将通过http://www.example.com/guestbook/index.php访问到这个脚本文件。

/web/www.example.com/smarty/guestbook/

这是存放我们这个程序(实现逻辑的)所有脚本文件的目录,这些脚本文件不一定要存放在服务器根目录下。是否将所有脚本文件都存放在服务器的根目录下完全随你所愿,但是这里我们只把允许WEB浏览器直接访问的页面文件放在WEB服务器的根目录下。你可以使用Apache的“.htaccess”方法或其他WEB服务器软件的方法禁止WEB浏览器对存放在根目录下的这些(不宜让WEB浏览器直接访问的)程序脚本文件的直接访问。

/web/www.example.com/smarty/guestbook/templates/

这里存放我们的Smarty模板文件。

/web/www.example.com/smarty/guestbook/templates_c/

This is where Smarty places its compiled template files. If you installed this correctly, the web server user running PHP has write access here. For most intents and purposes you can just ignore this directory. 这里存放Smarty编译过的模板文件。如果你安装正确,运行PHP的WEB服务器对这里有写权限。出于一些偷懒的目的你可以忽略这个目录。(瞎翻的,用我自己的话讲:WEB服务器要具有这个目录的写权限,否则不能正确安装。如果不想伤脑筋,就忽略它吧。)

/web/www.example.com/smarty/guestbook/configs/

用于存放我们程序的设置文件。设置文件包含着你对来自模板或者程序的访问权限的设置信息。它们不是PHP脚本文件,而是一些可以被Smarty的设置文件解析器解析的文本文件。

/web/www.example.com/smarty/guestbook/cache/

用于存放Smarty的缓存文件。这个目录仅仅当Smarty的缓存功能被打开时才有用。如果你正确安装了,运行PHP的WEB服务器对这里有写权限。就像/templates_c/目录一样,也可以被忽略。(同/templates_c/目录的翻译)

/web/www.example.com/smarty/guestbook/libs/

/libs/ 我们将把程序的主要脚本文件存放这里。

/web/www.example.com/smarty/guestbook/libs/guestbook_setup.php

guestbook_setup.php 我们在该脚本文件中存放一些程序的初始化信息。

/web/www.example.com/smarty/guestbook/libs/guestbook.lib.php

guestbook.lib.php 我们在该脚本文件中存放大部分程序的实现逻辑。

/web/www.example.com/smarty/guestbook/libs/sql.lib.php

sql.lib.php 我们在该脚本文件中存放程序的数据库访问逻辑。

Smarty程序应用范例:留言簿(Guestbook)第二节

我们将从“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浏览器的访问请求,并指导程序发生些什么相应的动作。它定义了程序目录,包括程序的安装脚本,以及根据全局变量$_REQUEST所定义的action值,并指导程序做出相应的动作。

这里有三个基本的动作设置(actions):

“添加”当用户往留言簿里写内容时;

“提交”当用户写完内容提交时;

“浏览”当用户浏览留言簿时。

缺省情况是“浏览”。

/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”进行一些基本的程序运行环境设置,比如设置程序的后台数据库和模板文件位置。我们使用PEAR的PEAR::DB库,请确认能够通过你的php.ini中的“include_path”设置访问“DB.php”脚本文件,或者干脆使用“DB.php”的绝对路径。我们用MySQL作为程序的后台数据库,在这里书写恰当的“dsn”信息以便使用你自己的MySQL数据库。

注意:如果运行中你得到一个类似“Call to undefined function: query()”样的错误,说明“$dsn”不正确,请检查“$dsn”是否正确,并测试是否数据库已经连接上了。

我们需要安装一个基本的数据库结构。接下来这个命令行脚本会把我们的数据表导入MySQL数据库中。

mysql < guestbook.sql

注意,其中的“GRANT ...”语句修改了数据库的用户权限设置。

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';

Smarty程序应用范例:留言簿(Guestbook)第三节

/web/www.example.com/smarty/guestbook/libs/sql.lib.php

<?php

/**

* Project: Guestbook Sample Smarty Application

* Author: Monte Ohrt <monte [AT] ohrt [DOT] com>

* Date: March 14th, 2005

* File: sql.lib.php

* Version: 1.0

*/

// define the query types

define('SQL_NONE', 1);

define('SQL_ALL', 2);

define('SQL_INIT', 3);

// define the query formats

define('SQL_ASSOC', 1);

define('SQL_INDEX', 2);

class SQL {

var $db = null;

var $result = null;

var $error = null;

var $record = null;

/**

* class constructor

*/

function SQL()

[1] [2] [3] [4] 下一页

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有