【问题标题】:Prevent socialengine from rendering a view (for AJAX)防止社交引擎呈现视图(用于 AJAX)
【发布时间】:2015-12-26 23:12:47
【问题描述】:

默认情况下,SocialENGine 会在每个控制器操作结束时自动呈现视图。如果您使用的是布局,它也会呈现它。这对于普通网页来说很好,但是当您发送 AJAX 响应时,您不需要所有这些。您如何防止 SocialEngine 在逐个动作的基础上自动渲染?使用 ZendFramework,您可以这样做:

$this->_helper->layout->disableLayout();
$this->_helper->viewRenderer->setNoRender(TRUE);

您可以使用一些不错的助手,例如:

$this->_helper->json($data);

... 它将对您的 $data 进行 json_encode,将其与 JSON 标头一起输出并最终死掉,因此从操作返回干净的 JSON 而无需视图渲染,这几乎正是我想要的。

然而,这些解决方案在 SocialEngine 中都不起作用—— $this->_helper 和 $this->view->_helper 似乎总是一个空数组。而 return $this->setNoRender() 只会阻止当前元素渲染,而不是整个页面。

【问题讨论】:

    标签: json ajax layout socialengine


    【解决方案1】:

    在一些默认小部件中,我发现了这个函数调用,它完全抑制了小部件的呈现:

    return $this->setNoRender();
    

    如果您有兴趣,它已在 Engine_Content_Widget_Abstract 中实现。

    最好, 本尼。

    【讨论】:

      【解决方案2】:

      我在小部件控制器的上下文中遇到了这个问题。

      我访问 json() 助手的解决方案是创建并实例化一个扩展抽象 Core_Controller_Action_Standard 的具体类,并公开一个包装方法以在小部件的 Controller.php 文件中发送 json :

      class Widget_MyWidgetAjaxController extends Core_Controller_Action_Standard
      {
          public function sendjson($data) {
              return $this->_helper->json($data);
          }
      }
      

      在 Widget 的控制器中使用如下:

      class Widget_MyWidgetController extends Engine_Content_Widget_Abstract
      {
          public function indexAction() 
          {
              // This is an ajax request to our widget controller
              if ($this->getRequest() && $this->getRequest()->isPost()) {
      
                  // Do whatever processing you need 
                  // [...]
                  $response_data=array('hello','world');
      
                  $ajax = new Widget_TrackablesAjaxController(
                      $this->getRequest(), 
                      new Zend_Controller_Response_Http
                  );
      
                  return $ajax->sendjson($response_data);
              }
          }
      }
      

      我不必显式地禁用Layout() 或setNoRender()。通过 _helper->json() 响应就足够了。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-06-26
        • 2011-08-08
        • 1970-01-01
        • 2013-06-25
        • 2011-05-20
        • 1970-01-01
        • 1970-01-01
        • 2014-08-14
        相关资源
        最近更新 更多