不确定这是否是您正在寻找的,因为我使用了两页设计,您可能会使用另一页来添加/编辑/删除地标,但也许这会给您一些想法。
我在数据库中创建了三个表——trip、landmark 和 landmarktrip,定义如下。
CREATE TABLE IF NOT EXISTS `landmark` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) CHARACTER SET latin1 NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=6 ;
INSERT INTO `landmark` (`id`, `name`) VALUES
(1, 'Xintiandi'),
(2, 'Pearl TV Tower'),
(3, 'YuYuan Gardens'),
(4, 'Shanghai Botanical Gardens'),
(5, 'Shanghai World Financial Centre');
CREATE TABLE IF NOT EXISTS `landmarktrip` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`trip_id` int(10) NOT NULL,
`landmark_id` int(10) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=7 ;
INSERT INTO `landmarktrip` (`id`, `trip_id`, `landmark_id`) VALUES
(1, 1, 1),
(2, 1, 2),
(3, 1, 3),
(4, 2, 3),
(5, 2, 4),
(6, 1, 5);
CREATE TABLE IF NOT EXISTS `trip` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(10) NOT NULL,
`name` varchar(255) COLLATE utf8_bin NOT NULL,
`short_desc` varchar(255) COLLATE utf8_bin NOT NULL,
`start_date` date NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='7741244' AUTO_INCREMENT=3 ;
INSERT INTO `trip` (`id`, `user_id`, `name`, `short_desc`, `start_date`) VALUES
(1, 1, 'Shanghai 1', 'First Trip To China', '2011-10-13'),
(2, 1, 'Shanghai 2', 'Return Visit', '2011-10-21');
然后在 wwwroot/website/lib/Model 中创建模型如下
地标.php
class Model_Landmark extends Model_Table {
public $entity_code='landmark';
public $table_alias='l';
function init(){
parent::init();
$this->addField('id')->mandatory(true)->system(true)->visible(false);
$this->addField('name')->mandatory(true);
}
}
Trip.php
class Model_Trip extends Model_Table {
public $entity_code='trip';
public $table_alias='t';
function init(){
parent::init();
$this->addField('id')->mandatory(true)->system(true)->visible(false);
$this->addField('user_id')->defaultValue($this->api->auth->get('id'))->visible(false);
$this->addField('name')->mandatory(true);
$this->addField('short_desc')->mandatory(true);
$this->addField('start_date')->dataType('date')->mandatory(true);
}
}
}
地标旅行.php
class Model_LandmarkTrip extends Model_Table {
public $entity_code='landmarktrip';
public $table_alias='lt';
function init(){
parent::init();
$this->addField('id')->system(true)->visible(false);
$this->addField('trip_id')->refModel('Model_Trip')->mandatory(true);
$this->addField('landmark_id')->refModel('Model_Landmark')->mandatory(true);
}
}
在 wwwroot/website/page 中创建了两个页面,一个用于添加旅行,另一个用于行程,因为我不知道您使用的表单方法如何,您可以选择要查看的详细信息。
trips.php
class page_trips extends page {
function init() {
parent::init();
$p=$this;
$c=$p->add('CRUD')->setModel('Trip');
$c->setMasterField('user_id', $this->api->auth->get('id'));
}
}
行程.php
class page_itinerary extends page {
function init() {
parent::init();
$p=$this;
$this->js()->_load('trip_univ');
$triplist=$this->api->db->dsql()->table('trip t')
->field('t.id')
->field('t.name')
->where('t.user_id', $p->api->auth->get('id'))
->order('t.start_date')
->do_getAssoc();
if ($_GET['trip']){
$curr_trip=$_GET['trip'];
} else {
$earliest=$this->api->db->dsql()->table('trip')
->field('min(start_date)')
->where('user_id',$this->api->auth->get('id'))
->do_getOne();
$curr_trip=$this->api->db->dsql()->table('trip')
->field('id')
->where('user_id',$this->api->auth->get('id'))
->where('start_date',$earliest)
->do_getOne();
}
$f=$p->add('Form')->setFormClass('horizontal');
$list=$f->addField('dropdown','trip')->setValueList($triplist)->set($curr_trip);
$list->js('change')->univ()->viewTrip($p->api->getDestinationURL(null), $list);
$lt=$p->add('CRUD')->setModel('LandmarkTrip');
$lt->setMasterField('trip_id', $curr_trip);
}
}
最后一个文件允许列表更改网格在 wwwroot/website/templates/js 中创建一个名为 trips_univ.js 的文件
trip_univ.js
$.each({
viewTrip: function(url, name){
document.location.href=url+'&trip='+$(name).val();
}
},$.univ._import);
所以现在,您可以使用 CRUD 创建行程来添加、编辑和删除行。然后进入行程页面,从下拉列表中选择一个行程,或者默认为最早的行程,并且可以添加、删除或编辑行程中的地标。