Не уверен, что это то, что вы ищете, поскольку я использовал двухстраничный дизайн, и вы, вероятно, использовали бы другой, чтобы добавлять / редактировать / удалять ориентиры, но, возможно, это даст вам некоторые идеи.
Я создалтри таблицы в базе данных - 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 следующим образом:
Landmark.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);
}
}
}
LandmarkTrip.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'));
}
}
itinerary.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);
}
}
и один последний файл, который позволяет списку изменять сетку. Создатьфайл с именем trips_univ.js в wwwroot / website / templates / js
trip_univ.js
$.each({
viewTrip: function(url, name){
document.location.href=url+'&trip='+$(name).val();
}
},$.univ._import);
Итак, теперь вы можете создавать поездки, используя CRUD для добавления, редактирования и удаления строк.Затем перейдите на страницу маршрута, чтобы выбрать поездку из раскрывающегося списка, или по умолчанию это самая ранняя поездка, и вы можете добавлять, удалять или редактировать ориентиры из поездки.