1.数据库准备
CREATE TABLE `view1` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`out_id` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=gbk;
INSERT INTO `view1` VALUES ('1', '落花', '1');
INSERT INTO `view1` VALUES ('2', '伤春', '3');
INSERT INTO `view1` VALUES ('3', '悲秋', '4');
INSERT INTO `view1` VALUES ('4', '隆冬', '2');
INSERT INTO `view1` VALUES ('5', '梨花落尽', '6');
CREATE TABLE `view2` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=gbk;
INSERT INTO `view2` VALUES ('1', '可惜不是你');
INSERT INTO `view2` VALUES ('2', '天使');
INSERT INTO `view2` VALUES ('3', '叮咛');
INSERT INTO `view2` VALUES ('4', '青衣');
INSERT INTO `view2` VALUES ('5', '伶仃');
INSERT INTO `view2` VALUES ('6', '葫芦');
INSERT INTO `view2` VALUES ('7', '感怀');
两表关系为表view1中的out_id 是表view2的id
2.创建视图文件
MODEL文件夹下创建文件View_testViewModel.class.php
内容是:
<?
class View_testViewModel extends ViewModel
{
public $viewFields = array(
'View1'=>array('id','name'),
'View2'=>array('name'=>'name2','_on'=>'View1.out_id=View2.id')
);
}
?>
3.调用
Action下建个文件,命名,如:View_testAction.class.php
<?php
// 分类模块
class View_testAction extends CommonAction {
public function index(){
$map = $this->_search ();
if (method_exists ( $this, '_filter' )) {
$this->_filter ( $map );
}
$name = "View_testView";
$model = D("View_testView");
if (! empty ( $model )) {
$this->_list ( $model, $map );
}
$this->display ();
return;
}
?>
4.到了这步,问题出来了
这里的_list函数与原CommonAction.class.php中的类似,但是需要自己做小修改;
附上源码:
protected function _list($model, $map, $sortBy = '', $asc = false) {
//排序字段 默认为主键名
if (!empty ( $_REQUEST ['_order'] )) {
$order = $_REQUEST ['_order'];
} else {
$order = ! empty ( $sortBy ) ? $sortBy : $model->getPk ();
}
//排序方式默认按照倒序排列
//接受 sost参数 0 表示倒序 非0都 表示正序
if (isset ( $_REQUEST ['_sort'] )) {
$sort = $_REQUEST ['_sort'] == 'asc' ? 'asc' : 'desc'; //zhanghuihua@msn.com
} else {
$sort = $asc ? 'asc' : 'desc';
}
//取得满足条件的记录数
$count = $model->where ( $map )->count ();
if ($count > 0) {
import ( "@.ORG.Page" );
//创建分页对象
if (! empty ( $_REQUEST ['listRows'] )) {
$listRows = $_REQUEST ['listRows'];
} else {
$listRows = '';
}
$p = new Page ( $count, $listRows );
//分页查询数据
$voList = $model->where($map)->order( "`" . $order . "` " . $sort)->limit($p->firstRow . ',' . $p->listRows)->select();
/*就是这句,原句是$voList = $model->where($map)->order( "`" . $order . "` " . $sort)->limit($p->firstRow . ',' . $p->listRows)->findAll ( );*/
//分页跳转的时候保证查询条件
foreach ( $map as $key => $val ) {
if (! is_array ( $val )) {
$p->parameter .= "$key=" . urlencode ( $val ) . "&";
}
}
//分页显示
$page = $p->show ();
//列表排序显示
$sortImg = $sort; //排序图标
$sortAlt = $sort == 'desc' ? '升序排列' : '倒序排列'; //排序提示
$sort = $sort == 'desc' ? 1 : 0; //排序方式
//模板赋值显示
$this->assign ( 'list', $voList );
$this->assign ( 'sort', $sort );
$this->assign ( 'order', $order );
$this->assign ( 'sortImg', $sortImg );
$this->assign ( 'sortType', $sortAlt );
$this->assign ( "page", $page );
}
//zhanghuihua@msn.com
$this->assign ( 'totalCount', $count );
$this->assign ( 'numPerPage', C('PAGE_LISTROWS') );
$this->assign ( 'currentPage', !empty($_REQUEST[C('VAR_PAGE')])?$_REQUEST[C('VAR_PAGE')]:1);
Cookie::set ( '_currentUrl_', __SELF__ );
return;
}
加在View_testAction.class.php里即可;