1. Приветствуем Вас на неофициальном форуме технической поддержки XenForo на русском языке. XenForo - коммерческий форумный движок от бывших создателей vBulletin, написанный на PHP.

1.5.6 Форма заявки по типу "Обратной связи"

Тема в разделе "Вопросы по стилям, изменения в CSS и шаблонах", создана пользователем korelly, 27.05.2016.

Загрузка
  1. korelly

    korelly Новичок

    Регистрация:
    25.05.16
    Сообщения:
    2
    Симпатии:
    0
    Версия XF:
    1.5.6
    Добрый день!
    Помогите с создание формы заявки (чтобы человек мог оставить свое имя/телефон и эта информация упала мне на почту).

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

    Дальше, нашел два пути решения:
    1. Пишем форму для ввода данных:
    Код:
    <form action="action.php" method="post" enctype="multipart/form-data">
        Ваше имя: <input type="text" name="name" /><br />
        Ваша фамилия: <input type="text" name="surname" /><br />
        Ваш телефон: <input type="text" name="phone" /><br />
        <input type="submit" value="Отправить форму" />
    </form>
    
    Дальше, вставляем в action.php следующий код:
    Код:
    //Принимаем постовые данные
    $name=$_POST['name'];
    $surname=$_POST['surname'];
    $phone=$_POST['phone'];
    
    //Тут указываем на какой ящик посылать письмо
    $to = "email@yandex.ru";
    //Далее идет тема и само сообщение
    $subject = "Тема письма";
    $message = "
    Письмо отправлено из моей формы.<br />
    Пользователь указал:<br />Имя: ".htmlspecialchars($name)."<br />
    Фамилия: ".htmlspecialchars($surname)."<br />
    Телефон: ".htmlspecialchars($phone);
    $headers = "From: MySite.ru <site-email@mysite.ru>\r\nContent-type: text/html; charset=utf8 \r\n";
    mail ($to, $subject, $message, $headers);
    
    Но проблема в том, что пользователь попадает на action.php и остается там. А мне нужно, чтобы страница не перезагружалась, а просто выводилось оповещение - "Ваша заявка отправлена".

    2. Второй вариант такой - пишем форму без form action:
    Код:
    <form id="form">
    <input type="text" name="name" required="required"/>
    <input type="text" name="phone" required="required"/>
    <input type="submit" value="Заказать звонок"/>
    </form>
    
    В отдельном php файле прописываем отправку письма:
    Код:
    <?
    if((isset($_POST['name'])&&$_POST['name']!="")&&(isset($_POST['phone'])&&$_POST['phone']!="")){ //Проверка отправилось ли наше поля name и не пустые ли они
            $to = 'mail@yandex.ru'; //Почта получателя, через запятую можно указать сколько угодно адресов
            $subject = 'Обратный звонок'; //Загаловок сообщения
            $message = '
                    <html>
                        <head>
                            <title>'.$subject.'</title>
                        </head>
                        <body>
                            <p>Имя: '.$_POST['name'].'</p>
                            <p>Телефон: '.$_POST['phone'].'</p>                        
                        </body>
                    </html>'; //Текст нащего сообщения можно использовать HTML теги
            $headers  = "Content-type: text/html; charset=utf-8 \r\n"; //Кодировка письма
            $headers .= "From: Отправитель <from@example.com>\r\n"; //Наименование и почта отправителя
            mail($to, $subject, $message, $headers); //Отправка письма с помощью функции mail
    }
    ?>
    
    И для того, чтобы форма не перезагружала страницу пишем скрипт (как я понял, пишем его в тот шаблон, где у нас прописана форма):
    Код:
    <script type="text/javascript">
    $(document).ready(function(){
        $("#form").submit(function() { //устанавливаем событие отправки для формы с id=form
                var form_data = $(this).serialize(); //собераем все данные из формы
                $.ajax({
                type: "POST", //Метод отправки
                url: "send.php", //путь до php фаила отправителя
                data: form_data,
                success: function() {
                       //код в этом блоке выполняется при успешной отправке сообщения
                       alert("Ваше сообщение отпрвлено!");
                });
        });
    });    
    </script>
    
    Но тут другая проблема - при отправлении формы XF выдает ошибку: Обнаружено нарушение безопасности. Пожалуйста, нажмите "Назад" в браузере, обновите страницу и попробуйте снова.

    Есть еще третий вариант - взять за основу форму "Обратной связи" и на ее основе сделать форму заявки. Но я не разобрался, что за что в ее коде отвечает.

    Понимаю, что где-то туплю и решение очень близко. Есть идеи, как это все можно реализовать?
     
  2. infis

    infis Местный

    Регистрация:
    27.06.11
    Сообщения:
    5 966
    Симпатии:
    3 548
    Версия XF:
    1.5.9
    Есть. Называется "написать плагин". И используются штатные средства самого движка, а не колхозится велосипед, с помощью которого Вам еще и форум хакнут. В инете достаточно уроков, как сделать простенький плагин. А Вам сложный и не надо. Если сами не справляетесь, то закажите работу специалисту. По идее плагин простой, поэтому стоимость должна быть адекватной.
     
  3. korelly

    korelly Новичок

    Регистрация:
    25.05.16
    Сообщения:
    2
    Симпатии:
    0
    Версия XF:
    1.5.6
    С превеликой радостью так бы и поступил - была бы возможность =)
    Но сделать нужно прямо сейчас, этими средствами и на коленке. В самом ближайшем будущем - перепишу под плагин, но пока - довольствуемся малым.

    Есть у кого-нибудь еще варианты?
     

Поделиться этой страницей