Главная > 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'>&nbsp;&nbsp;$adr</TD>
</TR>
<TR>
    <TD width='200' vAlign='top' align='left'><B>Ф.И.О.</B></TD>
    <TD align='left'>&nbsp;&nbsp;<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>&nbsp;&nbsp;<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>


Ну вроде бы все.
Замечания, коментарии?

Вернуться назад