Вариант 1. С объявлением своей функции
Этот 100% рабочий вариант.
В любом файле, где нужно подгрузить контроллер, пишем
.// $this->control('extension/shipping/dostavka'); //вызов своей функции подгрузки контроллера dostavka из директории extension/shipping $cost = $this->controller_extension_shipping_dostavka->calculatecost('delivery','pickup',$price); //обращение к функции контроллера, у которой , например, 3 аргумента ----- //объявление функции подгрузки контроллера public function control($cont) { $file = DIR_APPLICATION . 'controller/' . $cont . '.php'; $class = 'Controller' . preg_replace('/[^a-zA-Z0-9]/', '', $cont); if (file_exists($file)) { include_once($file); $this->registry->set('controller_' . str_replace('/', '_', $cont), new $class($this->registry)); } else { trigger_error('Error: Could not load controller ' . $cont . '!'); exit(); } }
Вариант 2. Только с помощью средств Opencart
Это вариант не всегда работает и я не разобрался по каким причинам
В любом файле, где нужно вызвать функцию контроллера, пишем
$this->load->controller('custom/setting/getValue', array( 'section' => 'availability', // Уникальный индификатор секции 'setting' => 'freeforegions', // Уникальный индификатор поля 'page' => 'shipping_deliboo' // Код формы в админ-панеле ));
где custom — путь к контроллеру setting, а getValue — его вызываемая функция
Допускается чтобы вызываемая функция имела только один аргумент. В данном случае в качестве аргумента указывается массив.