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

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

Время на прочтение2 мин
Количество просмотров902
Иногда простому друпалеру требуется создать форму, например как мне, собрать голоса посетителей по определённому вопросу. Все знают модуль 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

Публикации

Истории

Ближайшие события

19 августа – 20 октября
RuCode.Финал. Чемпионат по алгоритмическому программированию и ИИ
МоскваНижний НовгородЕкатеринбургСтавропольНовосибрискКалининградПермьВладивостокЧитаКраснорскТомскИжевскПетрозаводскКазаньКурскТюменьВолгоградУфаМурманскБишкекСочиУльяновскСаратовИркутскДолгопрудныйОнлайн
3 – 18 октября
Kokoc Hackathon 2024
Онлайн
24 – 25 октября
One Day Offer для AQA Engineer и Developers
Онлайн
25 октября
Конференция по росту продуктов EGC’24
МоскваОнлайн
26 октября
ProIT Network Fest
Санкт-Петербург
7 – 8 ноября
Конференция byteoilgas_conf 2024
МоскваОнлайн
7 – 8 ноября
Конференция «Матемаркетинг»
МоскваОнлайн
15 – 16 ноября
IT-конференция Merge Skolkovo
Москва
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань