Submitted by aming on 2008, March 17, 9:19 AM
原作:DreamPig
上次我们讲到进货信息展示,接着我继续讲解
一下是我的管理类的代码
复制内容到剪贴板
代码:
<?php
$i = 0;
foreach($rowset as $row):
$css_class = $i % 2 ? 'even' : 'odd';
$rowid = array('id' => $row[$pk]);
?>
<tr class="<?php echo $i % 2 ? 'odd' : 'even'; ?>"
onmouseover="this.className = 'row_over';"
onmouseout="this.className = '<?php echo $i % 2 ? 'odd' : 'even'; ?>';">
<td align="center" nowrap="nowrap"><?php echo $page*20+$i+1; ?></td>
<td nowrap="nowrap"><?php echo_h($row['name']); ?> </td>
<td align="left" nowrap="nowrap"><?php echo_h($row['dw']); ?></td>
<td align="center" nowrap="nowrap"><?php echo $row['kprq']; ?></td>
<td align="center" nowrap="nowrap"><?php echo $row['sl']; ?></td>
<td align="center" nowrap="nowrap"><?php echo $row['dj']; ?></td>
<td align="center" nowrap="nowrap"><?php echo $row['zj']; ?></td>
<td align="center" nowrap="nowrap"><?php echo $row['se']; ?></td>
<td align="center" nowrap="nowrap"><?php echo $row['total']; ?></td>
<td nowrap="nowrap">
<a href="<?php echo $this->_url('edit', $rowid); ?>">修改</a>
|
<a href="<?php echo $this->_url('remove', $rowid); ?>"
onclick="return confirm('删除吗?');">删除</a>
</td>
</tr>
<?php $i++; endforeach; ?>
</table>
上 面的信息就是我把通过数据库对象获得数据一个一个的显示出来,可能大家会注意到上面有 $this->_url()这个函数,这个函数是对于url()函数的简化版本,$this->_url()这个函数的第一个参数表示url ()里面的第二个action参数,第二个参数就是url的第三个参数,而他的controller就是继承这个类的controller。
复制内容到剪贴板
代码:
<?php if ($pager->count > 0): ?>
<table width="100%" border="0" cellpadding="2" cellspacing="0">
<tr>
<td bgcolor="#FCFCFC"><input name="FirstPage" type="button" id="FirstPage" value=" |< "
onclick="fnOnPageChanged(<?php echo $pager->firstPage; ?>);" />
<input name="PrevPage" type="button" id="PrevPage" value=" < "
onclick="fnOnPageChanged(<?php echo $pager->prevPage; ?>);" />
<?php $pager->renderPageJumper('第 %u 页'); ?>
<input name="NextPage" type="button" id="NextPage" value=" > "
onclick="fnOnPageChanged(<?php echo $pager->nextPage; ?>);" />
<input name="LastPage" type="button" id="LastPage" value=" >| "
onclick="fnOnPageChanged(<?php echo $pager->lastPage; ?>);" />
</td>
</tr>
</table>
<?php else: // if ($pager->count > 0) ?>
<table width="100%" border="0" cellpadding="2" cellspacing="0">
<tr>
<td>没有信息</td>
</tr>
<tr>
<td></td>
</tr>
</table>
<?php endif; // if ($pager->count > 0) ?>
<table width="100%" border="0" cellpadding="2" cellspacing="0">
<tr>
<td><?php
printf("共有信息 <strong>%u</strong> 条,符合检索条件的共有
<strong>%u</strong> 条记录,分为 <strong>%u</strong> 页显示,
当前查看的是第 <strong>%u</strong> 页", $pager->totalCount,
$pager->count, $pager->pageCount, $pager->currentPage + 1);
?>
</td>
</tr>
</table>
上面这段代码我完全是抄袭shop里面的代码,就是上下分页的代码,大家可以看见fnOnPageChanged()这个js函数如下所示
复制内容到剪贴板
代码:
function fnOnPageChanged(page) {
var url = '<?php echo $this->_url(null); ?>&page=' + page;
document.location.href = url;
}
其实很简单就是传递一个page参数。
接着我继续讲解remove操作
复制内容到剪贴板
代码:
function actionRemove() {
$this->_tbJh->removeByPkv($_GET['id']);
$this->_goBack();
}
很 明显的可以看见我这里是调用了数据库对象的removeByPkv()函数,其实数据库对象里面对于删除还有其他两个函数remove()和 removeByConditions(),根据他们函数的名字我们就可以看出来了,removeByPkv()函数就是根据传进去的主键去删除记录, remove()是根据传进去的包含主键在内的内容的记录,removeByConditions()函数就是删除符合条件的记录,返回删除的记录数量。 还有一个超级牛的函数removeAll(),不到万不得已千万不要用啊!用了就删除你的所有记录了!
Tags: fleaphp, php, mysql, 框架, ajax
FleaPHP | 评论:0
| Trackbacks:0
| 阅读:328
Submitted by aming on 2008, March 17, 9:18 AM
原作:DreamPig
今天我就讲解一下数据列表的显示和一些编写的思路。大家都知道前面一篇我已经写好了添加数据的函数,那个函数其实很简单
复制内容到剪贴板
代码:
/**
* 显示添加页面
*/
function actionIndex() {
require(APP_DIR . '/input_add.php');
}
上 面这个就是说我现在包含进来了input_add.php这个文件,然后在页面上面显示出来。我在我的input_add.php里面的开头判断了是否是 直接调用的!就是说所有的显示页面之前度应该有判度一个在index.php里面定义的变量是否已经定义了,如果是就可以执行,如果不是就显示错误信息, 这样就作到了同意入口的安全性之一。至少我是这样理解的!在这个页面里面的所有连接最好用url函数来生成。
复制内容到剪贴板
代码:
/**
* 处理添加事件
*/
function actionAddPost() {
$this->_tbInput->create($_POST);
$this->actionShow();
}
这 个函数的意思就是在input_add.php这个页面里面的post过来的数据我直接就使用使用我内部的数据库对象的create函数来添加信息,这个 就是我们这个框架的优点之一————————不用自己写sql语句,直接传个数组给这个函数就可以添加数据了。以下信息拷贝原文:
(当数据表中具有名为 created、created_at 或 created_on 的字段,并且字段类型为整数或日期,则在向这个数据表插入记录时。FleaPHP 会自动用当前时间填充该字段。同样的,updated、updated_at 或 updated_on 字段会在更新记录时用当前时间填充。)
复制内容到剪贴板
代码:
/**
* 显示列表
*/
function actionIndex() {
$page = isset($_GET['page']) ? (int)$_GET['page'] : 0;
load_class('FLEA_Helper_Pager');
$table =& $this->_tbInput;
$pager =& new FLEA_Helper_Pager($table, $page);
$pk = $table->primaryKey;
$rowset = $pager->findAll();
$this->_setBack();
include(APP_DIR . '/InputList.php');
}
上面的代码我一行一行给大家解释下来
第一行:接受分页类的传递过来的页码,看现在已经在那一页了,如果没有就默认为0
第二行:加载分页类,由于默认没有加载此扩展
第三行:获得一个 TableDataGateway 对象,为了下面的分页类服务
第四行:定义一个分页类,里面的参数我一个一个介绍一下,第一个参数是一个 TableDataGateway 对象,那么则FLEA_Helper_Pager 会调用该 TDG 对象的 findCount() 和 findAll() 来确定记录总数并返回记录集。第二个参数就是当前页码
第五行:获得当前对象的主键
第六行:返回当前页对应的记录集
第七行:设置当前页的地址,这个就是一个玄机了,如果记录很多的时候,你刚好在第六页,那个时候你删除或者修改了第六页中的某一个记录,那么可能就会直接跳到第一页去了。我现在这样记录下来就是为了防止这种情况。大家以后设计的时候可以参考一下这种思想。
第八行:这个就是现在展示页面的显示,里面可以通过foreach函数把rowset里面的数据显示出来
Tags: fleaphp, php, mysql, 框架, ajax
FleaPHP | 评论:0
| Trackbacks:0
| 阅读:379
Submitted by aming on 2008, March 17, 9:17 AM
原作:DreamPig
昨天大致上讲了一下我们开始工作的一些步骤,今天我将详细讲解一下每个步骤的工作!
在第三步里面我们已经开始MVC设计了!这里面,我们的M其实就是两个数据库表对应的类
在我的项目里面我建立了两个数据库表input和output两张表格,input是用来存储进货项,output用来储存出货项。
那么在我的cwrj/lib/cwrj/Model/下面有两个文件,分别是input.php和output.php。两张表都是FLEA_Db_TableDataGateway的继承类,用来操作相应的数据库表。例如我的input.php里面的代码是如下所示的:
复制内容到剪贴板
代码:
class Model_input extends FLEA_Db_TableDataGateway
{
/**
* 数据表名称
*
* @var string
*/
var $tableName = 'input';
/**
* 主键字段
*
* @var string
*/
var $primaryKey = 'id';
}
这样就完成了我们的第一步的Model的设计,V是最复杂的一个东西!
v是用来控制我们的请求的例如有这样的地址http://www.xxx.com/index.php?control=input&action=add
就表示要访问在我们的/cwrj/lib/cwrj/Controller/下面的input.php文件里面的addAction函数
所以我们预先要设置好我们要做那一些工作例如在input.php文件里面我这样写
复制内容到剪贴板
代码:
class Controller_input extends FLEA_Controller_Action
{
/**
* 提供数据库访问服务的对象
*
* @var _input
*/
var $_tbInput;
/**
* 构造函数
*/
function Controller_input() {
$this->_tbInput =& get_singleton('Model_input');
}
/**
* 显示添加页面
*/
function actionIndex() {
require(APP_DIR . '/input_add.php');
}
/**
* 处理添加事件
*/
function actionAddPost() {
$this->_tbInput->create($_POST);
$this->actionShow();
}
......
}
Tags: fleaphp, php, mysql, 框架, ajax
FleaPHP | 评论:0
| Trackbacks:0
| 阅读:313
Submitted by aming on 2008, March 17, 9:14 AM
原作:DreamPig
最近这几天一直在研究FleaPHP的代码,当然不可能去读取每一行代码咯。今天我就大概说一下我是怎么学习FleaPHP的吧。希望对大家有一定的帮助。
我是以自己写的一个小测试项目开始做起的!我的目标是做一个很简单的数据录入(包括增删改)和导出数据至excel!说一下每个的目的:数据库函数的测试 -----增加为了测试数据库中的 create函数,删除为了测试removeByPkv函数,改当然是为了测试update函数。同时在显示的时候需要用到Pager组件,用来做分页。 而导出仅仅是觉得可以研究一下excel的导出问题!可能以后会把此功能发布在以后的版本里面!废话不多说了!开始吧:
首先当然是建立项目的目录结构,我的项目结构如下所示
/cwrj
--/images
--/css
--/js
--/lib
----/flea
----/cwrj
------/Controller
------/Model
------/Config
index.php
.
.
以上只是我的项目的结构,可能有人会问为什么用cwrj这个名称,就是我这个测试项目的名称咯(财务软件,哈哈);具体的结构安排可以看老廖的开发指南之 命名规范和目录结构
http://www.fleaphp.org/node/17
然后就是打开zend咯,zend还没有使用的朋友我推荐大家先去下载一个(我觉得很好的东西)。打开之后点击项目菜单-》新建项目跳出一个窗口填写一下 你的项目名称,点击下一步,添加路径把cwrj这个项目结构包含进来,然后如果想设置编码什么的点击下一步进行设置,不然点击完成就可以了。
整个的项目框架我已经搭建好了,接下来就是开始我们的程序编写咯!
1.编写自己的配置文件,就是放在cwrj/lib/cwrj/Config/下面的文件,具体怎么配置大家可以参考一下老廖的开发指南之应用程序设置:http://www.fleaphp.org/node/23
2.编写Index.php,里面其实很简单的!就是一个require,一个regist_app_inf,一个import,最后一个run()就ok了。
3.开始我们的mvc模式之旅咯:
今天我就把整个的流程说一下,具体的首先我们整个的框架默认的访问是Controller下面的default类,里面的index函数,这个函数就是我 们在浏览器里面打进去http://www.xxx.com/index.php执行的函数。我们可以先小小的测试一下echo “heello world”;
看到浏览器输出了吗?看到了话,就说明前面做的所有工作都是right的!
Tags: fleaphp, php, mysql, 框架, ajax
FleaPHP | 评论:0
| Trackbacks:0
| 阅读:309