Отправка формы Opencart 3 через ajax

102
14 мая 2021, 10:00

как вернуть сообщение пользователю(вывести в форме отправки), при отправке формы?

<div id="form-one-pay" class="white-popup mfp-hide w-product-one">
    <form class="sendOneClick" id="callAdd" action="" method="post">
        <div class="white-content">
            <div class="white-header">
                <p class="modal-title-popup bold">Покупка в один клик</p>
            </div>
            <div class="white-body">
                <p class="white-description">
                    Закажите звонок оператора и мы оформим ваш заказ, узнав детали
                </p>
                <div class="city__box">
                    <p>Ваш город</p>
                    <div class="city-select">
                        <div class="city-select_active">
                            <p class="active_city"><span>Москва</span> <svg><use xlink:href="#carret"></use></svg></p>
                        </div>
                    </div>
                </div>
                <input type="hidden" name="city" value="Москва">
                <input type="hidden" name="product" value="{{ heading_title }}">
                <input type="phone" name="name" required="" value="" placeholder="Введите ваш телефон">
                <button type="button" class="btn-red one-click-send">Купить</button>
            </div>
        </div>
    </form>
</div>
<script type="text/javascript"><!--
    $('.one-click-send').on('click', function() {
        $.ajax({
            url: 'index.php?route=custom/modal/sendOneClick',
            type:     "POST",
            dataType: "html",
            data: $(".sendOneClick").serialize(),
            success: function(data) {
                alert(data);
            },
            error: function(xhr, ajaxOptions, thrownError) {
                alert(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText);
            }
        });
    });
    //--></script>

контроллер

class ControllerCustomModal extends Controller {
    public function sendOneClick(){
        if (($this->request->server['REQUEST_METHOD'] == 'POST')) {
            $this->load->model('custom/custom');
            $data['subject'] = sprintf('Заказ в 1 клик');
            $data['city'] = $this->request->post['city'];
        $this->session->data['success'] = 'все супер';
        $this->model_custom_custom->sendOneClick($data);
        }
    }
}

модель отправки

class ModelCustomCustom extends Model {
    public function sendOneClick($data) {
        // send email notification to store admin
        $mail = new Mail();
        $mail->protocol = $this->config->get('config_mail_protocol');
        $mail->parameter = $this->config->get('config_mail_parameter');
        $mail->smtp_hostname = $this->config->get('config_mail_smtp_hostname');
        $mail->smtp_username = $this->config->get('config_mail_smtp_username');
        $mail->smtp_password = html_entity_decode($this->config->get('config_mail_smtp_password'), ENT_QUOTES, 'UTF-8');
        $mail->smtp_port = $this->config->get('config_mail_smtp_port');
        $mail->smtp_timeout = $this->config->get('config_mail_smtp_timeout');
        $mail->setTo($this->config->get('config_email'));
        $mail->setFrom($this->config->get('config_email'));
        $mail->setSender(html_entity_decode($this->config->get('config_name'), ENT_QUOTES, 'UTF-8'));
        $mail->setSubject($data['subject']);
        $mail->setText($data['city']);
        $mail->send();
    }
}
Answer 1

Класс Mail() опенкарта дёргает стандартную php-функцию mail(), которая возвращает true/false. Важно помнить, что:

 * It is important to note that just because the mail was accepted for delivery,
 * it does NOT mean the mail will actually reach the intended destination.

В ControllerCustomModal:

...
return $this->model_custom_custom->sendOneClick($data) // вернёт true/false;

В файле представления:

...
success: function(data) {
    let statusMsg = 'Некий мессадж о Неудачной отправке письма';
    if(data) { // потому, что удачное завершение ajax-запроса не гарантирует отправку письма
        statusMsg = 'Некий мессадж о Удачной отправке письма';
    }
    $('#form-one-pay').append('<span>' + statusMsg + '</span>');
READ ALSO
requestFeature() must be called before adding content

requestFeature() must be called before adding content

Программа выбрасывает исключение androidutil

144
Проблема с использованием цикла for

Проблема с использованием цикла for

Всем привет! Я только новичок и пытаюсь разобраться с циклом for в Java

76