日期:2012-08-24  浏览次数:20727 次

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 directorydefine('GUESTBOOK_DIR', '/web/www.example.com/smarty/guestbook/');// define smarty lib directorydefine('SMARTY_DIR', '/usr/local/lib/php/Smarty/');// include the setup scriptinclude(GUESTBOOK_DIR . 'libs/guestbook_setup.php');// create guestbook object$guestbook =& new Guestbook;// set the current action$_action = isset($_REQUEST['action']) ? $_R
EQUEST['a