我正在使用JsHelper编写JS链接以使用ajax加载页面。像这样:
<?= $this->Js->link($item['Series']['title'], array(
'controller' => 'series',
'action' => 'view',
$item['Series']['id']
), array('update' => '#menu-items')); ?>
这工作正常,但现在我想添加它以便您可以链接到这些页面。因此,例如,当您点击该链接时,它会将您重定向到example.com/#!/series/2
。然后,您也可以转到此网址,并在#menu-items
div。
这是我必须从头开始编写的,还是有可用的CakePHP助手或插件可以帮我吗?我之前有过这样的经历,但从未使用CakePHP,也不确定从哪里开始。
谢谢,
答案 0 :(得分:1)
我现在已经开始自己处理它了,因为我认为由于没有响应,所以还没有为CakePHP构建这样的东西。
首先,javascript:
var hash = '';
window.setInterval(function() {
if(hash != location.hash) {
hash = location.hash;
if(hash.indexOf('#!/') != -1) {
var url = hash.substr(2);
$('#my-div').load(url);
}
}
}, 300);
这样做是检查location.hash
是否已更改,如果有,则检查它是否以#!/
开头。 (即#!/:controller/:action/:id
是我正在寻找的哈希值)。然后它只调用jQuery加载函数来加载该控制器和动作。
然后我必须修改我的链接以使用url
中的HtmlHelper
方法。
<?
$hashUrl = $this->Html->url(array(
'controller' => 'categories',
'action' => 'view',
$category['Category']['id']
));
echo $this->Html->link($category['Category']['title'], '#!' . $hashUrl);
?>
这会为控制器和操作创建一个字符串,然后将其附加到#!
方法中的link
。这样做可能看起来很长(你可能会写一个自定义帮助器使它成为一行),但它允许你稍后更改config/routes.php
中的URL。你最终会得到一个这样的网址:#!/categories/view/2
最后,您需要确保在您的控制器中,在您使用的每种方法的最后都有这个。
$this->render('view', 'ajax');
我并不认为这是一个完美的解决方案,但它目前的工作做得非常好。也欢迎提出改进建议。
答案 1 :(得分:0)
有些开源项目可以帮助您。这是一个很好的起点:https://github.com/browserstate/history.js