Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Не работает самописная форма обратной связи


Recommended Posts

Добрый день всем!

На готовый платный шаблон ОС 2.3 я прописал свою самописную форму обр связи. Абсолютно рабочая, проверено много раз на Вордпрессе.

НО на опенкарт я форму вставляю впервые. Естественно, на работает)

В настройках  магазина стоит почта админа с доменным именем  [email protected]

Ту же почту поставил в отправителя в обработчике формы.

Проверить отправку стандартной почты в магазине не могу - магазин на стадии завершения, оформление заказа пока не работает, других форм обр связи нет.

Тех служба хостинга отвечает, что никаких ограничений на почту у них не стоит, и в логе видно, что письма даже не пытаются отправляться на указанные мной адреса.

Форма form action="success.php", путь к success.php прописан правильно, обработчик формы ajax.

в настройках почты только  Mail

Ничего в контроллерах не менял, подозреваю, что надо)

Помогите, пожалуйста.

Спасибо всем, кто ответит!

Змінено користувачем mccol
Надіслати
Поділитися на інших сайтах


ну,  а где форма, аякс, обработчик php?

без этого,  долго будете ждать совета

Надіслати
Поділитися на інших сайтах

вынужден удалить некоторый код из-за авторских прав, там где
 

Цитата

...авторский код, рабочий)

<form action="/catalog/view/theme/theme765/success.php" class="js-form" id="popupResult">
        <input type="text" name="name" required placeholder="Введите имя"  class="form-control form__field">
        <input type="text" name="email" required placeholder="Введите E-mail"  class="form-control form__field">
        <input type="text" name="tel" required placeholder="Введите телефон"  class="form-control form__field">

        <button class="btn__red__bottom act font-bold" data-submit>Принять участие в Марафоне!</button>

 </form>

<script type="text/javascript" src="https://ajax.aspnetcdn.com/ajax/jquery.validate/1.14.0/jquery.validate.js"></script>


$(document).ready(function() {
    $('[data-submit]').on('click', function(e) {
        e.preventDefault();
        $(this).parent('form').submit();
    })
    $.validator.addMethod(
        "regex",
        function(value, element, regexp) {
            var re = new RegExp(regexp);
            return this.optional(element) || re.test(value);
        },
        "Please check your input."
    );

    // Функция валидации и вывода сообщений
    function valEl(el) {

        el.validate({
            ...авторский код, рабочий)
            },

            // Начинаем проверку id="" формы
            submitHandler: function(form) {
                $('#loader').fadeIn();
                var $form = $(form);
                var $formId = $(form).attr('id');
                switch ($formId) {
                    // Если у формы id="goToNewPage" - делаем:
                    ...авторский код, рабочий)
                        break;
                    // Если у формы id="popupResult" - делаем:
                    ...авторский код, рабочий)
                        break;
                }
                return false;
            }
        })
    }

    // Запускаем механизм валидации форм, если у них есть класс .js-form
    $('.js-form').each(function() {
        valEl($(this));
    });
    
});

 

Змінено користувачем mccol
Надіслати
Поділитися на інших сайтах


35 минут назад, mccol сказал:

вынужден удалить некоторый код из-за авторских прав, там где

 

Эм..а этот Ваш "авторский код" на боевом сайте тоже скрывать будете? 

Поверьте на форуме Ваш код никому не нужен, и раз Вы уже пишите о помощью стоит выкладывать все файлы, в том числе и success.php

 

А если по делу, то 

35 минут назад, mccol сказал:

<form action="/catalog/view/theme/theme765/success.php" class="js-form" id="popupResult">

Вы отправляете форму на обычный php файл, который не связан с OC(хотя только Вам известно что в нем происходит)

Если хотите чтобы слалось как положено, чтобы почта и все настройки бралась из админки ОС нужно создавать в контроллере свой файл.

 

Примерно вот так у Вас должен выглядеть ajax запрос

$('индентификатор формы').submit(function(e){
		var form = $(this);
	    $.ajax({
	     	url: 'index.php?route=common/send_email',
	      	type: 'post',
	      	data: form.serialize(),
	      	success: function(data) {
	        	...
	    	}
	    })
	    e.preventDefault();
	})

Где index.php?route=common/send_email - путь к файлу обработчика, расположение файла catalog/controller/common/send_email.php

 

Ну и сам файл send_email.php  выглядит вот так

<?php  
class ControllerCommonSendEmail extends Controller {
	public function index() {

		if ($this->request->server['REQUEST_METHOD'] == 'POST') {

			$subject = 'Текст заголовка';
			$text = 'Текс сообщения';

			$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(html_entity_decode($subject, ENT_QUOTES, 'UTF-8'));
			$mail->setText($text);

			$mail->send();
		}
	}
		
}

 

Думаю, что не составит труда разобраться и подставить свои данный в отправку.

А если тяжело будет понять как получить данные в контролере, то посмотрите как это сделано в файле catalog/controller/information/contact.php

Надіслати
Поділитися на інших сайтах

Огромное спасибо за ответ! Конечно, я понимаю, что "мой" код тут никому не нужен, просто я получил его от структуры, от которой очень зависим, а там очень жестко относятся к таким вещам...

 

подскажите, пожалуйста, как мой кусок кода

$(document).ready(function() {
    $('[data-submit]').on('click', function(e) {
        e.preventDefault();
        $(this).parent('form').submit();
    })

соединить с вашим?

$('индентификатор формы').submit(function(e){
		var form = $(this);
	    $.ajax({
	     	url: 'index.php?route=common/send_email',
	      	type: 'post',
	      	data: form.serialize(),
	      	success: function(data) {
	        	...
	    	}
	    })
	    e.preventDefault();
	})

ибо дьявол скрывается в деталях)

спасибо!

Надіслати
Поділитися на інших сайтах


2 часа назад, mccol сказал:

как мой кусок кода

 

2 часа назад, mccol сказал:

соединить с вашим?

никак

подставить в код @Bn174uk  идентификатор формы и  в success дописать что нужно

Надіслати
Поділитися на інших сайтах

3 часа назад, mccol сказал:

...авторский код, рабочий)

да, вот это по взрослому

Надіслати
Поділитися на інших сайтах

ОГРОМНОЕ СПАСИБО ! Разобрался, все работает.

Только не могу понять, для чего нужно это поле и что туда можно вставлять вместо точек? Все данные из формы передаю через php. Оставил пустым, все работает.

Подскажите, пожалуйста, уже просто интересно.

success: function(data) {
	        	вот тут...
	    	}

 

Змінено користувачем mccol
Надіслати
Поділитися на інших сайтах


2 часа назад, mccol сказал:

для чего нужно это поле и что туда можно вставлять вместо точек?

в data,  будет ответ с сервера.

на сервере обрабатываете данные, если какие ошибки, отравляете их на клиент и выводите.

или можно к примеру вывести сообщение, типа - все ок.

 

Надіслати
Поділитися на інших сайтах

Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.