• DONATE to NULLED!
    Форуму и его команде можно помочь, мотивировать модераторов разделов.
    Помогите модератору этого раздела killoff лично.

Модуль Дополнительная форма (заказа) на базе формы обратной связи DLE 9.5

Valeras

Постоялец
Регистрация
23 Апр 2007
Сообщения
112
Реакции
40
Возникла необходимость добавления дополнительной формы (заказа), чтобы она выглядела и работала как форма обратной связи, т.е. по аналогии, но с дополнительными полями.
Очень частый вопрос на форумах по DLE. Модули форм, которые предлагаются на просторах Интернета - что бесплатные и платные не очень подходят. Так как нужно, иногда одна форма, а не пакет, которую раз настроил и забыл.
Дополнительная форма делалась под версию DLE 9.5, но думаю, что этот метод подойдет и для последующих версий DLE.

В крайнем случае можно использовать как еще одну форму обратной связи, бывает и такая потребность. здесь описывается как можно создать дубликат формы обратной связи.

Пример использования:
Скрытое содержимое доступно для зарегистрированных пользователей!

(Попросили - сделал, чем занимается заказчик меня мало интересует, только как исключение - чтобы не оружием, наркотиками и детской порнографией :)

Итак, форма заказа под названием order или модуль order.

1. Нам нужен шаблон по аналогии с feedback.tpl, это order.tpl в общей папке Вашего шаблона. Туда его добавляем.
2. Нам нужно исполнение нового модуля прописываем в файле.

/engine/engine.php

Найти:
PHP:
    case "alltags" :
    include_once ENGINE_DIR . '/modules/tagscloud.php';
    break;


После вставить:
PHP:
  case "order" :
        include_once ENGINE_DIR . '/modules/order.php';
    break;


3. После того как указали обработчик копируем с переименованием файл engine/modules/feedback.php в engine/modules/order.php

4. Производим корректировку файла engine/modules/order.php в зависимости от ваших полей, которые необходимы в форме. У меня удалена проверка капчи по сравнению с модулем engine/modules/feedback.php.
Как вариант ответ на вопрос: "Как избавиться от капчи в форме обратной связи?".
Изменения можно увидеть в сравнив оба файла engine/modules/feedback.php и engine/modules/order.php (исходники предоставлены внизу поста).

5. Но это еще не все, наша форма заказа работает как обычная форма с перезагрузкой страницы, но это уже не "наш метод". Применяем технологию AJAX как она была использована в модуле обратной связи по умолчанию.

Для этого нам необходим AJAX обработчик который находится engine/ajax/order.php. Берем обработчик engine/ajax/feedback.php с переименованием файл engine/ajax/order.php. Производим корректировку engine/ajax/order.php в большей части это копирование и вставка из обработчика engine/modules/order.php.
Изменения можно увидеть, сравнив оба файла engine/ajax/feedback.php и engine/ajax/order.php (исходники предоставлены внизу поста).


В итоге получаем дополнительный модуль, сделанный по аналогии и не как не соприкасающийся с формой обратной связи.
Соответственно, путь к вашей форме будет:

Для просмотра ссылки Войди или Зарегистрируйся

Исходники:

Скрытое содержимое доступно для зарегистрированных пользователей!
 
А есть ли возможность прикрутить отправку файла?
 
А есть ли возможность прикрутить отправку файла?

Отправка файла не предусмотрена разработчиком. Так как исследуя класс dle_mail (engine/classes/mail.class.php), через который происходит отправка формы, я не нашел методов отправки файлов, как какой нибудь AddAttachment(). Соответственно, чтобы воспользоваться таким функционалом, нужно подкорректировать класс на отправку файлов. А дальнейшее использование - это уже дело десятое.
 
Прикрутил, работает. Но есть косячок (может, особенность, конечно) - письмо отправляется не только администратору, но аналогичное приходит и к отправителю (т.е. на email отправителя). Не нашел, как исправить. Помогите, пожалуйста.
 
Прикрутил, работает. Но есть косячок (может, особенность, конечно) - письмо отправляется не только администратору, но аналогичное приходит и к отправителю (т.е. на email отправителя). Не нашел, как исправить. Помогите, пожалуйста.

Чуть что - сразу косячок.
(Заказчик программисту:
- Опа, а я баг нашел!
программист заказчику:
- Какой же это баг - это фитча! :dk: )

То что аналогичное письмо приходит отправителю - так задумывалось.
Чтобы письмо не приходило отправителю, то в файле engine/ajax/order.php нужно закомментировать строку 149:
PHP:
// $multipleRecipients .= $email;

Который как раз и добавляет мыло отправителя.
 
PHP:
        $file = $_FILES['file']['tmp_name'];
        $file_size = $_FILES['file']['size'];
        $file_name = $_FILES['file']['name'];
        $file_name = str_replace( " ", "_", $file_name );
        $file_name_arr = explode( ".",$file_name );
        $type = end( $file_name_arr );
        $allowed_type = array( "rar", "zip", "tar", "gz", "txt", "jpg", "gif", "png", "bmp", "pdf", "doc" );
                   
        if( is_uploaded_file( $file ) && $file )
            {
                if( in_array( strtolower( $type ), $allowed_type ) and $file_name )
                    {
                        $file_prefix = time() + rand( 1, 100 );
                        $upload_file_name = "{$file_prefix}_{$file_name}";
                                   
                        if( !file_exists( ROOT_DIR."/uploads/dir/{$upload_file_name}" ) )
                            {
                                $upload_file = ROOT_DIR."/uploads/dir/{$upload_file_name}";
                                $res = @move_uploaded_file( $file, $upload_file );
                                if( $res )
                                    {
                                        if( @filesize( $upload_file ) > 3145728 )
                                            {
                                                @unlink( $upload_file );
                                                $error .= "<li>Файл имеет слишком большой размер</li>";
                                            }
                                                else
                                            {
                                                @chmod( $upload_file, 0666 );
                                            }
                                    }
                                        else
                                    {
                                        $error .= "<li>Файл не загружен</li>";
                                    }
                            }
                                else
                            {
                                $error .= "<li>Произошла ошибка, файл уже существует. Попробуйте загрузить его ещё раз</li>";
                            }
                        }
                            else
                        {
                            $error .= "<li>Данный тип файлов запрещён для загрузки</li>";
                        }
                }
                    else
                {
                    if( $file ) $error .= "<li>Файл не может быть загружен</li>";
                }

вот класс для загрузки

класс отправки с файлами:
PHP:
$message = str_replace( "\n", "<br/>\n", $message );
                $message = str_replace( "\r", "", $message );
                $message = preg_replace( "#\\[code\\](.+?)\\[/code\\]#ies", "ReplaceCode( '\\1' );", $message );
                $message = $db->safesql( $message );
                $user = stripslashes( $member_id['name'] );
                $user_id = $member_id['user_id'];
                $date = date( "Y-m-d H:i:s" );
                if( $send_email ) $send_email = $member_id['email'];
               
                $db->query( "INSERT INTO ".PREFIX."_tickets (`title`,`status`,`user_id`,`user`,`date`,`email`,`priority`,`quest`,`answer`,`last_quest`) VALUES ('$subject','1','$user_id','$user','$date','$send_email','$priority','1','0','$date')" );
                $id = $db->insert_id();
               
                $db->query( "INSERT INTO ".PREFIX."_tickets_text (`text`,`user_id`,`user`,`official`,`date`,`ticket`,`file`,`file_server`) VALUES ('$message','$user_id','$user','0','$date','$id','$file_name','$upload_file_name')" );
               
                if( $tickets_config['email_create'] == "yes" && $tickets_config['email'] != "" )
                    {
                        $host = $_SERVER['HTTP_HOST'];
                        $link_email = "http://{$host}/".$config['admin_path']."?mod=tickets&action=read&id={$id}";
                        require_once( ENGINE_DIR.'/data/tickets.tpl.config.php' );
                        include_once ENGINE_DIR.'/classes/mail.class.php';
                        $mail = new dle_mail( $config );
                        $tickets_email['create'] = stripslashes( $tickets_email['create'] );
                        $tickets_email['create'] = str_replace( "%time%", $date, $tickets_email['create'] );
                        $tickets_email['create'] = str_replace( "%user_create%", $user, $tickets_email['create'] );
                        $tickets_email['create'] = str_replace( "%title%", $subject, $tickets_email['create'] );
                        $tickets_email['create'] = str_replace( "%link%", $link_email, $tickets_email['create'] );
                        $mail->send( $tickets_config['email'], "Создан новый тикет", $tickets_email['create'] );   
                    }
в своё время постенькую системку тикетов писал для локального сайта,потом тупо забил
 
Добавлю свои пять копеек в эту тему, ибо сам столкнулся за основу взял ваш пример, но столкнулся с проблемой :
Я хотел чтобы форма обратной связи подгружалась на главной но увы - поля формы появлялись но ни кнопка отправить ни капча не работали и можно было просто лицезреть [not-logged] [/not-logged] [sec_code] [/sec_code] [recaptcha] [/recaptcha] {code} {recipient} {recaptcha}
Спасибо умным людям подсказали следующее:
тут оригинал:
Для просмотра ссылки Войди или Зарегистрируйся
ниже если оригинал потеряется:
Форма обратной связи на главной странице DLE

Задумалось как-то мне сделать форму обратной связи на главной странице в сайдбаре сайта
Казалось делов-то, {include file="feedback.tpl"} - и все должно работать. Но не тут-то было... Не работает...
Пошел спросил у Гугла, у Яндекса... Намеки есть - а вот полного решения нет. Кроме как использовать сторонние модули, или стороннюю форму связи. Но мне хотелось стандартную...
Методом научного тыка получилось так:
В папке engine/modules/ создаем файл feed.php.
В index.php подключаем его в качестве обработчика:
Найти:
require_once ROOT_DIR . '/engine/init.php';
После добавить:
require_once(ENGINE_DIR. '/modules/feed.php');
Далее в этом же index.php добавляем переменную:
Найти:
$tpl->set ( '{speedbar}', $tpl->result['speedbar'] );
После добавить:
$tpl->set('{feed}', $tpl->result['feed']);
Копируем содержимое feedback.php (папка engine/modules/) в файл feed.php
В самое начало файла добавляем код:
$tpl->load_template('feed.tpl');
И в конце файла заменяем:
$tpl->compile('content');
на
$tpl->compile('feed');
И в нужном месте в main.tpl вставляем код:
{feed}
Теперь создаем в шаблоне файл feed.tpl и копируем в него содержимое feedback.tpl
Пробуем - форма должна появиться в нужном месте на главной сайта.
 
а для 9.8 скрипт подойдет?
 
Спасибо, было полезно. А как сделать в модальном окне полной новости?
Просто когда пишешь - {include file="order"} , появляются теги [not-logged] [/not-logged] [sec_code][/sec_code] [recaptcha][/recaptcha] [question] [/question] и так далее (все поля есть) но они не работают.

За ранее большое спасибо.
 
Назад
Сверху