Re: Форма обратной связи без плагинов
Приветствую!
Напишите мне в личку что не получается, что требуется сделать. Порешаем!
Форум для разработчиков сайтов на GetSimple CMS
Регистрация прекращена. Пожалуйста, зарегистрируйтесь на новом форуме.
GetSimple CMS по-русски → PHP, HTML, CSS, jQuery → Форма обратной связи без плагинов
Приветствую!
Напишите мне в личку что не получается, что требуется сделать. Порешаем!
2 pavlexx
Пробую форму на тестовом сайте на локальном сервере (OpenServer). Не использую GS Custom Settings, потому что не понял пока, с чем его едят. Хочу запусть форму, внося ручные правки непосредственно в шаблон, попробовать на чистую, без внесения своими ручонками дополнительных косяков использованием прибамбасов. Автоматика - это потом.
В папку темы закидываю следующее:
папку assets
файл feedback.inc.php
В шаблон страницы обратной связи вставляю код
<?php include('feedback.inc.php'); ?>
В шаблон перед <?php get_footer(); ?> добавляю скрипты
<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>
Из кода файла feedback.inc.php удаляю
<?php if (return_setting('feedback_form','captcha')) { ?>
и
<?php } ?>
В файле config.php вношу изменения в стр.15, эта строка теперь выглядит так:
$es['from_mail'] = 'support@site.ru'; // адрес почты, с которой идет отправка или из формы => $_POST['email']
(кстати, предназначение этой строки мне непонятно. Какой адрес туда вносить? Свой вроде в скрипт выше уже вставлял...)
Заполняю поля, ввожу капчу, отправляю письмо - результат после отправки - на скриншоте. Что я делаю не так?
ЗЫ. Алексей, и еще вопрос: ясно, как отключать капчу, если использовать чекбокс в настройках в админке. А как её отключить ручками, без использования GS Custom Settings?
Приветствую!
За капчу отвечает следующий код:
<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>
Просто удалите его, если не желаете использовать капчу.
Результат у вас такой потому что вы не внимательно прочитали мое описание!
Плагин вы не используете, но при этом оставили следующий код:
var recipient_mail = "<?php get_setting('feedback_form','email'); ?>";
Я же написал в комментарии как правильно указать адрес, если не используете плагин!
Без использования плагина должно быть так:
var recipient_mail = "support@site.ru";
Исправьте как я написал и все у вас заработает!
В config.php почту вы не заполняете или ставите $_POST['email'], чтобы вставлялась сразу почта отправителя. Это не адрес почты на которую идет отправка письма, а адрес с которого письмо отправляется!
А с плагином GS Custom Settings все-таки разберитесь, он вам очень облегчит жизнь!!! Вы потом будете удивляться как раньше без него обходились.
Пробуйте, если что не получится или не понятно - пишите!
2 pavlexx
Убрал код капчи. Далее
var recipient_mail = "<?php get_setting('feedback_form','email'); ?>"
заменил на
var recipient_mail = "support@site.ru";
Результат не изменился. Видимо, что-то где-то я конкретно недопонял. Прокрыжил еще раз - вроде всё сделал по букварю. Я иссяк.
Алексей, вот тут архив с дефолтной темой Кардинал, в которой пробовал, по возможности гляньте опытным взглядом.
А вы так прописали адрес почты:
<script>
var recipient_mail = "support@site.ru";
</script>
?
И еще, вы jQuery подключаете?
Адрес почты прописал так, да. И ваше предположение, Алексей, насчет jQuery, оказалось верным. Подключил скрипт - форма заработала.
Я бы во избежание таких вот мусорных постов, как мои предыдущие, в шапке темы указал, что для работы формы нужно подключение скрипта jQuery. В каких-то шаблонах он уже подключён, а в каких-то ведь придется и ручками. Поверьте, это далеко не для всех аксиома.
Ну, первый этап пройден :) Дальше буду разбираться с GS Setting и пробовать уже с ним.
ЗЫ. И еще хочу разобраться с мылами, используемыми в вашей форме.
Вот это,
var recipient_mail = "support@site.ru";
это, если я правильно понял, мыло, на которое приходит сообщение, т.е. мое мыло, мыло админа сайта, ну или кто там должен получить сообщение с формы обратной связи.
А вот в стр.15 в файле config.php - это что за мыло?
$es['from_mail']= ''; // адрес почты, с которой идет отправка или из формы => $_POST['email']
Где, в каком месте письма это мыло отображается?
У меня в шаблоне сейчас эта строчка выглядит именно так, т.е. контента между кавычками нет.
И стр.16,
$es['from_name'] = 'Администратор'; // имя отправителя или из формы => $_POST['name']
В письме контента этого поля я не нашел (кроме "С уважением,<br>Администратор", но это не оно)
Такие вот вопросы возникли.
В целом же, Алексей, первые впечатления от формы сугубо положительные.
Основной плюс - автономность, отсутствие привязки к капчевым сервисам.
Второе - возможность полной настройки внешнего вида.
Третье - легкость установки, даже если учесть, что это не плагин. Свою возню за трудность я не считаю, один раз разобраться - после этого установка - дело пяти минут.
Четвертое - вариабельность. Капча/без капчи, с аттачем файлов/без этого, ручками прописывать/через плагин GS Setting - это здорово. Окончательно мнение сложится, конечно, когда разберусь досконально, но даже сейчас всё очень и очень нравится.
Спасибо вам за труд и за то, что щедро поделились его результатами :)
Пожалуйста!
А про jQuery я не стал писать, т.к. на моем тестовом сайте да и в прилагаемых файлах есть подключение этой библиотеки!
Про адрес в конфиге - этот адрес почты вставляется в письме в поле "отправитель".
Вы попробуйте заполнить эту строку и потом посмотрите внимательно пришедшее письмо и все станет понятно.
По настройке GS Custom Settings посмотрите пример на скрине, который я в посте размещал.
Разобрался с GS Custom Settings, попробовал весь комплект в сборе. Красота. Субъективно - форма работает более шустро, чем в плагине getsimple_contact, я имею ввиду время появление сообщений об отправке или ошибках после нажатия Submit. Возможно, это связано с тем, что у него сторонняя капча, а в вашем скрипте локальная. Но скорость работы радует.
Алексей, еще раз спасибо за отличный скрипт, наконец-то появилась адекватная и легкая полноценная замена плагину getsimple_contact. Лично я буду использовать в работе именно ваш скрипт.
ЗЫ. Касаемо GS Custom Settings - пока всем рекомендую использовать версию 0.6, т.к. 0.6.1 и 0.6.2 глючат. Тут об этом подробней.
Спасибо за отзыв!
Над формой еще работаю и возможно скоро появится новая версия.
Удачи вам в ваших проектах!!!
Приветствую всех!
В общем обновил я свою форму, выкладываю для теста и оценки работы новую версию!
1. Перешел на новый валидатор: jQuery Form Validator
Этот валидатор хорош тем, что можно прямо в шаблоне формы можно настроить под свои нужды проверку данных и не нужно лезть в js и настраивать. Все примеры по настройке найдете на сайте валидатора.
Для того, чтобы вы могли сами обновлять валидатор - разместил его в отдельной папке, т.ч. для обновления нужно просто скопировать с заменой новые файлы.
Возможности валидатора очень радуют! Например в поле Ваше имя я настроил чтобы каждое слово автоматически начиналось с заглавной буквы. Можно через параметр data-validation-help="" указать подсказку, которая будет появляться при получении полем фокуса. И еще много других возможностей!
Некоторые правки (если не устраивает настроенная мной проверка) все-таки нужно сделать, но и здесь я облегчил работу: в файле form-submit.js прописал строки и закомментировал.
2. Я решил отказаться от поддержки старых браузеров, в частности IE<10 версии, и объединить в одной форме все предыдущие наработки. Настройку формы реализовал через плагин GS Custom Settings, в архиве с формой лежит файл feedback_form_data.json с настройками, просто импортируйте его. В настройках можно задать адрес почты для писем, использовать или нет капчу, использовать или нет вложение файлов.
3. Теперь обрабатывается только та форма в которой прописан класс ajax-form!
Если будете переделывать форму под себя, то id полей обязательно сохраните для корректной работы скрипта.
Конфиг для настройки остался прежний.
4. Форму настроил так, что пока посетитель не заполнит правильно все обязательные поля - кнопка Отправить не активна, для этого в форму добавлен класс toggle-disabled! Внимательно посмотрите шаблон перед тем как будете править!
Проверка данных при такой реализации проходит налету, по мере заполнения полей.
Опять таки это все можно настроить под себя, используя возможности валидатора!
5. Проверка прикрепляемого файла на правильность расширения и размера проходит на стороне клиента и сразу же выдается предупреждение в случае ошибки. Настроил проверку популярных файлов.
6. Пример стилизации формы можете посмотреть в файле form-validator/theme-default.css
Еще раз хочу обратить внимание на то, что если вы хотите воспользоваться настройками формы из админки - вам необходимо установить плагин GS Custom Settings!
Работу формы можно посмотреть на тестовом сайте, для проверки формы сообщение будут отсылаться на адрес, который вы укажете в форме.
Скачивайте, тестируйте, делитесь своим мнением и пишите об ошибках!
нельзя ли как-то сделать, чтобы было видно имя вложенного файла, и джифки почему-то не берет
Имя вложенного файла видно при наведении на кнопку. А вообще это стилизация UiKit, можно и стандартное поведение сделать!
Олег, имеешь ввиду jpg? Только что пробовал - все норм.
ну так в настройках их нет вот и не берет! Там же написано какие файлы можно прикрепить!
Всем привет!
Специально для тех, кому не нравится, что не отображается имя прикрепляемого файла - доработал немного форму.
Теперь после выбора вложения, под кнопкой, отображается имя файла!
Архив с формой и тестовый сайт обновил.
вот и славно
Всем привет!
Дело было вечером - делать было нечего... Вот и доработал форму!
1. Изменил логику формирования письма. Теперь в форму можно добавлять полей столько - сколько вам нужно!
Добавляйте поля стандартно, задавая свои ID, NAME и параметры валидации, например:
<input type="text" id="f-date" name="Data" class="" data-validation="date required" data-validation-format="dd/mm/yyyy" placeholder="Введите дату">
Жестко привязанными к ID и NAME остаются только те поля, которые присутствуют сейчас в форме.
Т.е. удалять вы их можете, но при добавлении обратно ОБЯЗАТЕЛЬНО пишите те ID и NAME, которые прописаны у меня в форме!!!
2. Изменил вид сообщения в связи с изменением работы скрипта и логики формирования письма.
Теперь сообщение формируется в виде таблицы по принципу: значение <name> поля | value поля
Поэтому, если нужно чтобы в письме отображались параметры на русском - задавайте значение параметра name на кириллице, например:
<input type="text" id="f-data" name="Дата" ...>
3. Если вы не укажете элемент для вывода имени прикрепляемого файла
<p id="f-filename" class="uk-form-help-block uk-text-small"></p>
то этот блок создается автоматически и добавляется в конец родительского контейнера.
4. Сама форма особо не поменялась, за исключением одного параметра:
... action="<?php get_theme_url(); ?>/assets/form/" ...
для защиты от спама - убрал имя файла, отвечающего за отправку письма. В конце пути к каталогу с формой обязательно ставьте "/".
5. Если убрать в форме класс toggle-disabled - включается обычное поведение формы и валидации, если оставить этот класс - кнопка Отправить будет заблокирована, пока не будут правильно заполнены все обязательные поля! Для вкл/выкл этой функции теперь не нужно править js!
Тестовый сайт и архив с формой обновил!
что-то не нашел английского языка для валидатора. или он где-то по умолчанию написан
если я заменю классы на бутсраповские, форма работать не перестанет?
У вас есть несколько возможностей перевести сообщения об ошибках на нужный вам язык:
1. В файле form-submit.js есть параметр lang: 'ru', отвечающий за язык сообщений. Сами языковые файлы лежат в папке валидатора в lang. Если закомментировать этот параметр - сообщения будут выводиться на английском языке (по умолчанию). Либо укажите нужный вам язык, например lang: 'de',
2. Вы можете при верстке формы указать свое сообщение об ошибке через параметр
data-validation-error-msg="Ваше сообщение об ошибке"
В новой версии валидатора появится поддержка еще большего кол-ва языков!
На счет Bootstrap - этот валидатор как раз и разрабатывается с поддержкой этого фреймворка! У него даже классы Bootstrap применяются для стилизации. Посмотрите внимательно http://www.formvalidator.net/index.html … on_styling
В файле form-submit.js я сделал комментарии.
Форму можете переделать под свой фреймворк. Классы которые я использую для валидации и стилизации совсем немного (причем часть из них добавляется динамически, скриптом):
ajax-form - необходимо добавить в саму форму (<form id="feedback-form" ... class="toggle-disabled ajax-form" ...>), без этого класса форма проверяться и отправляться не будет!
toggle-disabled - необходимо добавить в форму для блокировки кнопки <Отправить> пока не заполнены поля
form-result-error - для стилизации сообщения об ошибке при отправке (выводится в <div id="form-result-send" class="form-result-ok"></div>)
form-result-ok - для стилизации сообщения при успешной отправке (смотрите выше)
valid - для стилизации правильно заполненных полей
uk-form-danger - для стилизации сообщений об ошибке при заполнении полей (класс UiKit)
Если хотите использовать свои классы - можете поменять их в файле form-submit.js.
то есть сообщения об ошибках можно тоже вынести в настройки плагина GS Custom Settings - это радует еще больше
это позволит использовать вашу форму и для сайтов с другими языками без необходимости отсылать пользователей к файлам
еще бы как-то config.php тоже сделать доступным для GS Custom Settings
А никак не сделать!
Формат записи настроек разный и хранятся в разных местах, да и настройки считываются по разному. Только если сделать страницу настроек в GS Custom Settings и потом считывать их для отправки письма.
Но тогда нужно жестко зафиксировать названия полей с настройками, чтоб потом по их названию считывать нужные установки.
Просто, как я понял, не все пользуются этим плагином - вот и остановился пока на таком варианте.
Всем привет!
ЭХ, опять придется много писать, а вам много читать!
Озадачил меня Олег olsv64 таким вопросом: а как использовать на странице несколько моих форм?
Пришлось подумать... и в очередной раз доработать форму.
Теперь вы можете располагать несколько форм на одной странице (например, простая форма в футере и на самой странице контактов более развернутая) и все они должны корректно обрабатываться!
Главное не забудьте назначать каждой форме и ее элементам разные ID!
И так, по порядку:
1.) Теперь привязки к ID нет и вы можете использовать свои значения.
2.) Та форма, которая сейчас у меня настроена - стандартная форма с привязкой NAME к конфигу и обработчику. Специально сделал значения NAME с заглавной буквы. Вы можете использовать и свои значения, но тогда значения заголовков для письма из конфига не будут браться. Так же значения "Name" и "Email" используются для формирования заголовка письма. Поэтому желательно использовать те значения NAME, которые прописаны мной! А вот те поля, которые вы будете добавлять самостоятельно - можете оформлять как вам угодно! Правила по формированию NAME я описал в посте выше.
Удалять поля можете безболезненно, но с оглядкой на особенности, которые я указал выше.
Какие NAME привязаны к конфигу и обработчику:
Name - имя отправителя
Email - E-mail отправителя
Phone - телефон
Subject - тема сообщения
Message - текст сообщения
Эти значения менять НЕЛЬЗЯ!!!
Attachment - поле для вложения
Norobot - поле ввода капчи
Spam - скрытое поле для защиты от спама
3.) Шаблон формы немного подкорректировал. Капча теперь вставляется не в ссылку, а просто через IMG. Убрал лишние ID и классы.
Обязательно прописывайте в <form>
... action="<?php get_theme_url(); ?>/assets/form/" ... method="POST" enctype="multipart/form-data" ...
если используете свое расположение каталога form - пропишите в action="" соответствующий путь!
4.) Функцию по обновлению капчи перенес в скрипт, обновляется так же, по клику на картинке.
5.) Распишу классы, которые я использую для стилизации.
Обязательные классы, прописанные в скрипте:
ajax-form - класс прописывается в <form>, без этого класса форма обрабатываться не будет.
form-result-send - прописывается в блоке, куда будут выводится сообщения после нажатия кнопки "Отправить". У меня используется <div>.
attach-filename - прописывается в блоке, куда будет выводится название прикрепляемого файла. У меня используется <p>. Если не указать этот блок - он создается автоматически и размещается в конце родительского контейнера.
img-captcha - класс для картинки с капчей.
form-captcha - класс для поля ввода капчи.
Классы валидатора, ошибок и корректных данных:
valid - класс для корректно заполненного поля (дефолтный класс Валидатора).
error - класс для поля с ошибками (дефолтный класс Валидатора).
form-error - класс для сообщения об ошибке при заполнении поля (дефолтный класс Валидатора).
form-result-ok - класс для блока form-result-send при успешной отправке письма.
form-result-error - класс для блока form-result-send при ошибке отправки письма и неверно введенной капчи.
toggle-disabled - класс прописывается в <form> для отслеживания формы в которой нужно блокировать кнопку "Отправить" пока не будут заполнены все обязательные поля.
disabled - класс для заблокированной кнопки "Отправить" (дефолтный класс Валидатора).
Чтобы облегчить вам жизнь - в архив вложил css файл со своими стилями для формы.
6.) Шаблон template-fb.php тоже претерпел некоторые изменения, внимательно посмотрите на блок:
<!-- FORM -->
...
7.) В файл form-submit.js добавил комментарии и некоторые опции.
8.) Использование библиотеки jQuery обязательно. Посмотрите порядок подключения в шаблоне template-fb.php!
Собственно форму можете посмотреть на тестовом сайте.
На этом все, вроде ничего не забыл.
Качайте архив, тестируйте и отписывайтесь здесь!
Всем удачи!
2 pavlexx
Алексей, вот ситуация сложилась - разрулить не могу. По порядку: использую версию скрипта UPD5.
В <head> у меня уже подключена библиотека jQuery (jquery-1.6.1.min.js), была в шаблоне изначально. Но почему-то скрипт формы обратной связи ее не подхватывает. Хотя на дефолтной теме Кардинал на пробном сайте пробовал - всё работало. А тут получается, если jQuery подключена в хеде - не работает форма, внешние признаки, как я чуть выше писал. Подключаю jQuery внизу страницы над скриптами формы - форма работает, но начинает криво работать меню (видимо, оно как-то задействует jQuery в своей работе).
В версией UPD6 та же фигня, потому что там у вас jQuery уже подключена по дефолту. И в результате форма работает, а меню нет. И как что делать в этой ситуации - не знаю.
===========================================
PS. Частично разобрался. Скрипт формы обратной связи конфликтует с не с jQuery-файлом, с другим, который, судя по содержимому, разруливает конфликты между скриптами. Вот его содержимое:
/***************************************************
Nivo Slider
***************************************************/
jQuery.noConflict()(function($){
$(document).ready(function() {
$('#slider').nivoSlider({
pauseTime:5000,
pauseOnHover:false
});
});
});
/***************************************************
SuperFish Menu
***************************************************/
// initialise plugins
jQuery.noConflict()(function(){
jQuery('ul.sf-menu').superfish();
});
/***************************************************
PRETTY PHOTO
***************************************************/
jQuery.noConflict()(function($){
$(document).ready(function() {
$("a[rel^='prettyPhoto']").prettyPhoto({opacity:0.80,default_width:500,default_height:344,theme:'light_rounded',hideflash:false,modal:false});
});
});
/***************************************************
LIST SLIDER
***************************************************/
jQuery.noConflict()(function($){
$(document).ready(function() {
$.featureList(
$("#tabs li a"),
$("#output li"), {
start_item : 1
}
);
});
});
/***************************************************
ACCORDION SLIDER
***************************************************/
jQuery.noConflict()(function($){
$('.kwicks').kwicks({
max : 900,
spacing : 0
});
});
/***************************************************
MOSAIC
***************************************************/
jQuery.noConflict()(function($){
$('.circle').mosaic({
opacity : 0.8 //Opacity for overlay (0-1)
});
$('.fade').mosaic();
$('.bar').mosaic({
animation : 'slide' //fade or slide
});
$('.bar2').mosaic({
animation : 'slide' //fade or slide
});
$('.bar3').mosaic({
animation : 'slide', //fade or slide
anchor_y : 'top' //Vertical anchor position
});
$('.cover').mosaic({
animation : 'slide', //fade or slide
hover_x : '400px' //Horizontal position on hover
});
$('.cover2').mosaic({
animation : 'slide', //fade or slide
anchor_y : 'top', //Vertical anchor position
hover_y : '100px' //Vertical position on hover
});
$('.cover3').mosaic({
animation : 'slide', //fade or slide
hover_x : '400px', //Horizontal position on hover
hover_y : '300px' //Vertical position on hover
});
});
/***************************************************
IMAGE HOVER
***************************************************/
jQuery.noConflict()(function($){
$(document).ready(function() {
$('.img-preview').each(function() {
$(this).hover(
function() {
$(this).stop().animate({ opacity: 0.5 }, 400);
},
function() {
$(this).stop().animate({ opacity: 1.0 }, 400);
})
});
});
});
jQuery.noConflict()(function($){
$('#slides').slides({
preload: true,
generateNextPrev: false
});
$('#slides2').slides({
preload: true,
generateNextPrev: false,
generatePagination: true
});
});
Удаляю этот скрипт - начинает работать форма, но перестает работать выпадающее меню. А на jQuery я изначально грешил, потому что форма не подхватывала файлик jquery-1.6.1.min.js. Заменил на более свежий, jquery-1.8.3.min.js - его форма подхватила.
Но по итогам все равно ситуация ясней не стала. Думаю, конфликт как-то можно решить через jQuery.noConflict(), но я, повторюсь, в JS не силен от слова совсем...
Проверьте чтоб jQuery не подключалась у вас дважды и проверьте пути расположения библиотеки!
У меня на сайте все работает, и меню и форма. И не важно где подключается библиотека в хедере или перед </body>.
И еще, попробуйте использовать ту версию jQuery которую использую я.
Проверьте чтоб jQuery не подключалась у вас дважды и проверьте пути расположения библиотеки!
У меня на сайте все работает, и меню и форма. И не важно где подключается библиотека в хедере или перед </body>.
И еще, попробуйте использовать ту версию jQuery которую использую я.
Я в посте выше отписался, но вы меня сообщением опередили
GetSimple CMS по-русски → PHP, HTML, CSS, jQuery → Форма обратной связи без плагинов
Форум работает на PunBB, при поддержке Informer Technologies, Inc