Disable cache in one View

Hi guys,

I would like to suggest an alternative solution, that does not require doing a repair and rebuild

First thing is to extend the TemplateHandler. Can place it in custom/include/TemplateHandler/CustomTemplateHandler.php, for instance.

The code I have here allows you to re-use this custom template handler and enable/disable the template parsing using a field. But you are free to have another solution.



// 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);
    }
}

Then, for your module extend the view you want (Detail or Edit). Leave here the two examples:

DetailView:

First override the core DetailView2



// 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;
    }
}

The add an detail view extension to your module (in this example I’m using is Accounts)

And set the disableCheckTemplate to true when you want.


// custom/modules/Accounts/views/view.detail.php
<?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();
    }

}

For the editview

First override the core EditView2


//  custom/include/EditView/CustomEditView.php

<?php

require_once 'include/EditView/EditView2.php';
class CustomEditView extends EditView
{

    /**
     * Override getTemplateHandler
     * @see EditView::getTemplateHandler()
     */
    protected function getTemplateHandler()
    {
        require_once 'custom/include/TemplateHandler/CustomTemplateHandler.php';
        return new CustomTemplateHandler();
    }
}

The add an edit view extension to your module (in this example I’m using is Accounts)

And set the disableCheckTemplate to true when you want.



<?php

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

class AccountsViewEdit extends ViewEdit
{

    
    /**
     * Override Display
     * @see ViewEdit::display()
     */
    public function display()
    {
        global $current_language;

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

        parent::display();
    }
    
    /**
     * Override getEditView
     * @see ViewEdit::getEditView()
     */
    protected function getEditView()
    {
        require_once 'custom/include/EditView/CustomEditView.php';
        return new CustomEditView();
    }

}

Hope this helps. I think I didn’t miss anything, but if you have problems let me know.

5 Likes