2

我觉得有必要让浏览器后退按钮工作,以及允许用户为他们看到的内容添加书签。

我在 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。我可以接受坏人。

4

1 回答 1

1

对于深度链接:我必须做同样的事情(我们的代码看起来几乎相同!),过了一会儿找到了jQuery Address。不过IE有问题。其中一项功能导致它停止工作。据我所知,我没有使用该功能,所以我只是让它返回而不是做它正在做的任何事情。在当前版本 (1.3.1) 中,它是第 77 行的函数 (_search = function(el))。就像我说的,我只是在函数的顶部放置了一个 return,现在一切正常。

至于路线...文档应该是您的第一个停靠港。我为路由所做的是在我的引导文件中,创建一个 _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'
    )
);

但是将您自己的路线组合在一起以满足您的需求(例如,您可能不想使用正则表达式路线)。

于 2010-12-03T18:09:44.170 回答