在SuiteCRM中如果在系统设置中关闭了开发者模式,那么在网站系统的DetailView和EditView都会使用缓存的方式来生成模板
这将会导致在自定义的View控制器中只能显示首次生成的模板页面,不能够动态生成
解决方案:
在custom/include中扩展并覆写TemplateHandler和CustomDetailView类
以下是DetailView视图动态生成模板页面的方法
新建文件custom/include/TemplateHandler/CustomTemplateHandler.php进行TemplateHandler类的覆写,并填写以下代码:
// custom/include/TemplateHandler/CustomTemplateHandler.php
<?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
<?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()添加以下代码:
<?php
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
/**