在我的索引(/players)视图中,我有一个旋转木马,上面有一群玩家的图像。当我点击图像时,我会转到被点击的播放器的视图屏幕(/players/view/1)。
现在我只想有一个带有玩家图像转盘的索引屏幕,在我点击图像后,我想在同一索引屏幕上显示该玩家的信息。
我该如何最好地组合索引和视图,以便我可以点击球员图像并在同一页面上检索他的信息?目标是在控制器中有一个视图文件和一个操作。那么,我如何将find("all")和find(‘first’)放在一个动作中呢?
现在我有/players和/players/view/1。我想要例如/players/1,这样它就可以加载在同一个页面上。然而,我认为这仍然会给页面加载。
最终,我不想加载页面,只想更改内容。
PlayersController的索引操作(给我所有玩家):
public function index() {
$this->layout = 'default_front_players';
$this->Player->recursive = 0;
//$this->Player->find('all');
$this->set('players', $this->Paginator->paginate());
}
查看PlayersController的操作(给我已点击的播放器):
public function view($id = null) {
$this->layout = 'default_front_players';
if (!$this->Player->exists($id)) {
throw new NotFoundException(__('Invalid player'));
}
$options = array('conditions' => array('Player.' . $this->Player->primaryKey => $id));
$this->set('player', $this->Player->find('first', $options));
}
更新
第一种情况
这给了我所有的玩家,也给了我一个玩家(atm玩家143,数据库中的最后一个),问题是当我点击玩家图像时,玩家会停留在玩家143上。url更改为播放器/索引/{点击的播放器数量}
public function index($id = null) {
$this->layout = 'default_front_players';
$this->Player->recursive = 0;
$players = $this->Player->find('all');
$this->set(compact('players'));
$options = array('conditions' => array('Player.' . $this->Player->primaryKey => $id));
$player = $this->set('player', $this->Player->find('first', $options));
}
第二种情况
这不会向我显示玩家的图像,但当我更改url时,它会向我提供我在url中提供的玩家id的内容。
public function index($id = null) {
$this->layout = 'default_front_players';
$this->Player->recursive = 0;
//$players = $this->Player->find('all');
//$this->Paginator->settings = $this->paginator_players;
$this->set('players');
$options = array('conditions' => array('Player.' . $this->Player->primaryKey => $id));
$player = $this->set('player', $this->Player->find('first', $options));
}
如果我转到/players或players/index,我不会得到任何值。
我如何将这两个组合起来?
您是否尝试过ajax和路由来实现内容刷新(本质上是创建对内部资源的自己的api调用)?我在自己的副项目中使用了cakepp,并且需要一种绕过整个控制器、视图加载机制的方法来获得更快的UI体验。
要点是在模板或布局文件中包含jquery。当调用某个路由或url时(这需要在app/config中的routes.php文件中设置一个路由,而不是从应用程序根文件夹设置),启动ajax调用以获取内容并动态更新dom,而无需重新加载页面。
这个建议可能会给你带来一个全新的麻烦,但我认为它是可以实现的。