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
Submitted by aming on 2008, March 14, 10:48 AM
JQuery 使用技巧 一
JQuery 使用技巧 二
JQuery 使用技巧 三
JQuery 使用技巧 四
10、几个实用特效功能
其中toggle()和slidetoggle()方法提供了状态切换功能。
如toggle()方法包括了hide()和show()方法。
slideToggle()方法包括了slideDown()和slideUp方法。
11、几个有用的jQuery方法
$.browser.浏览器类型:检测浏览器类型。有效参数:safari, opera, msie, mozilla。如检测是否ie:$.browser.isie,是ie浏览器则返回true。
$.each(obj, fn):通用的迭代函数。可用于近似地迭代对象和数组(代替循环)。
如
» 阅读全文
Tags: ajax, javascript, php, jquery
JQUERY | 评论:0
| Trackbacks:0
| 阅读:300
Submitted by aming on 2008, March 14, 10:46 AM
JQuery 使用技巧 一
JQuery 使用技巧 二
JQuery 使用技巧 三
JQuery 使用技巧 四
5、集合处理功能
对于jquery返回的集合内容无需我们自己循环遍历并对每个对象分别做处理,jquery已经为我们提供的很方便的方法进行集合的处理。
包括两种形式:
6、扩展我们需要的功能
$.extend({
min: function(a, b){return a < b?a:b; },
max: function(a, b){return a > b?a:b; }
}); //为jquery扩展了min,max两个方法
使用扩展的方法(通过“$.方法名”调用):
alert("a=10,b=20,max="+$.max(10,20)+",min="+$.min(10,20));
» 阅读全文
Tags: ajax, javascript, php, jquery
JQUERY | 评论:0
| Trackbacks:0
| 阅读:412
Submitted by aming on 2008, March 14, 10:46 AM
JQuery 使用技巧 一
JQuery 使用技巧 二
JQuery 使用技巧 三
JQuery 使用技巧 四
四、语法总结和注意事项
1、关于页面元素的引用
通过jquery的$()引用元素包括通过id、class、元素名以及元素的层级关系及dom或者xpath条件等方法,且返回的对象为jquery对象(集合对象),不能直接调用dom定义的方法。
» 阅读全文
Tags: ajax, javascript, php, jquery
JQUERY | 评论:0
| Trackbacks:0
| 阅读:349
Submitted by aming on 2008, March 14, 10:45 AM
JQuery 使用技巧 一
JQuery 使用技巧 二
JQuery 使用技巧 三
JQuery 使用技巧 四
随着WEB2.0及ajax思想在互联网上的快速发展传播,陆续出现了一些优秀的Js框架,其中比较著名的有Prototype、YUI、jQuery、mootools、Bindows以及国内的JSVM框架等,通过将这些JS框架应用到我们的项目中能够使程序员从设计和书写繁杂的JS应用中解脱出来,将关注点转向功能需求而非实现细节上,从而提高项目的开发速度。
jQuery是继prototype之后的又一个优秀的Javascript框架。它是由 John Resig 于 2006 年初创建的,它有助于简化 JavaScript™ 以及Ajax 编程。有人使用这样的一比喻来比较prototype和jQuery:prototype就像Java,而jQuery就像ruby. 它是一个简洁快速灵活的JavaScript框架,它能让你在你的网页上简单的操作文档、处理事件、实现特效并为Web页面添加Ajax交互。
» 阅读全文
Tags: ajax, javascript, php, jquery
JQUERY | 评论:0
| Trackbacks:0
| 阅读:368
Submitted by aming on 2008, March 14, 9:45 AM
使用类进行数据存储
对于PHP和OOP一件非常好的事情就是,你可以很容易地定义一个类来操作某件事情,并且无论何时你想
用的时候都可以调用相应的类。假设你有一个HTML表单,用户可以通过选择产品ID号来选择一个产品。在数
据库中有产品的信息,你想把产品显示出来,显示它的价格等等。你拥有不同类型的产品,并且同一个动作
可能对不同的产品具有不同的意思。例如,显示一个声音可能意味着播放它,但是对于其它种类的产品可能
意味着显示一个存在数据库中的图片。你可以使用OOP或PHP来减少编码并提高质量:
定义一个产品的类,定义它应该有的方法(例如:显示),然后定义对每一种类型的产品的类,从产品
类派后出来(SoundItem类,ViewableItem类,等等),覆盖在产品类中的方法,使它们按你的想法动作。
根据数据库中每一种产品的类型(type)字段给类命名,一个典型的产品表可能有(id, type, price,
description, 等等字段)...然后在处理脚本中,你可以从数据库中取出type值,然后实例化一个名为type
的对象:
-----------------------------------------------------
<?php
$obj=new $type();
$obj->action();
?>---------------------------------------------------
这是PHP的一个非常好的特性,你可以不用考虑对象的类型,调用$obj的显示方法或其它的方法。使用
这个技术,你不需要修改脚本去增加一个新类型的对象,只是增加一个处理它的类。
这个功能很强大,只要定义方法,而不去考虑所有对象的类型,在不同的类中按不同的方法实现它们,然后在主脚本中对任意对象使用它们,没有if...else,也不需要两个程序员,只有高兴。
现在你同意编程是容易的,维护是便宜的,可重用是真的吗?
如果你管理一组程序员,分配工作就是很简单的了,每个人可能负责一个类型的对象和处理它的类。
可以通过这个技术实现国际化,根据用户所选的语言字段应用相应的类就可以了,等等。
拷贝和克隆
当你创建一个$obj的对象时,你可以通过$obj2=$obj来拷贝对象,新的对象是$obj的一个拷贝(不是一
个引用),所以它具有$obj在当时的状态。有时候,你不想这样,你只是想生成一个象obj类一样的一个新
的对象,可以通过使用new语句来调用类的构造函数。在PHP中也可以通过序列化,和一个基类来实现,但所
有的其它类都要从基类派生出来。
进入危险区域
当你序列化一个对象,你会得到某种格式的字符串,如果你感兴趣,你可以调究它,其中,字符串中有
类的名字(太好了!),你可以把它取出来,象:
-----------------------------------------------------
<?php
$herring=serialize($obj);
$vec=explode(':',$herring);
$nam=str_replace("\"",'',$vec[2]);
?>---------------------------------------------------
所以假设你创建了一个"Universe"的类,并且强制所有的类都必须从universe扩展,你可以在universe
中定义一个clone的方法,如下:
-----------------------------------------------------
<?php
class Universe {
function clone() {
$herring=serialize($this);
$vec=explode(':',$herring);
$nam=str_replace("\"",'',$vec[2]);
$ret=new $nam;
return $ret;
}
}
//然后
$obj=new Something();
//从Universe扩展
$other=$obj->clone();
?>---------------------------------------------------
你所得到的是一个新的Something类的对象,它同使用new方法,调用构造函数创建出的对象一样。我不
知道这个对你是否有用,但是Universe类可以知道派生类的名字是一个好的经验。想象是唯一的限制。
Tags: php, mysql
PHP | 评论:0
| Trackbacks:0
| 阅读:177