Zend MVC - 设计 - onClick,加载新视图?视图内的视图?

时间:2010-11-25 17:23:40

标签: php zend-framework views

我有一个页面,该页面将淡出以显示新内容(来自其他视图)。

一般而言,我们应该考虑什么?

我应该在哪里挖掘才能实现这一目标?

我应该通过使用某种ajax来调用另一个视图中的视图吗?

class EquipasController extends OccControllerAction{

public function init(){

if ($this->getRequest()->isXMLHttpRequest()) {
 $this->_helper->layout()->setLayout('blank');
 //$this->_helper->layout()->disableLayout();
 $logger = $this->getInvokeArg('bootstrap')->getResource('Log');
 $logger->debug('AJAX Call');
}

}


public function listaAction()
{
    echo ("I'm HERE??");
   $dados = array('dados1', 'dados2', 'dados3');
}

}


<h1>Tests...</h1>

<a href="<?php echo $this->url(array("controller"=>"equipas","action"=>"lista"), null, true); ?>" class="ajaxloader">Mostra Lista Sff</a>
<div id="testresults">
    <h1>Esta é uma coisa que aparece sempre.</h1>
</div>

<script type="text/javascript">
$(function() {
        $('.ajaxloader').click(function(event) {
            var target = $(this).attr('href');
            window.location.hash = target;
            $.ajax({
                  url: target,
                  success: function(data) {
                    $('#testresults').html(data);
                  }
                });
            return false;
        });
    });
</script>

当我第一次加载页面时,一切正常。 当我点击链接时,我实际上得到一个ajax调用(因为我注意到没有刷新)。 显示时,它会再次显示所有页面。

它不显示我放在listaAction上的回声! : - (

更新

当我在浏览器上看到我的链接网址时,我看到: http://mypage.org/equipas/registo#/equipas/lista

在锚上我有: http://mypage.org/equipas/lista

问题可以在这里吗?

2 个答案:

答案 0 :(得分:1)

我以前做过这件事。这是我所做的精简版。

  1. 有一个'空白'布局。这排除了任何全局标题/内容/ css。

  2. 如果请求是ajax,请使用“智能”控制器init()或插件,在默认布局和空白布局之间切换。这是我的(剥离的)控制器代码:

    类TestController扩展了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 speedAction()
    {
        // Do stuff render something
    }
    
    
    public function somethingelseAction()
    {
        // do something else render something.
    }
    

    }

  3. 让您的初始视图呈现目标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>

  4. 设置一些jQuery代码(无论你喜欢)附加到这些'ajaxloader'链接并将结果定位到'testresults'div。这是一些基本的JS:

    <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>

  5. 点击所有具有“ajaxloader”类的链接将通过ajax加载并放入'testresults'div。

答案 1 :(得分:0)

如果您的网页导致部分淡出,那么您必须使用JavaScript(或CSS动画或IE旧的,可怕的适当性,meta标记)。

我会使用JavaScript通过AJAX获取视图,并将其加载到页面上的元素中。