我认为需要允许浏览器返回按钮工作,以及允许用户为他们看到的内容添加书签。
我在Zend路线上不是多才多艺,但我暂时无法改变它。
这是我正在使用的ajax实现方法:
class TestController extends Zend_Controller_Action {
public function init()
{
/* Initialize action controller here */
if ($this->getRequest()->isXMLHttpRequest()) {
$this->_helper->layout()->setLayout('blank');
$logger = $this->getInvokeArg('bootstrap')->getResource('Log');
$logger->debug('AJAX Call');
}
}
public function indexAction()
{
// render the default page
}
public function somethingelseAction()
{
// do something else render something.
}
}
让我的初始视图使用目标div渲染,以及一些链接......这是我的index.phtml:
<h1>Tests...</h1>
<a class="ajaxloader"
href="<?php echo $this->url(array('controller'=> 'test', 'action' => 'speed'), null, true);?>">Speed</a>
<a class="ajaxloader"
href="<?php echo $this->url(array('controller'=> 'test', 'action' => 'somethingelse'), null, true);?>">Something Else</a>
<div id="testresults">
<h1>Default stuff to show.</h1>
</div>
一些jQuery代码附加到这些'ajaxloader'链接并将结果定位到'testresults'div。
$(function() {
$('.ajaxloader').click(function(event) {
var target = $(this).attr('href');
window.location.hash = target;
$('#testresults').fadeOut('slow', function() {
// complete fadeout, load new content while it's hiding!
$.ajax( {
url : target,
success : function(data) {
$('#testresults').html(data);
$('#testresults').fadeIn();
}
});
});
return false;
})
});
如何在此处实施深层链接?
非常感谢, MEM
PS - 这项实施的好成绩归功于Darryl E. Clarke。 我可以把坏的。
答案 0 :(得分:1)
对于深层链接:我必须做同样的事情(我们的代码看起来几乎相同!)并在一段时间后发现jQuery Address。但是,IE存在问题。其中一个功能导致它停止工作。据我所知,我没有使用该功能,所以我只是让它返回而不是做它正在做的事情。在当前版本(1.3.1)中,它是第77行的函数(_search = function(el))。就像我说的那样,我只是在函数的顶部放置了一个返回,现在一切都很好。
至于路线...... The documentation应该是您的第一个停靠港。 我为路由做的是在我的bootstrap文件中,创建一个_init函数并执行以下操作:
$this->bootstrap('frontController');
/* @var $frontcontroller Zend_Controller_Front */
$frontcontroller = $this->getResource('frontController');
$router = $frontcontroller->getRouter();
$router->addRoute(
'page',
new Zend_Controller_Router_Route_Regex('(.*)\.html',
array('controller' => 'index',
'action' => 'page',
'module' => 'default'),
array('page' => 1),
'%s.html'
)
);
但是将自己的路线放在一起以满足您的需求(例如,您可能不想使用正则表达式路线)。