2009-02-19 2 views
1

Я использую jquery в Zend Framework, это моя первая пробная версия. Я уже узнал через another question, что я могу изменить ответ, изменив контекст следующим образом:Zend Framework 'AjaxContent' & ResponseSegmentation problem

$ajaxContext = $this->_helper->getHelper('AjaxContext'); 
$ajaxContext->addActionContext('myaction', 'html'); 
$ajaxContext->initContext(); 

Теперь это помогло, но новая проблема показала:

Моя страница состоит разных ответов и когда я отвечаю на запрос Ajax, меняя Контекст, мои другие ResponseSegments также «думают», что они отправляют Ajax, но это не так. Передний контроллер запрашивает viewcript.ajax.phtml ... что неправильно, он должен быть viewcript.phtml (существует).

ответ

1

В то же время я понял, как решить эту проблему, и потому что я думаю, что другие будут сталкиваться с той же проблемой в будущем, я отвечу на свой вопрос здесь:

В моей ActionSetup.php (или bootstrap.php если настройка действий не разделена), мне нужно было убедиться, что действия только толкаются в стек действия, если в запросе не было XmlHttpRequest.

Единственное, что не хватало, если заявление:

if (!$request->isXmlHttpRequest()) 

Все это выглядит так:

/** 
* Front Controller plugin to set up the action stack. 
* 
*/ 
class Project_Controller_Plugin_ActionSetup extends Zend_Controller_Plugin_Abstract 
{ 
    public function dispatchLoopStartup(Zend_Controller_Request_Abstract $request) 
    { 
     if (!$request->isXmlHttpRequest()) 
     { 
      $front = Zend_Controller_Front::getInstance(); 
      if (!$front->hasPlugin('Zend_Controller_Plugin_ActionStack')) 
      { 
       $actionStack = new Zend_Controller_Plugin_ActionStack(); 
       $front->registerPlugin($actionStack, 97); 
      } else 
      { 
       $actionStack = $front->getPlugin('Zend_Controller_Plugin_ActionStack'); 
      } 

      $menuAction = clone ($request); 
      $menuAction->setActionName('menu') 
      ->setControllerName('index'); 
      $actionStack->pushStack($menuAction); 

      $userlogAction = clone ($request); 
      $userlogAction->setActionName('userlog') 
      ->setControllerName('index'); 
      $actionStack->pushStack($userlogAction); 

      //etc. 
     } 
    } 
}