Field API
это не страшно
Gold Sponsor of
DrupalCamp Kyiv 2011
Silver Sponsors of
DrupalCamp Kyiv 2011
Что такое Field API?

    Наследник модуля CCK

    Серьезно переработанный модуль CCK

     Механизмы хранения ввода и отображения
    полей в Drupal 7
Организация работы с данным в
              Drupal 7

    Entities

    Field Types

    Field Instances

    Bundles

    Widgets

    Formatters
Сущности

    Базовый механизм хранения информации в
    D7

    Это не ноды
Типы полей

    Механизмы хранения и проверки

    Функции ввода данных

    Функции отображения данных


Сходны с типами в языках программирования
Поля (Field Instances)

    Экземпляр поля

    Хранит реальные данные

    Связан с конкретной сущностью
Bundle


     С точки зрения системы: набор полей
    присоединенных к какой-то сущности

     С точки зрения пользователя: сущность с
    полями
Виджеты


    Функции проверки данных

    Формы ввода данных
Форматтеры


    Темизация вывода информации для полей
Field API

    Field Types API

    Field Info API

    Field CRUD API

    Field Storage API

    Field API bulk data deletion

    Field Language API
Field Types API

    Схема

    Информация

    Загрузка

    Хранение

    Виджеты

    Форматтеры
Field Info API

    Предоставление информации для других
    модулей о полях, виджетах и т.п.
Field CRUD API
Расширенный набор функций для

    Создания

    Удаления

    Очистки

    Обновления
полей, виджетов и т.п.
Field Attach API

    Используется для связки сущностей и полей

    Выполняется перед функциями Field Storage
    API и Field Type API
Field Storage API

    Позволяет реализовывать собственные
    механизмы хранения полей

     Базовый механизм в Drupal
    field_sql_storage.module
Field API bulk data deletion

    field_attach_delete()
      –    hook_field_delete()
      –    hook_field_storage_delete()
      –    hook_field_attach_delete()

    Поля и данные не удаляются сразу
Field Language API

     Поля имеют поддержку многоязычности “из
    коробки”

    Для непереводимых добавлен язык
    LANGUAGE_NONE
Use cases
Widget
Необходимые хуки
hook_field_widget_form()
hook_field_widget_info()
hook_field_is_empty()


#process, #value_callback, #element_validate
 $field = field_widget_field($element, $form_state);
 $instance = field_widget_instance($element,
  $form_state);
Форматтер
Необходимые хуки
hook_field_formatter_info()
hook_field_formatter_view()
hook_field_formatter_prepare_view()
Собственная обработка
   многоязычности
hook_field_prepare_translation()
Собственные поля
Типичное решение

    Используем тип контента

    Добавляем поля

    Используем механизмы CCK для хранения и
    обработки

    В шаблоне/препроцесс функциях
    обрабатываем вывод
Возможные усложнения задачи

    Форму мы делаем руками

    У нас не одна форма, а несколько

    У нас нужно ввести несколько фамилий на
    одной форме
Field API/Drupal way

    Смотрим на Drupal.org

    Создаем свой тип поля

    Делаем свой форматтер

    Делаем свой виджет

     Контрибутим на d.org или складываем в
    копилочку
Завершение

     Field API это не только создание
    собственных полей

    Будьте ленивы
Что получаем взамен

    Поддерживаемость

    Расширяемость

    Облегчение работы

    Славу у уважение собратьев-разработчиков
Полезные ссылки

 api.drupal.org
Вопросы к докладчику

Павел
Махринский

Skype: gumanista
Facebook: facebook.com/gumanist

Pavel Makhrinsky.Field API.DrupalCamp Kyiv 2011