Добрый день. Сегодня речь пойдет о форме обратной связи в DLE. Она очень простая и требует чтобы гость обязательно указал электронную почту. Это не совсем удобно.
Сегодня я расскажу на примере одно из сайтов как я решал данную задачку.
Я добавил новое поле с телефоном и снял ограничение на обязательное указание эл. почты для гостя.
Делается это все за 5 минут.
Новое поле которое будем добавлять — телефон, имя переменной «n_telephon»
Файлы в движке
Нас будут интересовать три файла
1. feedback.tpl — шаблон обратной связи
2. engine\modules\feedback.php — отправка сообщения без AJAX
3. engine\ajax\feedback.php — Отправка с использованием AJAX
Изменения в движке и шаблоне
1. Открываем админку, переходим в раздел "Шаблоны Email сообщений". Переходим на шаблон "Настройка E-Mail сообщения, которое отсылается через форму обратной связи". Добавляем поле с телефоном в наш шаблон.
Скрин:
2. Открываем файл шаблона обратной связи feedback.tpl
Ищем
[html]
<tr>
<td>E-Mail:</td>
<td><input type="text" maxlength="35" name="email" class="f_input" /></td>
</tr>
[/not-logged]
[/html]
Ниже добавляем
[html]
<tr>
<td>Телефон:</td>
<td><input type="text" maxlength="35" name="n_telephon" class="f_input" /></td>
</tr>
[/html]
3. Вносим изменения в файл engine\ajax\feedback.php
Ищем
[php]
$email = $member_id[’email’];
[/php]
Ниже добавляем
[php]
$n_telephon = strip_tags( stripslashes( $_POST[‘n_telephon’] ));
[/php]
Ищем
[php]
$name = strip_tags( stripslashes( $_POST[‘name’] ) );
[/php]
Ниже добавляем
[php]
$n_telephon = strip_tags( stripslashes( $_POST[‘n_telephon’] ));
[/php]
Снимаем ограничение при котором гость не может отправить сообщение с пустым полем EMAIL
Ищем
[php]
if( empty($email) OR dle_strlen($email, $config[‘charset’]) > 50 OR @count(explode("@", $email)) != 2) {
$stop .= $lang[‘feed_err_2’];
}
[/php]
Меняем на
[php]
if( empty($email) OR dle_strlen($email, $config[‘charset’]) > 50 OR @count(explode("@", $email)) != 2) {
//$stop .= $lang[‘feed_err_2′];
$email=$email.’Не указан’;
}
[/php]
В этом же файле ищем строчки где обрабатывается наш шаблон:
Ищем
[php]
$row[‘template’] = stripslashes( $row[‘template’] );
[/php]
Ниже добавляем
[php]
$row[‘template’] = str_replace( "{%n_telephon%}", $n_telephon, $row[‘template’] );
[/php]
Скрин формы обратной связи Сети мебельных магазинов ДОМИНО.
Вот и все изменения в движке и шаблоны.
ps: Будут вопросы пишите или комментируйте.
ДОПОЛНЕНИЯ ОТ ПОЛЬЗОВАТЕЛЕЙ
1. Ответ прислал Игорь К.
Спасибо, всё работает.
Для удобства можно ещё укоротить в .tpl файле формы вводимый номер с 35-ти значного maxlength=»35″ на maxlength=»13″.
И ещё я добавил проверку обязательности ввода номера.
После
[php]
if( empty( $name ) OR dle_strlen($name, $config[‘charset’]) > 100 ) {
$stop .= $lang[‘feed_err_1’];
}[/php]
Вставить
[php]
if( empty( $n_telephon) OR dle_strlen($n_telephon, $config[‘charset’]) > 13 ) {
$stop .= $lang[‘feed_err_88’];
}
[/php]
И в website.lng добавил ‘feed_err_8′=> «Вы не указали свой номер телефона.»,
2. Еще одно дополнение. Которое меня попросили сделать. Написав о проблеме в скайпе.
Суть проблемы была в том, что пользователь вместо телефона передавал текст, но кодировка была кракозябрами.
Решение было найдено достаточно простое. Достаточно добавить строку
[php]$n_telephon = iconv("UTF-8", "CP1251", $n_telephon);[/php]
После
[php]
$n_telephon = strip_tags( stripslashes( $_POST[‘n_telephon’] ));[/php]
На этом все. Пишите и комментируйте !!!
В настоящее время не требуются правки движка. Есть инструкция от разработчика: https://dle-news.ru/extras/online/index.html?all27.html
Также у вас есть возможность использования дополнительных полей в разделе обратной связи на сайте. Для того чтобы добавить дополнительное поле в форму обратной связи, вам необходимо только разместить необходимое поле с определенным именем в форме, после чего оно будет доступно для использования в шаблонах e-mail сообщений. Для добавления дополнительного поля в форму, для поля ввода необходимо использовать атрибут с именем: name=»xfield[X]», где X это имя поля, написанное латинскими буквами. Например, вы хотите разместить в форме обратной связи поле для заполнения номера телефона, для этого в шаблоне feedback.tpl размещаете поле:
где tel это уникальное имя дополнительного поля, а в шаблоне e-mail сообщений в админпанели размещаете тег: {%tel%}, после чего заполненный пользователем номер телефона будет также присылаться вместе с сообщением. Допускается использование любого количества дополнительных полей….
Делал все по инструкции один в один версия движка 11.0. Первое письмо прошло и все, остальные приходят но уже вместо телефона написано {%n_telephon%} . Все перепроверил ввел по новому и так и сяк а оно все равно телефон не присылает. Пришлось вернуться на старую схему
В новой версии надо по новой разбираться. Я уже давно не занимался разработкой на DLE/
Я особо не заморачивался с этими формами и проверку тоже не включал на правильность, особо не специалист копаться в кодах, хотя надо будет заняться. В общем как я вышел из положения. Создал две формы скопировал feedbak.php из модулей и переименовал в order.php. В файле order изменил использование теми с feedbak.tpl на order.tpl который тоже в общем-то тупо скопировал (это все один и тот же файл с разным названием) . Так получилось две независимых формы одна «обратная связь» вторая «оформить заявку». Ну а с добавлением поля вообще все просто. Есть поле «тема» в шаблоне оно мне по факту не нужно и я его изменил просто переименовав на телефон. Ну да если мне кто-то отправит кракозябры ну что ж не перезвоню ему и технику не сделаю не велика потеря ). Нормальный человек который нуждается в ремонте думаю напишет правильный телефон )
Поправочка при всех этих манипуляциях еще добавлял маленький кусочек кода в engine.php для обработки order.php
case «order» :
include_once ENGINE_DIR . ‘/modules/order.php’;
break;
здравствуйте я отправит писмо через обратный связь. и открит почта администраторa email строка пустой.спасибо
Спасибо большое за хак!
Но если пользователь вводит текст в созданное поле, в тексте письма оно выводится кракозябрами.
$n_telephon = iconv(«UTF-8», «CP1251», $n_telephon); — НЕ ПОМОГАЕТ!
DLE — 10.2
попробуйте
$str_c = iconv(«UTF-8″,»windows-1251»,$str_c);
на SQL инжект проверь
Спасибо проверю.
ajax из дополнительных полей русские буквы отображаются иероглифами, цифры и анг. буквы работают, в полях которые были все работает. Может кто знает где поправить? Ссасибо
Попробуйте кодировку поменять.
Т.е. чтобы получал почту только админ, а не все админы
В коде прописать конкретный адрес отправки.
Неужели всем рассылает?
Ни когда не думал об этом.
Уточняю:
Прошу подсказать (так как я только начал изучать язык)- как убрать выборку пользователей, которые получат письмо из формы обратной связи и сделать статического пользователя, который будет получать письмо и формы обратной связи.
Если конечно вам не сложно…
хотя ответ больше не интересен…. сделал так…. создал новую группу… определил в нее нужного пользователя и указал в выборки пользователей из какой группы конкретно выбирать кому отправлять….
Спасибо за решение. Все оказалось намного проще.
Нет мне не сложно.
Добрый день! Подскажите пож., как сделать адресатом лишь одного пользователя? ( допустим админа с user_id = 1).
Спасибо заранее
А как сделать необязательным к заполнению поле «Номер телефона»?
Оно не обязательно.
Спасибо, всё работает.
Для удобства можно ещё укоротить в .tpl файле формы вводимый номер с 35ти значного maxlength=»35″ на maxlength=»13″.
И ещё я добавил проверку обязательности ввода номера.
После
if( empty( $name ) OR dle_strlen($name, $config[‘charset’]) > 100 ) {
$stop .= $lang[‘feed_err_1’];
}
Вставить
if( empty( $n_telephon) OR dle_strlen($n_telephon, $config[‘charset’]) > 13 ) {
$stop .= $lang[‘feed_err_8’];
}
И в website.lng добавил
‘feed_err_8’=> «Вы не указали свой номер телефона.»,
Спасибо. За вариант включу его в статью.
Спасибо. Прошу прощения, чтобы избежать конфликта в языковом файле нужно использовать вместо feed_err_8 этот feed_err_88 — тоесть ‘feed_err_88’ => «Вы не указали свой номер телефона.»,
и
if( empty( $n_telephon) OR dle_strlen($n_telephon, $config[‘charset’]) > 13 ) {
$stop .= $lang[‘feed_err_88’];
}
Спасибо за поправку.
А как можно отключить капчу и поле «Тема»
?
в настройке групп пользователей.
Не работает. При высылке сообщения отображается {%n-telephon%} вместо номера телефона.
Не верно тег указали в файле обработки формы. Проверьте еще раз.
А как можно убрать список получателей?
Просто скрыть это поле с помощью DIV`a
и в результате получаем бАААААААльшую дыру в защите сайта. Твое новое поле похоже ни как не проверяется движком на SQL-инъекцию. Так можно и весь сайт потерять.
Я посмотрел как обрабатывает движок поступающие переменные от гостя. Имя и Email. И использовал те же функции для проверки данных которые передаются скрипту. Думаю в celsoft программисты хорошо проверили на дырявость форму обратной связи.