Your SlideShare is downloading. ×
Form api в drupal 7
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Introducing the official SlideShare app

Stunning, full-screen experience for iPhone and Android

Text the download link to your phone

Standard text messaging rates apply

Form api в drupal 7

2,249
views

Published on


0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
2,249
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
11
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Form API в Drupal 7Дмитрий Дробышевскийdmitry.drobyshevsky@volcanoideas.com http://goo.gl/gEBaK
  • 2. План доклада1. Что такое Form API, в чем преимущества использования.2. Процесс построения и обработки формы.3. Обзор основных свойств и элементов форм.4. Создание собственного элемента.5. Создание динамических форм. Form API в Drupal 7
  • 3. 1. Что дает нам FORM API. Формы создаются в виде структурированных массивов. Любую форму можно изменять. К любой форме можно добавлять функции валидации и обработки. Предоставляется встроенная защита от ряда уязвимостей. Для элементов генерируется стандартный HTML. Form API в Drupal 7
  • 4. 2. Процесс построения иобработки формы.
  • 5. Пример формы Form API в Drupal 7
  • 6. Пример формыfunction example_nameform($form, &$form_state){  $form[user_name] = array(    #title => t(Your Name),    #type => textfield,    #description => t(Enter your name.),  );  $form[submit] = array(   #type => submit,   #value => t(Submit)  );  return $form;} Form API в Drupal 7
  • 7. Функция валидации (validate)function example_nameform_validate($form, &$form_state){  if (!check_user_name($form_state[values][user_name])) {    form_set_error(user_name,      t(Invalid user name.));  }} Form API в Drupal 7
  • 8. Функция отправки (submit)function example_nameform_submit($form, &$form_state){  $name = $form_state[values][user_name];  example_nameform_save($name, $color);} Form API в Drupal 7
  • 9. Обработка форм в Drupal Инициализация drupal_get_form() Сбор всех элементов формы Поиск #validate #submit Изменения модулями (alter) Построение формы form_builder() Выполнение #after_build Form API в Drupal 7
  • 10. Обработка форм в Drupal Отправлена ли форма? Нет Даdrupal_render() Выполнить #validate Вернуть html Выполнить #submit Перенаправить браузер Form API в Drupal 7
  • 11. Изменение существующих форм hook_form_FORM_ID_alterfunction example_form_user_login_block_alter(&$form, &$form_state $form_id){  $form[actions][submit][#value] = t(Sign in);} hook_form_alterfunction example_form_alter(&$form, &$form_state, $form_id){  if ($form_id == user_login_block){    $form[actions][submit][#value] = t(Sign in);  }} Form API в Drupal 7
  • 12. 3. Обзор основных свойств иэлементов форм Form API в Drupal 7
  • 13. Свойства формы и элементовСвойства Свойствакорневого добавляемые коэлемента формы всем элементам #description#action #attributes#method #required#redirect #tree #parents Form API в Drupal 7
  • 14. Свойства, доступныево всех элементах #type  #prefix #access  #pre_render #after_build  #process #array_parents  #states #attached  #suffix #default_value  #theme #disabled  #theme_wrappers #elements_validate  #title #parents  #weight #post_render Form API в Drupal 7
  • 15. Стандартные элементы формы Form API в Drupal 7
  • 16. Стандартные элементы формы Form API в Drupal 7
  • 17. 4. Создание собственного элементаформы$form[phone_number] = array(    #type => example_phone_element,    #title => t(Discrete phone number),    #default_value => array(areacode => 044,                        extension => 9999999),    #description => t(A phone number),); Form API в Drupal 7
  • 18. Создание собственного элемента формы HOOK_element_infofunction example_element_info(){   $types[example_phone] = array(    #input => TRUE,    #process => array(example_phone__process),    #element_validate => array(example_phone_validate),    #theme_wrappers => array(example_inline_element),  );   return $types; } Form API в Drupal 7
  • 19. Возможные значения элемента поумолчанию: #input  #pre_render #process  #post_render #after_build  #submit #validate  #title_display #element_validate Form API в Drupal 7
  • 20. #process функция элементаfunction example_phone_process($element, &$form_state, $form){  $element[#tree] = TRUE;  $element[areacode] = array(    #type => textfield,    #size => 3,    #maxlength => 3,    #value => $element[#value][areacode],    #required => TRUE,    #prefix => (,    #suffix => ‘),  ); Form API в Drupal 7
  • 21. #process функция элемента $element[extension] =  array(   #type => textfield,   #size => 7,   #maxlength => 7,   #value => $element[#value][extension], );   return $element;} Form API в Drupal 7
  • 22. Валидация элемента.function example_phone_validate($element, &$form_state) {  if (!areacode_valid($element[#value][areacode])) {    form_error($element[areacode], t(The area code is  invalid.));  }    if (!areacode_valid($element[#value][extension]))     form_error($element[extension], t(The extension is  invalid.));  }} Form API в Drupal 7
  • 23. 5. Создание динамическихформ. Form API в Drupal 7
  • 24. Свойство #states
  • 25. Свойство #states
  • 26. Свойство #statesarray(  visible => CONDITIONS,  checked => OTHER_CONDITIONS,)array(  visible => array(    JQUERY_SELECTOR => REMOTE_CONDITIONS,    JQUERY_SELECTOR => REMOTE_CONDITIONS,    ...  ),) #states => array(    visible => array(      :input[name="foo"] => array(checked => TRUE),    ), ), Form API в Drupal 7
  • 27. Свойство #statesСостояния элемента Значения для формы условий disabled  empty required  filled optional  checked visible  unchecked invisible  expanded checked  collapsed unchecked  value expanded collapsed Form API в Drupal 7
  • 28. Создание динамическихформ Form API в Drupal 7
  • 29. Пример Ajax формы Form API в Drupal 7
  • 30. Установка ajax параметров  $form[changethis] = array( // other select options    #ajax => array(      callback => ajax_example_callback,      wrapper => replace_textfield_div,     ),  );  $form[replace_textfield] = array( // other textfield options    #prefix => <div id="replace_textfield_div">,    #suffix => </div>,  );  if (!empty($form_state[values][changethis])) {    $form[replace_textfield][#description] = t(      "Say why you chose @value",       array(@value =>$form_state[values][changethis])   ); } Form API в Drupal 7
  • 31. Ajax callbackfunction ajax_example_callback($form, $form_state) {  return $form[replace_textfield];} Form API в Drupal 7
  • 32. Этапы обработки ajax Произошло событие #ajax[event] ajax запрос по пути #ajax[path] либо ‘system/ajax’ Обработка ответаHtml заполняет Массив ajax команд#ajax[wrapper]. выполняется
  • 33. Параметры #ajax #ajax[callback] #ajax[effect] #ajax[event] #ajax[keypress] #ajax[method] #ajax[path] #ajax[prevent] #ajax[progress] #ajax[trigger_as] #ajax[wrapper] Form API в Drupal 7
  • 34. Ajax commandsfunction ajax_example_callback($form, $form_state) {  $commands = array();  $commands[] = ajax_command_alert("Alert requested);  return array(          #type => ajax,          #commands => $commands         );} Form API в Drupal 7
  • 35. Информация по темеhttp://api.drupal.org/api/drupal/developer!topics!forms_api_reference.htmlhttp://drupal.org/project/exampleshttp://drupalace.ru/lesson/sozdanie-svoego-elementa-formy-v-drupal-7-rasshiryaem-forms-apihttp://api.drupal.org/api/drupal/includes%21ajax.inc/group/ajax/7http://api.drupal.org/api/drupal/includes%21ajax.inc/group/ajax_commands/7http://api.drupal.org/api/drupal/includes%21common.inc/function/drupal_process_states/7http://api.drupal.org/api/drupal/modules%21system%21system.api.php/function/hook_element_info/7 Form API в Drupal 7
  • 36. Спасибо за внимание. Вопросы?Дмитрий Дробышевскийdmitry.drobyshevsky@volcanoideas.com Form API в Drupal 7