Сделать стартовойДобавить в закладки  
Главная страничка Главная страничка
В номере:

Выходит с 17 июля 2008 г. цена договорная

Опрос

конечно, он настанет в 2012 г.
да, но не в 2012 г.
нет, это фантастика
а что такое конец света
а мне пофиг - я буду уже мертв



Календарь
«    Сентябрь 2009    »
ПнВтСрЧтПтСбВс
 123456
78910111213
14151617181920
21222324252627
282930 

Архив новостей
Май 2019 (2)
Март 2019 (1)
Январь 2019 (1)
Декабрь 2018 (1)
Ноябрь 2018 (3)
Октябрь 2018 (2)

Информация
DLE: Как создать модуль или как я делал дополнительную форму обратной связи
Web » CMS » DLE
автор: dimon, опубликовано: 24 сентября 2009

Потребовалось на сайте с 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>


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

 
Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь. Чтобы Вам были доступны все функции Вам необходимо либо зарегистрироваться, либо зайти на сайт под своим именем.

Другие новости по теме:

  • Список файлов в каталоге в текстовый файл
  • DLE хаки: Защита комментариев от спама методом подмены полей имя и e-mail ф ...
  • DLE хаки: Добавим краткое описание и картинку в topnews
  • DLE: Прикрутим Яндекс.карты для отображения меток новостей на карте
  • DLE хаки: Запрет на добавления ссылок в поле "О себе" профиля


  • Комментарии:

    Оставить комментарий

    #1 написал: Igorek (27 февраля 2010 11:24)
    Добрый день! Спасибо за данный ресурс, очень полезный.

    По Распоряжению Правительства РФ №1555-р от 17.10.2009, мне на сайте нашего ведомства надо создать дополнительную форму обратной связи. У Вас всё написано понятно, но вопрос вот в чём: как для этой формы на dle 8.2. сделать ссылку типа: http://xxxxx.ru/gto/
    Спасибо.
    #2 написал: dimon (27 февраля 2010 11:33)
    Igorek, а почему именно http://xxxxx.ru/gto/
    Нельзя чтоли http://xxxxx.ru/index.php?do=bronirovanie
    ?


    чтобы ходило по http://xxxxx.ru/gto/ нужно в файле .htaccess корня сайта перед строкой:
    RewriteCond %{REQUEST_FILENAME} !-d

    вставить правило:
    RewriteRule ^tgo(/?)+$ index.php?do=bronirovanie [L]
    #3 написал: Gudvinuk (25 марта 2010 08:12)
    У себя по пробывал, не работает - пишет что ошибка не указан e-mail и не отправляет ничего, помогите разобраться срочно надо!!!
    Вот ссылка:
    http://xxxx.kz/index.php?do=bronirovanie/
    #4 написал: dimon (25 марта 2010 12:24)
    Gudvinuk, я удалил из формы кучу полей для заполнения, в том числе и email, а проверку заполненности этого поля убрать забыл feel
    я подправил код в статье, а ты просто добавь поле:

    <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>

    если тебе это поле не нужно, то его можно сделать со свойством хадден или просто убрать проверку
    #5 написал: Johhny (18 октября 2010 12:34)
    Здравствуйте, я пользуюсь версией 8.5 делал так как описанно(добавил ещё полей)
    но тем ни менее у меня вылазит ошибка
    Внимание, обнаружена ошибка
    # Вы не указали свой E-mail.

    не подскажите в чём может быть глюк?
    #6 написал: dimon (18 октября 2010 13:17)
    Johhny, а ты поле email (именно с таким именем) добавил? а при отправке в это поле корректный майл записал?
    #7 написал: Johhny (18 октября 2010 13:35)
    да именно с таким, имейл ввёл существующий
    #8 написал: dimon (18 октября 2010 13:55)
    вышли файл пхп на мыло мне *****@gmail.com - посмотрю
    #9 написал: glassonline (6 ноября 2011 13:41)
    Спасибо большое, все работает нормально!
    Единственная просьба, подскажите как кнопку вставить не в шаблон, а именно в саму новость, пробую не работает
    #10 написал: dimon (7 ноября 2011 08:57)
    glassonline, в редакторе новости нажми кнопку Вставка ссылки
    В нее вставь адрес:
    http://твой_сайт/index.php?do=bronirovanie"
    #11 написал: more940n (2 апреля 2013 18:57)
    Спс. Давно искал. ток вот не задача понять не могу почему заместо слов отображается ромбы со знаками вопроса помогите пожалуйста,
    сылка на сайт: http://www.koash.ru/index.php?do=bronirovanie
    Движок стоит версии 9.8 Если поможете решить проблему то замной не заржевеет
    #12 написал: dimon (3 апреля 2013 09:58)
    more940n, php файл не в той кодировке? у тебя движок в utf-8. Открой файл в текстовом редакторе и сохрани в кодировке utf-8


     
    Информация
     
    Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.


    Поиск по сайту:


    Облако тегов
    Android, Arduino, backup, CentOS, cmd, css, div, DLE, DLE хаки, domoticz, dzvents, LCD, Linux, log, LUA, Monster, ogf3, RDP, Template, VBS, w2k8, windows, WSH, бумага, бумажный самолетик, верстка, иструкция, Карты, кино, Навигация, оригами, программа, рецензия, рецепт, скрипт, фигуры, шаблон, Яндекс, яндекс-карты

    Показать все теги
    Реклама
    раскрутка сайта бесплатно
    Главная страница | Регистрация | Добавить новость | Новое на сайте | Статистика | Поддержка | Правила ресурса Copyright © 2005-2018 by dimon - all right reserved!
    Тираж:       Счетчик тИЦ и PR     экземпляров.   Дизайн, верстка by dimon