Главная > DLE > DLE: Как создать модуль или как я делал дополнительную форму обратной связи
DLE: Как создать модуль или как я делал дополнительную форму обратной связи24 сентября 2009. Разместил: dimon |
Потребовалось на сайте с CMS DLE 8.2 организовать форму бронирования квартиры, которая просто отравляет на админский e-mail заявку.
Т.е. фактически дополнительную форму обратной связи. Решил организовать это как модуль для DLE. 1. Напишем php код модуля. <? /* ===================================================== DataLife Engine - by SoftNews Media Group ----------------------------------------------------- http://dle-news.ru/ ----------------------------------------------------- Copyright (c) tudimon.com ===================================================== Файл: bronirovanie.php ----------------------------------------------------- Назначение: дополнительная форма обратной связи для DLE ===================================================== */ if( ! defined( 'DATALIFEENGINE' ) ) { die( "Hacking attempt!" ); } //загрузка шаблона $tpl->load_template('bronirovanie.tpl'); //проверка корректрости е-майла function check_email($value) { return eregi( "^([0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\\.[a-wyz][a-z](fo|g|l|m|mes|o|op|pa|ro|seum|t|u|v|z)?)$", $value ); } if ($_POST['f']==1) { $stop = ""; // --------------------------- конфигурирование -------------------------- // $adminemail="admin@site.ru"; // емайл админа - кому отсылать $date=date("d.m.Y"); // число.месяц.год $time=date("H:i:s"); // часы:минуты:секунды // ---------------------------------------------------------------------- // // считываем данные формы: $adr=$_POST['adr']; $fio=$_POST['fio']; $email=$_POST['email']; if( empty( $email ) ) { $stop .= $lang['feed_err_2']; } elseif( ! check_email( $email ) ) { $stop .= $lang['feed_err_3']; } if( $stop ) { msgbox( $lang['all_err_1'], "$stop<br /><br /><a href=\"javascript:history.go(-1)\">$lang[all_prev]</a>" ); } else { // отправка админу сообщения $headers=null; // Настройки для отправки писем $headers.="From: Система бронирования <".$adminemail.">\r\n"; $headers.="X-Mailer: PHP/".phpversion()."\r\n"; $host=$_SERVER["HTTP_HOST"]; $self=$_SERVER["PHP_SELF"]; // Собираем всю информацию в теле письма $allmsg="ФИО: $fio Адрес: $adr ... * Это сообщение сгенерировано и отправлено роботом. Отвечать на него ненужно."; // Отправляем письмо майлеру на съедение если разрешена отправка;-) mail("$adminemail", "Заказ на бронь $date $time.", $allmsg, $headers); $bronirovanie = "<br><center><b>Заявка на бронь отправлена Администратору.</b></center><br>"; } } else { //сформируем форму $adr=$_POST['adr']; $bronirovanie = " <center> <b>Заявка на бронирование квартиры</b><br><br> </center> <FORM name='bronir' action='".$_SERVER['REQUEST_URI']."' method='post'> <TABLE align=center cellSpacing=0 cellPadding=5 width='550' border=0> <TR> <TD width='200' vAlign='top' align='left'><B>Адрес:</B></TD> <TD align='left'> $adr</TD> </TR> <TR> <TD width='200' vAlign='top' align='left'><B>Ф.И.О.</B></TD> <TD align='left'> <INPUT maxLength='255' size='60' name='fio'></TD> </TR> <TR> <TD width=200 vAlign=top align=left><B>E-mail</B></TD> <TD align=left> <INPUT maxLength=255 size=60 name=email></TD> </TR> <TR> <TD width=200 vAlign='top' align='left' colspan='2'> <input name='submit' type='image' src='{THEME}/images/send.png' value='submit' onclick='submit();return false;'> <input type='hidden' name='f' value='1'> <input type='hidden' name='adr' value='$adr'></TD> </TR> </TABLE> </FORM>"; } $tpl->set('{bronirovanie}',$bronirovanie); $tpl->compile( 'content' ); $tpl->clear(); ?> Принцип действия такой: - если переменная f (передается через post) не равна 1, то необходимо отобразить форму. - если равна 1, то значит форма была заполнена и юзер нажал кнопку отправить. Т.е. нужно сформировать письмо и отправить его на мыло. PHP-код модуля запихиваем в файл bronirovanie.php. Файл кладем в папку с модулями /engine/modules/bronirovanie.php 2. Создаем файл tpl для модуля. <table width="100%"> <tr> <td class="news">{bronirovanie}</td> </tr> </table> Здесь {bronirovanie} - переменная которую формирует файл bronirovanie.php. В одном случае это форма, в другом сообщение о том, что заявка отправлена. Файл кладем в папку с нашим шаблоном. 3. Регистрируем модуль в движке. Открываем файл /engine/engine.php. Находим строку: case "feedback" : include ENGINE_DIR . '/modules/feedback.php'; break; после нее добавляем описание нашего модуля: case "bronirovanie" : include ENGINE_DIR . '/modules/bronirovanie.php'; break; Эти блоки кода описывают реакцию движка на разные параметры, указанные в адресной строке после index.php?do=, а точнее - какой модуль подгружать. Т.е. если теперь написать в адресной строке index.php?do=bronirovanie, то система подгрузит наш модуль и отобразит форму. 4. Делаем кнопку, нажав на которую, пользователь попадет на страничку бронирования. Можно просто: <a href="/index.php?do=bronirovanie">забронировать квартиру</a> Но мы сделаем кнопку которая будет передавать параметр adr в форму, дабы пользователю не пришлось забивать адрес квартиры. Сделаем это вставив в файл шаблона fullstory.tpl следующий код: <FORM name="bronir" action="/index.php?do=bronirovanie" method="post"> <input name='submit' type='image' src='{THEME}/images/send_bron.png' value='submit' onclick='submit();return false;'> <input type="hidden" name="adr" value="{title}"> </FORM> Ну вроде бы все. Замечания, коментарии? Вернуться назад |