DLE: Добавляем свое поле в форму обратной связи

Свое поле в форме обратной связи DLEДобрый день. Сегодня речь пойдет о форме обратной связи в DLE. Она очень простая и требует чтобы гость обязательно указал электронную почту. Это не совсем удобно.

Сегодня я расскажу на примере одно из сайтов как я решал данную задачку.

Я добавил новое поле с телефоном и снял ограничение на обязательное указание эл. почты для гостя.

Делается это все за 5 минут.

Новое поле которое будем добавлять — телефон, имя переменной «n_telephon»

Файлы в движке

Нас будут интересовать три файла
1. feedback.tpl — шаблон обратной связи
2. engine\modules\feedback.php — отправка сообщения без AJAX
3. engine\ajax\feedback.php — Отправка с использованием AJAX

[note] В моем случаи использовался ajax по этому я вносил изменения в файл engine\ajax\feedback.php. Возможно у вас будет по другому. [/note]

Изменения в движке и шаблоне

1. Открываем админку, переходим в раздел "Шаблоны Email сообщений". Переходим на шаблон "Настройка E-Mail сообщения, которое отсылается через форму обратной связи". Добавляем поле с телефоном в наш шаблон.
Скрин:
Новое поле в форме обратной связи DLE
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]

Скрин формы обратной связи Сети мебельных магазинов ДОМИНО.
Новое поле в Форме обратной связи DLE

Вот и все изменения в движке и шаблоны.

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]

На этом все. Пишите и комментируйте !!!

Метки: нет меток

33 комментария

Add a Comment

Your email address will not be published. Required fields are marked *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.