Как стать автором
Обновить

Пейдж как модуль, или как обмануть проверяющих

Время на прочтение2 мин
Количество просмотров878
Иногда простому друпалеру требуется создать форму, например как мне, собрать голоса посетителей по определённому вопросу. Все знают модуль WEBFORMS и лучше него пока ничего не придумали. Но в моём случае это не подходило. Форму нужно было сделать быстро, WEBFORMS среди установленных модулей не было, а до очередного подъёма новой версии могло пройти долго. В таком случае на помощь приходит смекалка.:

<?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. Кто смелый!
Теги:
Хабы:
Всего голосов 11: ↑1 и ↓10-9
Комментарии5

Публикации