SlideShare ist ein Scribd-Unternehmen logo
1 von 36
Downloaden Sie, um offline zu lesen
Form API в Drupal 7
Дмитрий Дробышевский

dmitry.drobyshevsky@volcanoideas.com



            http://goo.gl/gEBaK
План доклада

1. Что такое Form API, в чем
  преимущества использования.
2. Процесс построения и обработки
  формы.
3. Обзор основных свойств и
  элементов форм.
4. Создание собственного элемента.

5. Создание динамических форм.


                          Form API в Drupal 7
1. Что дает нам FORM API.
   Формы создаются в виде
    структурированных массивов.
   Любую форму можно изменять.
   К любой форме можно добавлять
    функции валидации и обработки.
   Предоставляется встроенная
    защита от ряда уязвимостей.
   Для элементов генерируется
    стандартный HTML.
                          Form API в Drupal 7
2. Процесс построения и
обработки формы.
Пример формы




               Form API в Drupal 7
Пример формы
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
Функция валидации (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
Функция отправки (submit)

function example_nameform_submit($form, &$form_state){

  $name = $form_state['values']['user_name'];
  example_nameform_save($name, $color);

}




                                                Form API в Drupal 7
Обработка форм в Drupal
  Инициализация drupal_get_form()


    Сбор всех элементов формы

      Поиск #validate #submit


     Изменения модулями (alter)


   Построение формы form_builder()


      Выполнение #after_build

                                     Form API в Drupal 7
Обработка форм в Drupal

         Отправлена ли форма?
   Нет                          Да

drupal_render()       Выполнить #validate



 Вернуть html         Выполнить #submit



                    Перенаправить браузер



                                     Form API в Drupal 7
Изменение существующих форм
    hook_form_FORM_ID_alter
function example_form_user_login_block_alter(&$form, &$form_state 
$form_id){
  $form['actions']['submit']['#value'] = t('Sign in');
}

    hook_form_alter
function 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
3. Обзор основных свойств и
элементов форм




                        Form API в Drupal 7
Свойства формы и элементов
Свойства         Свойства
корневого        добавляемые ко
элемента формы   всем
                 элементам

                 #description
#action
                 #attributes
#method
                 #required
#redirect
                 #tree

                 #parents
                          Form API в Drupal 7
Свойства, доступные
во всех элементах
   #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
Стандартные элементы формы




                     Form API в Drupal 7
Стандартные элементы формы




                     Form API в Drupal 7
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
Создание собственного элемента
    формы HOOK_element_info

function 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
Возможные значения элемента по
умолчанию:

   #input                 #pre_render
   #process               #post_render
   #after_build           #submit
   #validate              #title_display
   #element_validate




                                     Form API в Drupal 7
#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
#process функция элемента


 $element['extension'] =  array(
   '#type' => 'textfield',
   '#size' => 7,
   '#maxlength' => 7,
   '#value' => $element['#value']['extension'],
 );
   return $element;
}




                                              Form API в Drupal 7
Валидация элемента.
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
5. Создание динамических
форм.




                    Form API в Drupal 7
Свойство #states
Свойство #states
Свойство #states
array(
  '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
Свойство #states
Состояния элемента   Значения для
  формы                условий
   disabled            empty
   required            filled
   optional            checked
   visible             unchecked
   invisible           expanded
   checked             collapsed
   unchecked           value
   expanded
   collapsed

                                Form API в Drupal 7
Создание динамических
форм




                   Form API в Drupal 7
Пример Ajax формы




                    Form API в Drupal 7
Установка 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
Ajax callback


function ajax_example_callback($form, $form_state) {

  return $form['replace_textfield'];

}




                                                Form API в Drupal 7
Этапы обработки ajax
               Произошло событие
                 #ajax['event']


                ajax запрос по пути
                 #ajax['path'] либо
                    ‘system/ajax’




                Обработка ответа



Html заполняет                    Массив ajax команд
#ajax['wrapper'].                    выполняется
Параметры #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
Ajax commands

function ajax_example_callback($form, $form_state) {

  $commands = array();
  $commands[] = ajax_command_alert("Alert requested);

  return array(
          '#type' => 'ajax',
          '#commands' => $commands
         );

}

                                           Form API в Drupal 7
Информация по теме
http://api.drupal.org/api/drupal/developer!topics!
forms_api_reference.html

http://drupal.org/project/examples

http://drupalace.ru/lesson/
sozdanie-svoego-elementa-formy-v-drupal-7-rasshiryaem-forms-api

http://api.drupal.org/api/drupal/includes%21ajax.inc/group/ajax/7

http://api.drupal.org/api/drupal/includes%21ajax.inc/group/
ajax_commands/7

http://api.drupal.org/api/drupal/includes%21common.inc/
function/drupal_process_states/7

http://api.drupal.org/api/drupal/modules%21system%21system.api.php/
function/hook_element_info/7
                                                              Form API в Drupal 7
Спасибо за внимание.
         Вопросы?


Дмитрий Дробышевский

dmitry.drobyshevsky@volcanoideas.com




                             Form API в Drupal 7

Weitere ähnliche Inhalte

Was ist angesagt?

Все дороги ведут в Checkout
Все дороги ведут в CheckoutВсе дороги ведут в Checkout
Все дороги ведут в CheckoutMagecom Ukraine
 
Общая архитектура Yii2
Общая архитектура Yii2Общая архитектура Yii2
Общая архитектура Yii2Paul Klimov
 
DevHub 3 - Pricing
DevHub 3 - PricingDevHub 3 - Pricing
DevHub 3 - PricingMagento Dev
 
Meet Magento Belarus debug Pavel Novitsky (rus)
Meet Magento Belarus debug Pavel Novitsky (rus)Meet Magento Belarus debug Pavel Novitsky (rus)
Meet Magento Belarus debug Pavel Novitsky (rus)Pavel Novitsky
 
ZFConf 2010: jQuery and Dojo Toolkit JavaScript-frameworks Integration with Z...
ZFConf 2010: jQuery and Dojo Toolkit JavaScript-frameworks Integration with Z...ZFConf 2010: jQuery and Dojo Toolkit JavaScript-frameworks Integration with Z...
ZFConf 2010: jQuery and Dojo Toolkit JavaScript-frameworks Integration with Z...ZFConf Conference
 
Примеры решения типичных задач за рамками ядра Yii2
Примеры решения типичных задач за рамками ядра Yii2Примеры решения типичных задач за рамками ядра Yii2
Примеры решения типичных задач за рамками ядра Yii2Paul Klimov
 
Web весна 2012 лекция 7
Web весна 2012 лекция 7Web весна 2012 лекция 7
Web весна 2012 лекция 7Technopark
 
Миша Рудрастых: Введение в HTTP API WordPress
Миша Рудрастых: Введение в HTTP API WordPressМиша Рудрастых: Введение в HTTP API WordPress
Миша Рудрастых: Введение в HTTP API WordPressRuslan Begaliev
 
Архитектура RESTful API на Pyramid — приемы проектирования Дмитрий Вахрушев
Архитектура RESTful API на Pyramid — приемы проектирования Дмитрий ВахрушевАрхитектура RESTful API на Pyramid — приемы проектирования Дмитрий Вахрушев
Архитектура RESTful API на Pyramid — приемы проектирования Дмитрий Вахрушевit-people
 
Create payment systems for Drupal Commerce
Create payment systems for Drupal CommerceCreate payment systems for Drupal Commerce
Create payment systems for Drupal CommerceYury Glushkov
 
Организация работы с API на Vue.js, Виталий Копачёв
Организация работы с API на Vue.js, Виталий КопачёвОрганизация работы с API на Vue.js, Виталий Копачёв
Организация работы с API на Vue.js, Виталий КопачёвMail.ru Group
 
Drupal 7 deploy database updates
Drupal 7 deploy database updatesDrupal 7 deploy database updates
Drupal 7 deploy database updatesAnton Ivanov
 
YiiConf: Миграции и инсталляции
YiiConf: Миграции и инсталляцииYiiConf: Миграции и инсталляции
YiiConf: Миграции и инсталляцииPaul Klimov
 
Ubercart -nemnogo_primerov_iz_zhizni
Ubercart  -nemnogo_primerov_iz_zhizniUbercart  -nemnogo_primerov_iz_zhizni
Ubercart -nemnogo_primerov_iz_zhiznidrupalconf
 
Webdev7: Обработка HTTP запросов. Django Views
Webdev7: Обработка HTTP запросов. Django ViewsWebdev7: Обработка HTTP запросов. Django Views
Webdev7: Обработка HTTP запросов. Django ViewsTechnosphere1
 
работа сайта
работа сайтаработа сайта
работа сайтаRinald Latupov
 
Продвинутое использование ActiveRecord в Yii2
Продвинутое использование ActiveRecord в Yii2Продвинутое использование ActiveRecord в Yii2
Продвинутое использование ActiveRecord в Yii2Paul Klimov
 

Was ist angesagt? (18)

Все дороги ведут в Checkout
Все дороги ведут в CheckoutВсе дороги ведут в Checkout
Все дороги ведут в Checkout
 
Общая архитектура Yii2
Общая архитектура Yii2Общая архитектура Yii2
Общая архитектура Yii2
 
DevHub 3 - Pricing
DevHub 3 - PricingDevHub 3 - Pricing
DevHub 3 - Pricing
 
Meet Magento Belarus debug Pavel Novitsky (rus)
Meet Magento Belarus debug Pavel Novitsky (rus)Meet Magento Belarus debug Pavel Novitsky (rus)
Meet Magento Belarus debug Pavel Novitsky (rus)
 
ZFConf 2010: jQuery and Dojo Toolkit JavaScript-frameworks Integration with Z...
ZFConf 2010: jQuery and Dojo Toolkit JavaScript-frameworks Integration with Z...ZFConf 2010: jQuery and Dojo Toolkit JavaScript-frameworks Integration with Z...
ZFConf 2010: jQuery and Dojo Toolkit JavaScript-frameworks Integration with Z...
 
Примеры решения типичных задач за рамками ядра Yii2
Примеры решения типичных задач за рамками ядра Yii2Примеры решения типичных задач за рамками ядра Yii2
Примеры решения типичных задач за рамками ядра Yii2
 
Web весна 2012 лекция 7
Web весна 2012 лекция 7Web весна 2012 лекция 7
Web весна 2012 лекция 7
 
Миша Рудрастых: Введение в HTTP API WordPress
Миша Рудрастых: Введение в HTTP API WordPressМиша Рудрастых: Введение в HTTP API WordPress
Миша Рудрастых: Введение в HTTP API WordPress
 
Архитектура RESTful API на Pyramid — приемы проектирования Дмитрий Вахрушев
Архитектура RESTful API на Pyramid — приемы проектирования Дмитрий ВахрушевАрхитектура RESTful API на Pyramid — приемы проектирования Дмитрий Вахрушев
Архитектура RESTful API на Pyramid — приемы проектирования Дмитрий Вахрушев
 
Create payment systems for Drupal Commerce
Create payment systems for Drupal CommerceCreate payment systems for Drupal Commerce
Create payment systems for Drupal Commerce
 
Организация работы с API на Vue.js, Виталий Копачёв
Организация работы с API на Vue.js, Виталий КопачёвОрганизация работы с API на Vue.js, Виталий Копачёв
Организация работы с API на Vue.js, Виталий Копачёв
 
Drupal 7 deploy database updates
Drupal 7 deploy database updatesDrupal 7 deploy database updates
Drupal 7 deploy database updates
 
YiiConf: Миграции и инсталляции
YiiConf: Миграции и инсталляцииYiiConf: Миграции и инсталляции
YiiConf: Миграции и инсталляции
 
Ubercart -nemnogo_primerov_iz_zhizni
Ubercart  -nemnogo_primerov_iz_zhizniUbercart  -nemnogo_primerov_iz_zhizni
Ubercart -nemnogo_primerov_iz_zhizni
 
Webdev7: Обработка HTTP запросов. Django Views
Webdev7: Обработка HTTP запросов. Django ViewsWebdev7: Обработка HTTP запросов. Django Views
Webdev7: Обработка HTTP запросов. Django Views
 
работа сайта
работа сайтаработа сайта
работа сайта
 
Продвинутое использование ActiveRecord в Yii2
Продвинутое использование ActiveRecord в Yii2Продвинутое использование ActiveRecord в Yii2
Продвинутое использование ActiveRecord в Yii2
 
Crazy owl yii1=> yii2
Crazy owl yii1=> yii2Crazy owl yii1=> yii2
Crazy owl yii1=> yii2
 

Ähnlich wie Form api в drupal 7

Drupal Cafe №5 Харьков. Drupal 7 Form API.
Drupal Cafe №5 Харьков. Drupal 7 Form API.Drupal Cafe №5 Харьков. Drupal 7 Form API.
Drupal Cafe №5 Харьков. Drupal 7 Form API.Dmytro Olaresko
 
I tmozg js_school_jquery
I tmozg js_school_jqueryI tmozg js_school_jquery
I tmozg js_school_jqueryITmozg
 
Take more from Jquery
Take more from JqueryTake more from Jquery
Take more from JqueryMagento Dev
 
Forms 2 - Drupal 6 - Полный контроль над формами
Forms 2 - Drupal 6 - Полный контроль над формамиForms 2 - Drupal 6 - Полный контроль над формами
Forms 2 - Drupal 6 - Полный контроль над формамиAndrii Podanenko
 
Symfony2. На чем можно сэкономить время при разработке?
Symfony2. На чем можно сэкономить время при разработке?Symfony2. На чем можно сэкономить время при разработке?
Symfony2. На чем можно сэкономить время при разработке?Stepan Tanasiychuk
 
Опыт разработки эффективного SPA
Опыт разработки эффективного SPAОпыт разработки эффективного SPA
Опыт разработки эффективного SPAEugene Abrosimov
 
Enterprise Patterns in Magento
Enterprise Patterns in MagentoEnterprise Patterns in Magento
Enterprise Patterns in MagentoVrann Tulika
 
Web весна 2013 лекция 4
Web весна 2013 лекция 4Web весна 2013 лекция 4
Web весна 2013 лекция 4Technopark
 
Импорт данных с фреймворком Migrate. Владислав Богатырев.
Импорт данных с фреймворком Migrate. Владислав Богатырев.Импорт данных с фреймворком Migrate. Владислав Богатырев.
Импорт данных с фреймворком Migrate. Владислав Богатырев.DrupalCampDN
 
Web осень 2012 лекция 4
Web осень 2012 лекция 4Web осень 2012 лекция 4
Web осень 2012 лекция 4Technopark
 
Drupal - создание инсталляционных профайлов - Иван Абраменко, CimpleO
Drupal - создание инсталляционных профайлов - Иван Абраменко, CimpleODrupal - создание инсталляционных профайлов - Иван Абраменко, CimpleO
Drupal - создание инсталляционных профайлов - Иван Абраменко, CimpleODrupalSib
 
ZFConf 2010: What News Zend Framework 2.0 Brings to Us
ZFConf 2010: What News Zend Framework 2.0 Brings to UsZFConf 2010: What News Zend Framework 2.0 Brings to Us
ZFConf 2010: What News Zend Framework 2.0 Brings to UsZFConf Conference
 
Командная разработка “толстых клиентов”
Командная разработка “толстых клиентов”Командная разработка “толстых клиентов”
Командная разработка “толстых клиентов”Open-IT
 
Top 10 problems supporting Magento customers
Top 10 problems supporting Magento customersTop 10 problems supporting Magento customers
Top 10 problems supporting Magento customersaheadWorks
 
ZFConf 2010: Zend Framework and Doctrine
ZFConf 2010: Zend Framework and DoctrineZFConf 2010: Zend Framework and Doctrine
ZFConf 2010: Zend Framework and DoctrineZFConf Conference
 

Ähnlich wie Form api в drupal 7 (20)

Drupal Cafe №5 Харьков. Drupal 7 Form API.
Drupal Cafe №5 Харьков. Drupal 7 Form API.Drupal Cafe №5 Харьков. Drupal 7 Form API.
Drupal Cafe №5 Харьков. Drupal 7 Form API.
 
The render api
The render apiThe render api
The render api
 
Yserver
YserverYserver
Yserver
 
I tmozg js_school_jquery
I tmozg js_school_jqueryI tmozg js_school_jquery
I tmozg js_school_jquery
 
Take more from Jquery
Take more from JqueryTake more from Jquery
Take more from Jquery
 
Forms 2 - Drupal 6 - Полный контроль над формами
Forms 2 - Drupal 6 - Полный контроль над формамиForms 2 - Drupal 6 - Полный контроль над формами
Forms 2 - Drupal 6 - Полный контроль над формами
 
Symfony2. На чем можно сэкономить время при разработке?
Symfony2. На чем можно сэкономить время при разработке?Symfony2. На чем можно сэкономить время при разработке?
Symfony2. На чем можно сэкономить время при разработке?
 
Опыт разработки эффективного SPA
Опыт разработки эффективного SPAОпыт разработки эффективного SPA
Опыт разработки эффективного SPA
 
Ci
CiCi
Ci
 
Enterprise Patterns in Magento
Enterprise Patterns in MagentoEnterprise Patterns in Magento
Enterprise Patterns in Magento
 
Web весна 2013 лекция 4
Web весна 2013 лекция 4Web весна 2013 лекция 4
Web весна 2013 лекция 4
 
Импорт данных с фреймворком Migrate. Владислав Богатырев.
Импорт данных с фреймворком Migrate. Владислав Богатырев.Импорт данных с фреймворком Migrate. Владислав Богатырев.
Импорт данных с фреймворком Migrate. Владислав Богатырев.
 
course js day 4
course js day 4course js day 4
course js day 4
 
Web осень 2012 лекция 4
Web осень 2012 лекция 4Web осень 2012 лекция 4
Web осень 2012 лекция 4
 
Drupal - создание инсталляционных профайлов - Иван Абраменко, CimpleO
Drupal - создание инсталляционных профайлов - Иван Абраменко, CimpleODrupal - создание инсталляционных профайлов - Иван Абраменко, CimpleO
Drupal - создание инсталляционных профайлов - Иван Абраменко, CimpleO
 
ZFConf 2010: What News Zend Framework 2.0 Brings to Us
ZFConf 2010: What News Zend Framework 2.0 Brings to UsZFConf 2010: What News Zend Framework 2.0 Brings to Us
ZFConf 2010: What News Zend Framework 2.0 Brings to Us
 
Командная разработка “толстых клиентов”
Командная разработка “толстых клиентов”Командная разработка “толстых клиентов”
Командная разработка “толстых клиентов”
 
I Net
I NetI Net
I Net
 
Top 10 problems supporting Magento customers
Top 10 problems supporting Magento customersTop 10 problems supporting Magento customers
Top 10 problems supporting Magento customers
 
ZFConf 2010: Zend Framework and Doctrine
ZFConf 2010: Zend Framework and DoctrineZFConf 2010: Zend Framework and Doctrine
ZFConf 2010: Zend Framework and Doctrine
 

Form api в drupal 7