Лекция для студентов НТУ ХПИ. Рассматривает основы работы с полями (nodes) в Drupal 7 - рассмотрен вопрос использования существующих поелй, их настройка, программная работа с полями,
Фичи н-н-нада? Или почему стоит использовать модуль Features.
Работа с полями (fields) в Drupal 7
1. Работа с полями (fields) в Drupal 7
Поле (field) — служит для добавления к сущностям
(материалам, комментариям, пользователям, таксономии и
файлам) дополнительных данных
Поле определяется типом данных и виджетом (способом
отображения поля на форме)
2. Основные настройки полей (fields) в Drupal 7
Настройки поля деляться на общие и специфичные для
каждого типа материала
3. Работа с полями (fields) в Drupal 7
Для каждого вида отображения материала может быть свой
форматтер (способ отображения на странице) для каждого
поля
4. Основные типы полей в Drupal 7
Тип поля Виджеты Описание
Boolean Check boxes/radio buttons Поле для хранения флага да/нет
Single on/off checkbox
Decimal Text field Поле для хранения числовых значений с
Float разной точностью
Integer
File File Поле для загрузки произвольных файлов,
можно ограничивать по типам файлам и
размеру
Image Image Поле для загрузки картинок, аналогчино File,
но может показывать превью и ограничивать
размер в пикселях загружаемой картинки
List (float) Select list Поля для хранения числовых значений,
List (integer) Check boxes/radio buttons которые пользователь выбирает из
List (decimal) предложенного списка
Long text Text area (multiple rows) Многострочное поле ввода текста (может
Long text with Text area with a summary быть расширено визуальным редактором)
summary
Term reference Select list Поле для выбора термина таксономии
Check boxes/radio buttons
Autocomplete term widget
Text Text field Поле для хранения короткого однострочного
текста
5. Дополнительные типы полей в Drupal 7
Модули, которые предоставляют свои поля можно скачать
здесь:
– http://drupal.org/project/modules?filters=tid
%3A20224%20drupal_core%3A103
Тип поля Виджеты Описание
Link Text field Поле для хранения ссылки, проверяет ее
правильность, можжет выводить в виде тега
<a> (http://drupal.org/project/link)
Email field Text field Поле для хранения емейла, проверяет
правильность адреса, может защищать от
спама при отображении на сайте
(http://drupal.org/project/email)
References Select list Поле для выбора других материалов или
Check boxes/radio buttons пользователей (аналогично Term reference)
Autocomplete term widget (http://drupal.org/project/references)
Field group Fieldset Не поле! Служит для объединения полей на
Vertical tabs форме в одну группу
Horizontal tabs (http://drupal.org/project/field_group)
6. Работа с группами полей (fieldgroup) в Drupal 7
Группы служат для логического объединения полей на
форме редактирования и при отображении
7. Как поля храняться в БД Drupal 7
Для каждого поля создается своя таблица
Пример - таблица field_data_body — значения поля body
ноды
entity_type - тип сущности. В нашем случае всегда будет = 'node'.
bundle - тип материала.
deleted - флаг, показывающий было ли это поле удалено
entity_id - связка с сущностью. В нашем случае, с полем nid из таблицы 'node'.
revision_id - связка с версией сущности, В нашем случае, с полем мid из таблицы 'node_revisions'.
language - язык поля
delta - порядковый номер, используется для полей, принимающих множество значений
body_value - собственно, значение поля
body_summary - краткое значение поля, тизер
body_format - связка с таблицей filter_format, формат ввода для данного поля
8. Сохранение значений полей в БД Drupal 7
node_save() - сохранение значения полей ноды в БД
– $new_node = new StdClass();
$new_node->type = 'portfolio';
$new_node->title = 'Новый заголовок';
$new_node->uid = 1;
//если нет языков - LANGUAGE_NONE
$new_node->language = 'ru';
$new_node->body[$node->language]['0']['value'] = 'Содержимое';
$new_node->body[$node->language]['0']['summary'] = 'Анонс';
$new_node->body[$node->language]['0']['format'] = 'full_html';
//поле с несколькими значениями
$new_node->field_price[$node->language]['0']['value'] = 100;
$new_node->field_price[$node->language]['1']['value'] = 101;
$new_node->field_text[$node->language]['0']['value'] = 'текст';
node_save($new_node);
// узнаем какой ID присвоился созданной ноде
$nid = $new_node->nid;
9. Получение значений полей в БД Drupal 7
node_load() - загрузка данных ноды
– $node = node_load(17); //указываем nid нужной ноды
//теперь в $node храниться вся информация о ноде
//загруженная из БД
//получаем нужные значения
$text = $node->field_text[$node->language]['0']['value'];
/*
$text = 'текст'
*/
//получаем нужные значения для многозначных полей
$prices = field_get_items('node', $node, 'field_price');
/*
$prices = array(
0 => array('value' => 100),
1 => array('value' => 101)
)
*/
10. Вывод и отображение полей в Drupal 7
field_view_value() - рендеринг значения поля
– $node = node_load(17); //указываем nid нужной ноды
//выводим значения одного поля
//указываем вид отображения full или teaser
//от этого будут зависеть настройки отображения полей
$rendered_price = field_view_value('node', $node, 'field_price', 'full');
//полученный массив преобразуем в HTML
print drupal_render($rendered_price);
11. Расширенные возможности
Создание собственных типов полей
Добавление полей к другим сущностям
Запросы к полям через EntityFieldQuery
Работа с шаблонами материалов (отдельная лекция)
12. Ссылки на подробную информацию
http://drupal.org/project/modules?filters=tid
%3A20224%20drupal_core%3A103
http://api.drupal.org/api/drupal/includes
%21entity.inc/class/EntityFieldQuery/7
http://api.drupal.org/api/drupal/modules%21field
%21field.module/group/field/7
13. Контакты
Фиделин Евгений
Компания QArea
Email: eugene.fidelin@gmail.com
Skype: eugene.fidelin