今晚吃完饭弄了两个多小时终于搞定了!
在sae下安装了最新的SpeedPHP是没有Smarty模块的,需要到SpeedPHP官方下载 最新的sae专用版。
下载完后用svn commit到sae上面,然后开启Memcache,因为sae是不允许应用对文件系统进行写入的,而smarty会在编译目录生成html文档的,需要对文件系统进行写操作。不能对文件系统进行写入只有把编译生成的文件写入到 Memcache里了。
开启MC时会有一些MC的配置的,这个根据个人喜好进行配置了!
开启MC后,修改一下 index.php文件。改成一下这个样子就可以了。
<?php
define("APP_PATH",dirname(__FILE__));
define("SP_PATH",dirname(__FILE__).'/SpeedPHP');
$spConfig = array(
'view' => array(
'enabled' => TRUE,
'config' =>array(
'template_dir' => APP_PATH.'/tpl',
'compile_dir' => 'saemc://templates_c',
'cache_dir' => 'saemc://cached',
'left_delimiter' => '<{',
'right_delimiter' => '}>',
'auto_literal' => TRUE,
),
'debugging' => FALSE,
'engine_name' => 'Smarty',
'engine_path' => SP_PATH.'/Drivers/Smarty/Smarty.class.php',
'auto_ob_start' => TRUE,
'auto_display' => FALSE,
'auto_display_sep' => '/',
'auto_display_suffix' => '.html',
),
);
require(SP_PATH."/SpeedPHP.php");
spRun();
当然,要是配置不一定要在index.php里配置,也可以在应用的SpeedPHP目录下的spConfig.php文件里面配置。
配置好后,在应用的版本目录里创建tpl文件夹,如果需要用到model层 还需创建model文件夹。
目录结构如下:
OK,下面创建一个小小的测试例子。
首先,对应用开启mysql,点击应用里的服务管理------>mysql就可以安装导向开启mysql服务了,开启后,系统会创建一个app_yourAappName的数据库,点击管理MySQL就可以进入myslq管理界面,对数据库进行管理。
我这里创建了一个users的数据表,表中有个 username,passwd,email,gender四个字段,其中username为primary key
,同时我也插入了4条数据。
在controller中修改main.php如果没有则创建main.php文件。内容如下:
<?php
class main extends spController
{
function index(){
//使用saemysql对数据库进行操作
// memcache_init();
/**$mysql = new saemysql();
$sqlStr = "select * from users";
*/
//利用spClass($className)方法就可以链接到数据库中具体的表
$users = spClass("users");
//findall($condition) 利用这个方法取出数据表中所有符合condition条件的数据,如果 condition为空这取回表中所有数据。
$this->results = $users->findAll(); //通过$this->results 就可以把result的数据注册到smarty中了。
$this->display("index.html"); //通过$this->display()方法就可以值得使用的模板。
}
}
注释部分是使用saemysql链接数据库。如果使用saemysql操作数据库则不需要创建model文件夹。其实speedPHP操作数据库也要通过saemysql驱动。这个可以在spConfig.php文件中看到。
在model下创建users.php,内容如下:
<?php
class users extends spModel{
var $pk = "username"; //username 用户名问primarty key 主键
var $table = "users"; // 数据表的名称
}
注意: 类名字必须和文件名相同。在里面只需声明数据表的主键和数据表名称即可。
最后在tpl文件夹里创建index.html模板文件,内容如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh-cn" lang="zh-cn">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>show data</title>
<style>
td{
border: 1px #03C;
background-color:#999
}
caption{
background-color:#999
}
</style>
</head>
<body>
<center>
<table>
<caption><h2>Users Tble Data</h2></caption>
<tr>
<td>用户名</td>
<td>密码</td>
<td>邮箱地址</td>
<td>性别</td>
</tr>
<!-- 使用smarty中的foreach内建函数历遍数组$results -->
<{foreach from=$results item=one}>
<tr>
<td><{$one.username}></td>
<td><{$one.passwd}></td>
<td><{$one.email}></td>
<td><{$one.gender}></td>
</tr>
<{/foreach}>
</table>
</center>
</body>
</html>
最终在sae样运行的结果:
注意: 这里的smarty的限定符和变量或函数之间不能有空隙,一开始加了空隙结果显示出模板的内容。sae官方提供的SpeedPHP只能通过saemysql链接数据库,不知道是不是我没配置好!-----------------ps:今天第一次接触SpeedPHP和Smarty,之前看了几个smarty的视频,一直没真正实践,这是第一次!有什么不对的地方还望各位大牛指出!
摘自:我的百度博客


没有评论:
发表评论