[ Решено ] Как правильно прикрутить к Drupal 7 форму обратной связи собственного производства?

Главные вкладки

Аватар пользователя Users681 Users681 19 ноября 2012 в 5:31

Здравствуйте уважаемое сообщество. Есть вопрос не дающий покоя моему "устамшему" мозгу уже второй день. Есть форма обратной связи на php, html, js - прекрасно себя зарекомендовавшая на обычных php сайтах собственной "варганки". Сейчас встал вопрос о прикручивании этой формы к Drupal 7. Проблема в том, что вопрос как встал, так и лег... Короче Drupal по любому меня побеждает (он сильнее). Форма состоит из 4-х файлов. Собственно сама HTML-ка формы, скрипты визуализации и связи с обработчиком и сам PHP обработчик. Если кидать файлы в корень сайта - форма работает. Как только пытаюсь подключить все это дело через шаблоны(темизацию) - ступор. Ничего никуда не отправляется. Помогите грамотно прикрутить "контакту" на сайт, дайте дельного совета, направления, мыслю... Буду весьма и весьма... Прикладываю код ниже.

1. Форма

<form id="contact-form" class="order">
                <fieldset>
                    <div class="wrapper">
                        <div class="success"> Заказ принят! <br> <strong>Мы свяжемся с Вами в ближайшее время.</strong> </div>
                    </div>
                    <div class="field">
                        <label class="name">
                            <input type="text" value="Имя:">
                            <span class="empty">* Обязательное поле.</span>
                        </label>
                    </div>
                    <div class="field">
                        <label class="email notRequired">
                            <input type="text" value="E-mail:">
                            <span class="error">* Неправильный e-mail.</span>
                        </label>
                    </div>
                    <div class="field">
                        <label class="phone">
                            <input type="text" value="Телефон:">
                            <span class="empty">* Обязательное поле.</span>
                        </label>
                    </div>
                    <div class="field">
                        <label class="message">
                            <input type="text" value="Адрес:">
                            <span class="empty">* Обязательное поле.</span>
                        </label>
                    </div>
                    <div class="field">
                        <label class="time notRequired">
                            <input type="text" value="Желаемое время:">
                        </label>
                    </div>
                    <div class="clear"></div>
                    <div class="buttons-wrapper">
                        <a class="btn" data-type="submit">Вызвать</a><span class="loader"></span>
                    </div>
                </fieldset>

2. Скрипт

(function($) {
Drupal.behaviors.myBehavior = {
  attach: function (context) {
  $(document).ready(function() {

$(function () {
    resizeBody();

    function resizeBody() {
        var h = $(window).height();
        var headerH = $('.header').outerHeight();
        var middleH = $('.middle').outerHeight();
        var footerH = $('.footer').outerHeight();
        var paddings = 50;
        $('.main').css('min-height', h - headerH - middleH - footerH - paddings);
        $('body').css('min-height', h);
    }

    $(window).resize(resizeBody);

    if ($.fn.forms) {
        $('#contact-form.order').forms({
            ownerEmail: 'site@yandex.ru',
            senderEmail: 'site@yandex.ru',
            mailHandlerURL: 'OrderMailHandler.php',
        });

        $('#contact-form.feedback').forms({
            ownerEmail: 'site@yandex.ru',
            senderEmail: 'site@yandex.ru',
            mailHandlerURL: 'FeedbackMailHandler.php',
        });
    }
})
       
    });
  }
};
})(jQuery);

3. Обработчик


<?php
    $owner_email 
$_POST["owner_email"];
    
$headers 'From:' $_POST["email"];
    
$subject 'Вызов замерщика';
    
$messageBody "";
    
    if(
$_POST['name']!='nope'){
        
$messageBody .= '<p>Имя: ' $_POST["name"] . '</p>' "\n";
        
$messageBody .= '<br>' "\n";
    }
    if(
$_POST['email']!='nope'){
        
$messageBody .= '<p>Email: ' $_POST['email'] . '</p>' "\n";
        
$messageBody .= '<br>' "\n";
    }else{
        
$headers 'From:' $_POST["sender_email"];
    }
    if(
$_POST['phone']!='nope'){        
        
$messageBody .= '<p>Телефон: ' $_POST['phone'] . '</p>' "\n";
        
$messageBody .= '<br>' "\n";
    }
  if(
$_POST['message']!='nope'){        
        
$messageBody .= '<p>Адрес: ' $_POST['message'] . '</p>' "\n";
        
$messageBody .= '<br>' "\n";
    }
    if(
$_POST['time']!='nope'){
        
$messageBody .= '<p>Желаемое время: ' $_POST['time'] . '</p>' "\n";
    }
    
    if(
$_POST["stripHTML"] == 'true'){
        
$messageBody strip_tags($messageBody);
    }
    
    try{
        if(!
mail($owner_email$subject$messageBody$headers)){
            throw new 
Exception('mail failed');
        }else{
            echo 
'mail sent';
        }
    }catch(
Exception $e){
        echo 
$e->getMessage() ."\n";
    }
?>

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

Комментарии

Аватар пользователя Users681 Users681 19 ноября 2012 в 6:06

Я создал ноду, запихнул туда код формы, в хедере сквозняком подключены нужные скрипты, файл обработчик кинул в папку с темой (Для него нужно ноду создавать? Но это же обработчик, он не должен быть доступен...), но по нажатию кнопки отправить/вызвать посыл письма не проходит... Если можно, опишите пожалуйста конкретней что нужно вставлять и куда..?

Аватар пользователя Nikit Nikit 19 ноября 2012 в 6:10

Я бы вместо этого создал webform-у с такими же полями (выкинуть 1), подкрутил скрипт (приаттачить 2) к этой форме и настроить темплейт отсылки почты в вебформе (выкинуть 3).

А так замените:
<form id="contact-form" class="order">
на:
<form id="contact-form" class="order" action="/script3.php">
script3.php - это ваш скрипт 3.

Аватар пользователя ArmRus ArmRus 19 ноября 2012 в 12:02

Вариант 1. - модуль Contact - присутствует в ядре, добавляет страницу с формой обратной связии
Вариант 2. - Модуль Webforms - можно добавить любые формы, как страницы так и блоки с формами
Вариант 3. - Написать модуль - использовать Forms API и hook_mail()
по всем 3-м вариантам есть масса информации в сети.

"Users681" wrote:
прекрасно себя зарекомендовавшая на обычных php сайтах

-Если вы начали использовать CMS пользуйтесь его API, модулями или же пишите свой модуль. Это мой совет вам. А так же не редактируйте код в модулях(уже готовых) и в ядре - по этому пункту можете найти массу информации набрав в поисковой строке "Drupal хакать ядро".

Аватар пользователя Users681 Users681 26 ноября 2012 в 17:33

Модуль Webform с темизацией и подключением конкретных скриптов решил мои проблемы. Спасибо всем отписавшимся за помощь!