Обновить

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

Чулан
Иногда простому друпалеру требуется создать форму, например как мне, собрать голоса посетителей по определённому вопросу. Все знают модуль 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. Кто смелый!
Теги:Drupalphpqa
Хабы: Чулан
Рейтинг -9
Количество просмотров 393 Добавить в закладки 1
Комментарии
Комментарии 5

Похожие публикации

Python QA Engineer
16 марта 202160 000 ₽OTUS
Java QA Engineer
16 марта 202160 000 ₽OTUS
Комплексное обучение PHP
19 апреля 202120 000 ₽Loftschool
Backend разработчик на PHP
26 апреля 202150 000 ₽OTUS

Лучшие публикации за сутки