Всем привет! Делаю сайт по недвижимости, есть задача, чтобы после описания каждого объекта недвижимости на странице присутствовала форма - что то типа "есть вопросы? пишите!" и простые поля: имя, имейл, текст вопроса. При отправке формы очень хочется чтобы чтобы к ней скрытым полем прилагался адрес страницы с которой сообщение было отправлено, чтобы админ мог понять каким именно объектом интересуется человек.
Я установил модуль webform, но не могу понять как сделать так как мне надо. Мудрые, форумчане, подкиньте дельные советы. Заранее спасибо.
Комментарии
Можно использовать комментарии.
1. Создаете страницу в вебформ, добавляете поле с токеном get
2. Добавляете на страницу ссылку на созданную форму (через блок или темизацию ноды)
3. через get передаете заголовок страницы в вебформу.
Можно поподробнее?
Неа, инфа должна уходить на имейл.
не помню как в 6ке в 7ке в поле по умолчанию можно вставить токен, даже коммент есть (%get[ключ] - Tokens may be populated from the URL by creating URLs of the form http://example.com/my-form?foo=bar. Using the token %get[foo] would print "bar".), пишите в значение по умолчанию %get[foo]... а на странице foo=title...
Добавьте скрытое поле с токеном title
Все решилось выводом вот такого кода:
<?php require_once drupal_get_path('module', 'contact') .'/contact.pages.inc';
//no need to maintain two version of node.tpl.php
include "node.tpl.php";
function
local_contact_page(){$form = contact_mail_page();
// override default values here if you want
// next one will select a different category
//$form['cid']['#default_value'] = 0;
return($form);
}
function
local_contact_page_submit($form_id, $form_values){return(contact_mail_page_submit($form_id, $form_values));
}
function
local_contact_page_validate($form, $form_state){return(contact_mail_page_validate($form, $form_state));
}
print
drupal_get_form('local_contact_page'); ?>...сначала в node-emlak.tpl.php - темизацию типа содержимого "недвижимость", а затем просто в блоке. Теперь контактная форма отображается на каждой странице сайта в сайдбаре справа. Спасибо всем за ответы!
И теперь представьте сколько вы получите спама?
Подобные формы надо выводить через JS или же ставить очень сложные капчи (Первый вариант лучше).
Обычная и капча с картинкой роботы проходят на раз-два.
Так ведь я только за. Что значит через JS? Это как? Приведите вариант решения, если не сложно. Просто я нашел кое какое решение. Поставил решено. Чтобы те кто имеют аналогичную проблему могли воспользоваться им. Если вы имеете решение лучше - поделитесь! И я, и другие будем вам за это благодарны.
Буквально через час напишу. Как приеду с работы.
Спасибо Вам за это! Скажу что за основу того что получается в итоге, я брал сайт hturkey.ru - говорят его делал человек с drupal.ru - там к каждой квартире подобная форма приставлена. Но там сложнее - там сообщение уходит автору объявления, а в моем случае - просто админу сайта.
1. Создаем нужную webform, в настройках не забываем указать что форма доступна как блок, а также настроить адрес куда будет отправлен результат сабмита
2. Создаем модуль:
<?php
//Опционально можно добавить drupal_add_js(array('nid'=>$build['nid']),'settings');
//Для 6-ки немного отличается, можно найти в гугле по запросу "Drupal 6 программный вывод блока"
//Хук на вывод ноды, можно использовать любой другой, а можно просто создать блок, который бы содержал ('<div id="inline_zayavka"></div>'). Зависит от того в какое место вы хотите поместить форму заявки. У меня это середина ноды, поэтому использую хук вывода ноды.
function {module_name}_node_view_alter(&$build) {
//Добавляем яваскрипт файл, это можно сделать внутри блока, или в .info файле модуля или темы.
drupal_add_js(drupal_get_path('module', 'module_name').'/{module_name}.js');
//Сделать доступным номер текущей ноды для javascript
//Тут чисто мои заморочки (проверка в какие ноыд вставлять форму)
if (isset($build['#groups']) && isset($build['#groups']['group_mid_content'])) {//Ну и сам процесс вставки (запись в суфикс тела ноды)
$build['body']['#suffix'] = '<div id="inline_zayavka"></div>';
}
}
//Хук меню, добавляем адрес по которому будет выполнятся функция возвращающая webform через JSON
function {module_name}_menu() {
$items['show_ajaxblock'] = array(
'access callback' => true,
'page callback'=>'_{module_name}_show_ajaxblock',
'type'=>MENU_CALLBACK
);
return $items;
} //Сама функция, которая возвращает нужный webform
function _{module_name}_show_ajaxblock() {
//Для 7-ки, где client-block-{id} - номер блока webform (можно посмотреть в списке блоков после создания wedform'ы)
$block = module_invoke('webform','block_view','client-block-{id}');
$output = "<h3>Получить дополнительную информацию</h3>".render($block['content']);
drupal_json_output(array('status'=>true,'data'=>$output));
}
?>
3. Создаем javascript файл, который будет запрашивать форму через ajax после загрузки страницы:
(function ($) {
Drupal.behaviors.{module_name} = {
attach: function (context, settings) {
jQuery.ajax({
async: true,
url: "/show_ajaxblock",
success: function(response) {
jQuery('#inline_zayavka').html(response.data);
//тут опционально можно занести значение из переменной Drupal.settings.nid в значение формы.
}
});
}
}
})(jQuery);
//В 6-ке вроде можно просто:
$(document).ready(function(){
jQuery.ajax({
async: true,
url: "/show_ajaxblock",
success: function(response) {
jQuery('#inline_zayavka').html(response.data);
//тут опционально можно занести значение из переменной Drupal.settings.nid в значение формы.
}
});
});
Готово.
Также советую поставить модуль webform_ajax, для валидации без редиректа.
Здравствуйте!
Подскажите пожалуйста чайнику! Поставил модуль, сделал форму, всё пашет, но не выводит название страницы!!!!
Объясняю. Закинул форму в блок, который выводится на всех страницах. Заголовок ноды вебформы "Задать вопрос". Теперь, когда добавляешь скрытое поле с выводом %nid или %title - после заполнения формы на любой странице приходит "Задать вопрос", а не адрес той страницы, в которой заполнена форма в блоке.
Если добавляю %get[???] - а что туда добавлять? У меня нет никаких соображений, потому что адреса выводятся алиасами!
Using the token %get[foo] would print "bar".), пишите в значение по умолчанию %get[foo]... а на странице foo=title...
Да, но у меня нет параметра FOO, только http://website.ru/alias
Какой параметр вставить в %get[key]???????????????
ЗЫ: пытался вставить в качестве "key" следующие токены: URL, current-page:URL, а также сами токены %nid и %title. Сработал только последний, возвратив "Задать вопрос"...
До сих пор использую вот это:
<?php require_once drupal_get_path('module', 'contact') .'/contact.pages.inc';
//no need to maintain two version of node.tpl.php
include "node.tpl.php";
function
local_contact_page(){$form = contact_mail_page();
// override default values here if you want
// next one will select a different category
//$form['cid']['#default_value'] = 0;
return($form);
}
function
local_contact_page_submit($form_id, $form_values){return(contact_mail_page_submit($form_id, $form_values));
}
function
local_contact_page_validate($form, $form_state){return(contact_mail_page_validate($form, $form_state));
}
print
drupal_get_form('local_contact_page'); ?>в ином примере так и не разобрался.
Спасибо, но если бы я только знал, куда это вставлять...
Пока я проблему решил, подставив вместо key-параметра буквочку q (я вспомнил, что когда-то у меня страницы назывались ?q=node/11).
Теперь в сообщении приходит node/11. Ну да ладно, если надо будет можно будет проверить что за страница.
И всё же хотел бы услышать квалифицированный ответ, чтобы приходил именно алиас, ЧПУ (человекопонятный)
В Webform 7.x-4.0-beta1 токены работают как Вам нужно.
День добрый!
Подскажите, как вытащить mail автора ноды и поместить его в соответствующее поле вебформы, вебформа выводиться в виде блока. Токен [node:author:mail]выводит mail автора вебформы, а требуется выводить mail автора ноды.
Спасибо.