I have another upgrade safe solution.
If "custom/include/SubPanel/SubPanelDefinitions.php" works for all subpanels, then my solution will only effect on one module.
You have to prepare two custom class:
- CustomSubPanelDefinitions (which extends "include/SubPanel/SubPanelDefinitions.php")
- CustomSubPanelTiles (which extends "include/SubPanel/SubPanelTiles.php")
Then, override function _displaySubPanels() in your view.detail.php.
PHP Code:
function _displaySubPanels() {
if (isset($this->bean) && !empty($this->bean->id) && (file_exists('modules/' . $this->module . '/metadata/subpaneldefs.php') || file_exists('custom/modules/' . $this->module . '/metadata/subpaneldefs.php') || file_exists('custom/modules/' . $this->module . '/Ext/Layoutdefs/layoutdefs.ext.php'))) {
$GLOBALS['focus'] = $this->bean;
require_once ('custom/modules/<YOUR MODULE>/views/CustomSubPanelTiles.php');
$subpanel = new CustomSubPanelTiles($this->bean, $this->module);
echo $subpanel->display();
}
}
CustomSubPanelTiles.php
PHP Code:
require_once ('include/SubPanel/SubPanelTiles.php');
require_once ('custom/modules/<YOUR MODULE>/views/CustomSubPanelDefinitions.php');
class CustomSubPanelTiles extends SubPanelTiles {
function CustomSubPanelTiles(&$focus, $layout_def_key='', $layout_def_override = '') {
parent::SubPanelTiles(&$focus, $layout_def_key, $layout_def_override);
$this->subpanel_definitions = new CustomSubPanelDefinitions($focus, $layout_def_key, $layout_def_override);
}
}
CustomSubPanelDefinitions.php
PHP Code:
require_once('include/SubPanel/SubPanelDefinitions.php');
class CustomSubPanelDefinitions extends SubPanelDefinitions {
function CustomSubPanelDefinitions($focus, $layout_def_key = '', $layout_def_override = '') {
parent::SubPanelDefinitions($focus, $layout_def_key, $layout_def_override);
}
function load_subpanel($name, $reload = false, $original_only = false) {
if (!is_dir('modules/' . $this->layout_defs['subpanel_setup'][strtolower($name)]['module']))
return false;
// CUSTOM CODE
return new aSubPanel($name, $this->layout_defs['subpanel_setup'][strtolower($name)], $this->_focus, $reload, $original_only);
}
}
You can rebuild your aSubPanel inner class in the CustomSubPanelDefinitions.
I hope this can help you.
Pan Jun
Bookmarks