Всем привет!
Ну что, можете меня поздравить!
Доработал я свою форму, теперь настраивать и использовать, думаю, будет удобно и понятно!?
А сейчас я буду много писать
Итак, сразу даю ссылку на скачивание обновленной формы обратной связи.
Форму вынес в отдельный файл, который можете подключить к любому шаблону. Для пример подключения в архиве есть шаблон template-con.php (кстати кому нужно - посмотрите как можно подключать Yandex-карты без привязки к аккаунту в шаблоне). В шаблоне все прокомментировал, чтоб было понятно что и где.
Для настройки адреса почты и использования капчи настоятельно рекомендую использовать плагин GS Custom Settings, пример страницы настроек можете посмотреть здесь.
Что реализовано на данный момент:
1. Т.к. передача данных по Ajax отличается при использовании вложений от стандартной формы - имеется два файла форм: fbattach.inc.php - форма с вложением, feedback.inc.php - стандартная форма. В шаблоне просто закомментируйте ту форму которая вам не нужна или удалите строку:
<h2>Напишите нам</h2>
<!-- FORM стандартная форма -->
<?php include('feedback.inc.php'); ?>
<!-- END FORM -->
<!-- FORM форма с вложением -->
<!-- <?php include('fbattach.inc.php'); ?> -->
<!-- END FORM -->
по умолчанию активна стандартная форма.
Так же не забудьте поменять пути к файлам формы, я в шаблоне комментарий вставил!
<!-- FORM -->
<!-- для формы с вложением заменить в пути к файлам feedback на fbattach -->
<script>
var recipient_mail = "<?php get_setting('feedback_form','email'); ?>"; // адрес, куда отправлять письма "contact@mail.ru" или из компонента/плагина
</script>
<script src="<?php get_theme_url(); ?>/assets/feedback/js/jquery.validate.js"></script>
<script src="<?php get_theme_url(); ?>/assets/feedback/js/messages_ru.js"></script>
<!-- функция для обновления капчи по клику -->
<script>
function reload_captcha(){
src="<?php get_theme_url(); ?>/assets/feedback/captcha/captcha.php";
if (document.captcha) {document.captcha.src=src+'?rand='+Math.random();}
}
</script>
<script src="<?php get_theme_url(); ?>/assets/feedback/js/form-submit.js"></script>
Для передачи данных с вложением я использую FormData, как передать по другому пока не знаю (не особо силен я в jQuery ), но имейте ввиду что FormData поддерживается только в IE10+ ! Стандартная форма будет работать в любом браузере. Поэтому и сделал такое разделение форм.
Т.к. формы одинаковые, за исключением поля выбора файла, буду пояснять на примере стандартной.
Вообще через указанный плагин можно реализовать автоматическое переключение форм в зависимости от выбора.
Возможно позже сделаю.
2. В форме реализовано включение/отключение капчи через плагин (использую чекбокс):
<?php if (return_setting('feedback_form','captcha')) { ?>
<div class="uk-grid">
<div class="uk-width-1-1">
<label class="uk-form-label" for="f-captcha">Введите число:</label>
<div>
<a href="javascript:void(0)" onclick="reload_captcha()" title="Обновить"><img src="<?php get_theme_url(); ?>/assets/feedback/captcha/captcha.php" name="captcha"/></a>
<input id="f-captcha" type="text" name="norobot" />
</div>
</div>
</div>
<?php } ?>
соответственно укажите свои параметры в этой строке:
<?php if (return_setting('feedback_form','captcha')) { ?>
если не хотите использовать плагин - удалите строки:
<?php if (return_setting('feedback_form','captcha')) { ?>
и
3. Адрес почты, на которую будут отправляться письма, теперь можно указать тремя разными способами. У меня реализовано через плагин. Можно так же вводить через компоненты или ручками, напрямую в шаблоне:
<script>
var recipient_mail = "<?php get_setting('feedback_form','email'); ?>"; // адрес, куда отправлять письма "contact@mail.ru" или из компонента/плагина
</script>
4. Теперь у формы есть конфиг, где можно указать все необходимые данные:
// E-MAIL method of sending messages
$es['smtp_mode'] = 'disabled'; // SMTP enabled or disabled
$es['smtp_host'] = null; // Specify main and backup SMTP servers => 'smtp1.example.com;smtp2.example.com';
$es['smtp_port'] = null; // TCP port to connect => 587;
$es['smtp_secure'] = 'tls'; // Enable TLS encryption, `ssl` also accepted
$es['smtp_username'] = null; // SMTP username => 'user@example.com';
$es['smtp_password'] = null; // SMTP password => 'secret';
// E-MAIL send options
$es['from_mail'] = ''; // адрес почты, с которой идет отправка или из формы => $_POST['email']
$es['from_name'] = 'Администратор'; // имя отправителя или из формы => $_POST['name']
// E-MAIL message options
$es['msg_title'] = 'Email message feedback form';
$es['msg_header'] = 'Информация отправлена с сайта site-name.ru';
$es['msg_header_subject'] = 'Тема сообщения:';
$es['msg_subject'] = 'Сообщение с сайта site-name.ru';
$es['msg_header_sender'] = 'Отправитель:';
$es['msg_header_mail'] = 'E-mail:';
$es['msg_header_phone'] = 'Телефон:';
$es['msg_header_message'] = 'Сообщение:';
$es['msg_header_signature'] = 'С уважнием,<br>Администратор';
У каждой формы свой конфиг, который лежит в папке формы, для примера /assets/feedback/config.php
Пояснение по // E-MAIL send options, указываете свои данные в ' ', например так:
$es['from_mail'] = 'support@site.ru';
а если хотите чтоб подставлялись данные из формы - ставите код из комментария:
$es['from_mail'] = $_POST['email'];
Тема сообщения по умолчанию, на случай если не используется поле для выбора темы сообщения:
$es['msg_subject'] = 'Сообщение с сайта site-name.ru';
msg_header_* - это заголовки соответствующих данных в письме.
Расписывать все не буду, думаю и так должно быть понятно, если нет - спросите позже!
5. Теперь лезть и разбираться в файлы email-send.php и form-submit.js не нужно, все настраивается через конфиг и плагин. Более того, если вы удалите в форме какое-то поле, например "телефон" - в письмо заголовок, информация по телефону не попадет! Обязательным оставил только сообщение. Поэтому можете удалять не нужные поля смело.
6. После успешного/не успешного отправления письма КАПЧА автоматически обновляется. Так же она обновляется по клику на ней.
7. Скрытое поле никуда не делось, поэтому если вы не используете КАПЧУ спам будет отсеиваться через это поле. Включаете КАПЧУ - получаете двойную защиту!
ФУХ, вроде все написал, если что упустил - позже дополню!
Скачивайте, смотрите, тестируйте. Обнаружите ошибки или будут пожелания - пишите в этой теме.
Всем удачи!
С уважением, Алексей
Понравится/пригодится мое решение - скажите спасибо! Значит мои труды не напрасны.
Поблагодарить за помощь можно через
Яндекс!