Sokali 7 Опубликовано: 25 октября 2011 Рассказать Опубликовано: 25 октября 2011 (изменено) Хочу поделится одним из способов модернизации формы обратной связи внутри движка. А именно, добавление дополнительных полей в форму обратной связи, а также возможность отправления письма на несколько почтовых адресов сразу. Я не стремился переделать код, я только хотел его немного модифицировать опираясь на него же. Версия движка 9.4 лицензия. К сожалению, мне пока не удалось реализовать возможность прикрепления файлов к письму, если кто то поможет в этом вопросе, все будут благодарны. Добавление дополнительных полей. Скажу сразу, создавать дубликаты файлов обратной связи необязательно, но в случае обновления движка и полной замены файлов, Вам придется всё проделывать заново. Совет! Лучше создайте. 1. Создаем дубликаты файлов engine/modules/feedback.php, engine/ajax/feedback.php, templates/Default/feedback.tpl в соответствующих папках, далее переименовываем их в myform. Итого у нас появилось три новых файла engine/modules/myform.php, engine/ajax/myform.php, templates/Default/myform.tpl в соответствующих папках. 2. Открываем файл engine/engine.php Находим case "feedback" : include ENGINE_DIR . '/modules/feedback.php'; break; Ниже добавляем case "myform" : include ENGINE_DIR . '/modules/myform.php'; break; Находим elseif ($do == 'feedback') $nam_e = $lang['title_feed']; Ниже добавляем elseif ($do == 'myform') $nam_e = $lang['title_myform']; Проверяем www.mysite.ru/index.php?do=myform . Страница открылась? Идем дальше. 3. Открываем файл templates/Default/myform.tpl Добавляем нужные поля (количество полей неограниченно), к примеру добавим парочку <tr> <td>Поле 1:</td> <td><input type="text" name="pole1" /></td> </tr> <tr> <td>Поле 2:</td> <td> <select name="pole2"> <option value="Опция 1">Опция 1</option> <option value="Опция 2">Опция 2</option> </select> </td> </tr> Если Вы хотите скрыть выбор адресата, убрать почту, скрыть заголовок, то используйте свойство hidden. К примеру, мне надо, чтобы пользователи писали строго в отдел поддержки с заголовком письма "Обращение в техническую поддержку" Заменяем код <tr> <td class="label"> Кому:<span class="impot">*</span> </td> <td>{recipient}</td> </tr> На <input type="hidden" name="recip" value="3"/> , где 3 это ID пользователя с почтой технической поддержки support@mysite.ru Далее заменяем код <tr> <td class="label"> Тема:<span class="impot">*</span> </td> <td><input type="text" maxlength="45" name="subject" class="f_input" /></td> </tr> На <input type="hidden" name="subject" value="Наш заголовок"/> где указываем наш заголовок письма Тем самым мы скрыли поля от пользователей, не нарушая работу самого скрипта. 4. Но зачем нам новые поля, если они не работают? 4.1 Открываем файл engine/modules/myform.php Находим $message = strip_tags( stripslashes( $_POST['message'] ) ); Ниже добавляем $pole1 = strip_tags( stripslashes( $_POST['pole1'] ) ); $pole2 = strip_tags( stripslashes( $_POST['pole2'] ) ); Находим $row['template'] = str_replace( "{%text%}", $message, $row['template'] ); Ниже добавляем $row['template'] = str_replace( "{%pole1%}", $pole1, $row['template'] ); $row['template'] = str_replace( "{%pole2%}", $pole2, $row['template'] ); Далее в этом файле произведем ещё несколько дополнительных изменений Находим $tpl->load_template( 'feedback.tpl' ); Заменяем $tpl->load_template( 'myform.tpl' ); Находим $.post(dle_root + "engine/ajax/feedback.php", params, function(data){ Заменяем $.post(dle_root + "engine/ajax/myform.php", params, function(data){ 4.1.1 Хотите сделать поля обязательным к заполнению? В этом же файле (engine/modules/myform.php) Находим if( empty( $subject ) OR dle_strlen($subject, $config['charset']) > 200 ) { $stop .= $lang['feed_err_4']; } Ниже добавляем if( empty( $pole1 ) OR dle_strlen($pole1, $config['charset']) > 200 ) { $stop .= $lang['feed_err_pole1']; } if( empty( $pole2 ) OR dle_strlen($pole2, $config['charset']) > 200 ) { $stop .= $lang['feed_err_pole2']; } 4.2 Открываем файл engine/ajax/myform.php Находим $message = trim(stripslashes( convert_unicode($_POST['message'], $config['charset'] ) ) ); Ниже добавляем $pole1 = trim(stripslashes( convert_unicode($_POST['pole1'], $config['charset'] ) ) ); $pole2 = trim(stripslashes( convert_unicode($_POST['pole2'], $config['charset'] ) ) ); Находим $row['template'] = str_replace( "{%text%}", $message, $row['template'] ); Ниже добавляем $row['template'] = str_replace( "{%pole1%}", $pole1, $row['template'] ); $row['template'] = str_replace( "{%pole2%}", $pole2, $row['template'] ); 4.2.1 Хотите сделать поля обязательным к заполнению? В этом же файле (engine/ajax/myform.php) Находим if( empty( $subject ) OR dle_strlen($subject, $config['charset']) > 200 ) { $stop .= $lang['feed_err_4']; } Ниже добавляем if( empty( $pole1 ) OR dle_strlen($pole1, $config['charset']) > 200 ) { $stop .= $lang['feed_err_pole1']; } if( empty( $pole2 ) OR dle_strlen($pole2, $config['charset']) > 200 ) { $stop .= $lang['feed_err_pole2']; } 5. Все замечательно, но письма приходят всё равно без дополнительных полей. Что делать? Заходим в Панель управления - Список всех разделов - Шаблоны Email сообщений - Настройка E-Mail сообщения, которое отсылается через форму обратной связи Добавляем записи вида Поле 1: {%pole1%} Поле 2: {%pole2%} Нажимаем Сохранить 6. Отлично работает! Но меня смущает заголовок страницы и не видно текста ошибки, в случае если поле не заполнено. Что делать? Открываем языковой файл language/Russian/website.lng Добавляем 'feed_err_pole1' => "<li>Вы не указали поле 1.</li>", 'feed_err_pole2' => "<li>Вы не указали поле 2.</li>", 'title_myform' => "Техническая поддержка", 7. Превосходно. Но как сделать адрес ЧПУ? www.mysite.ru...x.php?do=myform как это убрать??? Открываем в корне сайта файл .htaccess Находим RewriteRule ^addnews.html$ index.php?do=addnews [L] Ниже добавляем RewriteRule ^myform.html$ index.php?do=myform [L] 8. Конец Получаем нужную форму по адресу www.mysite.ru/myform.html с возможностью управления полями в шаблоне Email сообщений. 9. Постойте! А как сделать, чтобы письмо одновременно уходило на несколько ящиков? В файлах engine/ajax/myform.php и engine/modules/myform.php Находим $mail->send( $recipient['email'], $subject, $row['template'] ); Ниже добавляем $mail->send( vasyapupkin@gmail.com, $subject, $row['template'] );[/code] где vasyapupkin@gmail.com это дополнительный адрес Пользуйтесь на здоровье. В не лицензионных версиях скрипта может не работать! Изменено 25 октября 2011 пользователем Sokali 6 Цитата Ссылка на сообщение Поделиться на других сайтах
Рекомендованные сообщения
Присоединяйтесь к обсуждению
Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.