Иногда простому друпалеру требуется создать форму, например как мне, собрать голоса посетителей по определённому вопросу. Все знают модуль WEBFORMS и лучше него пока ничего не придумали. Но в моём случае это не подходило. Форму нужно было сделать быстро, WEBFORMS среди установленных модулей не было, а до очередного подъёма новой версии могло пройти долго. В таком случае на помощь приходит смекалка.:
зы: можно попробовать экспериметировать дальше в сторону, например добавления hook_menu. Кто смелый!
<?php
echo drupal_get_form('pit_survey1');
flood_register_event('survey_submit');
function pit_survey1($formstate) {
.......
foreach ($questions as $quest=>$answ) {
$form['q'.$i++] = array('#type'=>'radios','#options'=>$answ,'#title'=>$quest);
}
$form['email'] = array('#type'=>'textfield','#title'=>'Email Address','#prefix'=>'<div id="emailh">','#suffix'=>'</div>');
$form['email1'] = array('#type'=>'textfield','#title'=>'Email Address');
$form['agree'] = array('#type'=>'checkbox','#title'=>'I agree to use my email box for your selfish needs, Admin!.');
$form['submit'] = array('#type'=>'submit','#value'=>t('Submit your answer'));
$form['#redirect'] = 'thankupage.html';
return $form;
}
function pit_survey1_validate($form,&$formstate) {
if ($formstate['values']['email']) form_set_error('email',t('You was treated as a spam robot. Get out!'));
if (!flood_is_allowed('survey_submit',10)) form_set_error(null,t('You seems to be a flooder. Get Out!'));
}
function pit_survey1_submit($form,&$formstate) {
foreach ($formstate['values'] as $key=>$value) {
if (preg_match('~^q\d+$',$key)) {
$out[] = $form[$key]['#title'] . ":\t\t\t" . $form[$key]['#options'][$value];
} else {
$out[] = $form[$key]['#title'] . ":\t\t\t" . $value;
}
}
$body = join("\n",$out);
$msg = array(
'id'=>'pit_survey',
'header'=>array('From'=>'survey@sdfsdfsfsd.dd'),
'to'=>'info+survey@sdfsdfds.dd',
'subject'=>'survey results',
'body'=>$body,
);
if (drupal_mail_send($msg)) {
//drupal_set_message(t('Your submission was sent. Thank you.')); закомменчено потому, что по сабмиту юзера переводят на страницу со спасибо.
}
}
И чтобы уж нас совсем не нашли, эту систему сделаем блоком и поставим на страницу с предваряющим текстом.Хотя, конечно, можно и в сайд бар какой нибудь, очень эффектно. И QA с code review team не заметят. ;-)зы: можно попробовать экспериметировать дальше в сторону, например добавления hook_menu. Кто смелый!