Задать вопрос
@Titamik
Я тут задаю самые глупые вопросы..

Корректный mvc модуль обработки формы ajax?

Задача: есть форма, данные которой нужно передать по Ajax для дальнейшей обработки. Вопрос состоит в том, как корректно реализовать функционал подобного модуля (как корректно распихать указанный код, с точки зрения mvc - какой url указывать в Ajax запросе, ведь, как я понимаю, просто положить обработчик в корень сайта - это костыль). Никаких обращений в бд не нужно.
Форма:
<form id="form">
	<input type="text" name="name">
	<input type="text" name="surname">
        <input type="submit">
</form>

Ajax-запрос обработки формы:
$("#form").on("submit", function(){
	$.ajax({
		url: 'непанятна',
		method: 'post',
		dataType: 'html',
		data: $(this).serialize(),
		success: function(data){
			$('#message').html(data);
		}
	});
});

Указанный ниже код, я так понимаю, можно запихнуть во view (в частности, 'catalog\view\theme\default\template\module\myModul.tpl')
Обработчик:
$res = '';
foreach($_POST as $key => $value) { 
$res += $key.' :  '.$value;
 } 
foo($res);


P.S. Буду благодарен, если подскажете где можно посмотреть материал, где можно посмотреть реализацию модуля "helloworld" (грубо говоря пустой модуль), вместе с регистрацией контроллера и отображением в админке, ибо в данной задаче необходимый функционал - вкл/вкл модуля и его добавление в сайдбар или футер сайта.
  • Вопрос задан
  • 70 просмотров
Подписаться 2 Простой Комментировать
Решения вопроса 1
lazuren
@lazuren
Все верно, вам нужно ваше решение оформлять в виде модуля.
Весь 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 тут
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы