SuiteCRM中关闭单个View的缓存方法

在SuiteCRM中如果在系统设置中关闭了开发者模式,那么在网站系统的DetailView和EditView都会使用缓存的方式来生成模板

这将会导致在自定义的View控制器中只能显示首次生成的模板页面,不能够动态生成

解决方案:

custom/include中扩展并覆写TemplateHandler和CustomDetailView类

以下是DetailView视图动态生成模板页面的方法

新建文件custom/include/TemplateHandler/CustomTemplateHandler.php进行TemplateHandler类的覆写,并填写以下代码:

// custom/include/TemplateHandler/CustomTemplateHandler.php

require_once 'include/TemplateHandler/TemplateHandler.php';

class CustomTemplateHandler extends TemplateHandler

{

  public $disableCheckTemplate = false;

  /**

  * Override checkTemplate *

  @see TemplateHandler::checkTemplate()

  */

  function checkTemplate($module, $view, $checkFormName = false, $formName = '')

  {

    if ($this->disableCheckTemplate === true)

    {

      return false;

    }

    return parent::checkTemplate($module, $view, $checkFormName, $formName);

  }

}

接着,在custom/include/DetailView/CustomDetailView.php新建CustomDetailView类:

// custom/include/DetailView/CustomDetailView.php

require_once('include/DetailView/DetailView2.php');

class CustomDetailView extends DetailView2

{

/*

* Override setup

* @see DetailView2::setup()

*/

public function setup($module, $focus, $metadataFile = null, $tpl = 'include/DetailView/DetailView.tpl')

{

   parent::setup($module, $focus, $metadataFile, $tpl);

  require_once 'custom/include/TemplateHandler/CustomTemplateHandler.php';

  $this->th = new CustomTemplateHandler();

  $this->th->ss = $this->ss;

}

}

最后在view.detail.php中的preDisplay()和Display()添加以下代码:

require_once('include/MVC/View/views/view.detail.php');

class AccountsViewDetail extends ViewDetail

{

/**

* Override preDisplay *

@see ViewDetail::preDisplay() */

public function preDisplay() {

$metadataFile = $this->getMetaDataFile();

require_once 'custom/include/DetailView/CustomDetailView.php';

$this->dv = new CustomDetailView();

$this->dv->ss = &$this->ss;

$this->dv->setup($this->module, $this->bean, $metadataFile, get_custom_file_if_exists('include/DetailView/DetailView.tpl'));

}

/**

* Override display *

@see ViewDetail::display()

*/

public function display()

{

$this->dv->th->disableCheckTemplate = true;

parent::display();

}

}



该解决方案原链接:

Disable cache in one View - Developer Collaboration - SuiteCRM

/**

你可能感兴趣的:(SuiteCRM中关闭单个View的缓存方法)