Form API в Drupal 7Дмитрий Дробышевскийdmitry.drobyshevsky@volcanoideas.com            http://goo.gl/gEBaK
План доклада1. Что такое Form API, в чем  преимущества использования.2. Процесс построения и обработки  формы.3. Обзор осн...
1. Что дает нам FORM API.   Формы создаются в виде    структурированных массивов.   Любую форму можно изменять.   К люб...
2. Процесс построения иобработки формы.
Пример формы               Form API в Drupal 7
Пример формыfunction example_nameform($form, &$form_state){  $form[user_name] = array(    #title => t(Your Name),    #type...
Функция валидации (validate)function example_nameform_validate($form, &$form_state){  if (!check_user_name($form_state[val...
Функция отправки (submit)function example_nameform_submit($form, &$form_state){  $name = $form_state[values][user_name];  ...
Обработка форм в Drupal  Инициализация drupal_get_form()    Сбор всех элементов формы      Поиск #validate #submit     Изм...
Обработка форм в Drupal         Отправлена ли форма?   Нет                          Даdrupal_render()       Выполнить #val...
Изменение существующих форм    hook_form_FORM_ID_alterfunction example_form_user_login_block_alter(&$form, &$form_state $f...
3. Обзор основных свойств иэлементов форм                        Form API в Drupal 7
Свойства формы и элементовСвойства         Свойствакорневого        добавляемые коэлемента формы   всем                 эл...
Свойства, доступныево всех элементах   #type                   #prefix   #access                 #pre_render   #after...
Стандартные элементы формы                     Form API в Drupal 7
Стандартные элементы формы                     Form API в Drupal 7
4. Создание собственного элементаформы$form[phone_number] = array(    #type => example_phone_element,    #title => t(Discr...
Создание собственного элемента    формы HOOK_element_infofunction example_element_info(){   $types[example_phone] = array(...
Возможные значения элемента поумолчанию:   #input                 #pre_render   #process               #post_render  ...
#process функция элементаfunction example_phone_process($element, &$form_state, $form){  $element[#tree] = TRUE;  $element...
#process функция элемента $element[extension] =  array(   #type => textfield,   #size => 7,   #maxlength => 7,   #value =>...
Валидация элемента.function example_phone_validate($element, &$form_state) {  if (!areacode_valid($element[#value][areacod...
5. Создание динамическихформ.                    Form API в Drupal 7
Свойство #states
Свойство #states
Свойство #statesarray(  visible => CONDITIONS,  checked => OTHER_CONDITIONS,)array(  visible => array(    JQUERY_SELECTOR ...
Свойство #statesСостояния элемента   Значения для  формы                условий   disabled            empty   required ...
Создание динамическихформ                   Form API в Drupal 7
Пример Ajax формы                    Form API в Drupal 7
Установка ajax параметров  $form[changethis] = array(    // other select options    #ajax => array(      callback => ajax_...
Ajax callbackfunction ajax_example_callback($form, $form_state) {  return $form[replace_textfield];}                      ...
Этапы обработки ajax               Произошло событие                 #ajax[event]                ajax запрос по пути      ...
Параметры #ajax   #ajax[callback]   #ajax[effect]   #ajax[event]   #ajax[keypress]   #ajax[method]   #ajax[path]   ...
Ajax commandsfunction ajax_example_callback($form, $form_state) {  $commands = array();  $commands[] = ajax_command_alert(...
Информация по темеhttp://api.drupal.org/api/drupal/developer!topics!forms_api_reference.htmlhttp://drupal.org/project/exam...
Спасибо за внимание.         Вопросы?Дмитрий Дробышевскийdmitry.drobyshevsky@volcanoideas.com                             ...
Upcoming SlideShare
Loading in …5
×

Form api в drupal 7

2,728 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,728
On SlideShare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
14
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Form api в drupal 7

  1. 1. Form API в Drupal 7Дмитрий Дробышевскийdmitry.drobyshevsky@volcanoideas.com http://goo.gl/gEBaK
  2. 2. План доклада1. Что такое Form API, в чем преимущества использования.2. Процесс построения и обработки формы.3. Обзор основных свойств и элементов форм.4. Создание собственного элемента.5. Создание динамических форм. Form API в Drupal 7
  3. 3. 1. Что дает нам FORM API. Формы создаются в виде структурированных массивов. Любую форму можно изменять. К любой форме можно добавлять функции валидации и обработки. Предоставляется встроенная защита от ряда уязвимостей. Для элементов генерируется стандартный HTML. Form API в Drupal 7
  4. 4. 2. Процесс построения иобработки формы.
  5. 5. Пример формы Form API в Drupal 7
  6. 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. 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. 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. 9. Обработка форм в Drupal Инициализация drupal_get_form() Сбор всех элементов формы Поиск #validate #submit Изменения модулями (alter) Построение формы form_builder() Выполнение #after_build Form API в Drupal 7
  10. 10. Обработка форм в Drupal Отправлена ли форма? Нет Даdrupal_render() Выполнить #validate Вернуть html Выполнить #submit Перенаправить браузер Form API в Drupal 7
  11. 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. 12. 3. Обзор основных свойств иэлементов форм Form API в Drupal 7
  13. 13. Свойства формы и элементовСвойства Свойствакорневого добавляемые коэлемента формы всем элементам #description#action #attributes#method #required#redirect #tree #parents Form API в Drupal 7
  14. 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. 15. Стандартные элементы формы Form API в Drupal 7
  16. 16. Стандартные элементы формы Form API в Drupal 7
  17. 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. 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. 19. Возможные значения элемента поумолчанию: #input  #pre_render #process  #post_render #after_build  #submit #validate  #title_display #element_validate Form API в Drupal 7
  20. 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. 21. #process функция элемента $element[extension] =  array(   #type => textfield,   #size => 7,   #maxlength => 7,   #value => $element[#value][extension], );   return $element;} Form API в Drupal 7
  22. 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. 23. 5. Создание динамическихформ. Form API в Drupal 7
  24. 24. Свойство #states
  25. 25. Свойство #states
  26. 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. 27. Свойство #statesСостояния элемента Значения для формы условий disabled  empty required  filled optional  checked visible  unchecked invisible  expanded checked  collapsed unchecked  value expanded collapsed Form API в Drupal 7
  28. 28. Создание динамическихформ Form API в Drupal 7
  29. 29. Пример Ajax формы Form API в Drupal 7
  30. 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. 31. Ajax callbackfunction ajax_example_callback($form, $form_state) {  return $form[replace_textfield];} Form API в Drupal 7
  32. 32. Этапы обработки ajax Произошло событие #ajax[event] ajax запрос по пути #ajax[path] либо ‘system/ajax’ Обработка ответаHtml заполняет Массив ajax команд#ajax[wrapper]. выполняется
  33. 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. 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. 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. 36. Спасибо за внимание. Вопросы?Дмитрий Дробышевскийdmitry.drobyshevsky@volcanoideas.com Form API в Drupal 7

×