Все верно, вам нужно ваше решение оформлять в виде модуля.
Весь HTML (twig или tpl) который относится к front-end'у и JS код (в вашем случае ajax) нужно хранить в:
catalog/view/theme/default/template/extension/module/НАЗВАНИЕ_МОДУЛЯ.tpl
Ваш Ajax должен обращаться к методу контроллера который должен храниться в:
catalog/controller/extension/module/НАЗВАНИЕ_МОДУЛЯ.php
и выглядеть это должно примерно так:
AJAX
$("#form").on("submit", function(){
$.ajax({
url: 'index.php?route=extension/module/НАЗВАНИЕ_МОДУЛЯ/НазваниеМетода&параметр=...',
method: 'post',
dataType: 'html',
data: $(this).serialize(),
success: function(data){
$('#message').html(data);
}
});
});
PHP
<?php
class ControllerExtensionModuleНазваниеМодуля extends Controller {
public function index() {
//...
}
public function НазваниеМетода() {
//как то обрабатываете и возвращаете в json формате...
$this->response->addHeader('Content-Type: application/json');
$this->response->setOutput(json_encode($json));
}
}
Так же не забывайте про языковые файлы:
catalog/language/ru-ru/extension/module/НАЗВАНИЕ_МОДУЛЯ.php
И все тоже самое для админки:
admin/view/template/extension/module/НАЗВАНИЕ_МОДУЛЯ.twig
admin/controller/extension/module/НАЗВАНИЕ_МОДУЛЯ.php
admin/language/ru-ru/extension/module/НАЗВАНИЕ_МОДУЛЯ.php
Почитать про создание модулей
тут или в целом про кастомизацию OpenCart
тут