Your SlideShare is downloading. ×
Работа с материалами (nodes) в Drupal 7
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Работа с материалами (nodes) в Drupal 7

13,565

Published on

Лекция для студентов НТУ ХПИ. Рассматривает основы работы с материалами (nodes) в Drupal 7 - NodeAPI, хуки для работы с материалами,

Лекция для студентов НТУ ХПИ. Рассматривает основы работы с материалами (nodes) в Drupal 7 - NodeAPI, хуки для работы с материалами,

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
13,565
On Slideshare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
46
Comments
0
Likes
1
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. Работа с материалами (node) в Drupal 7 Материал (node) — основная единица контента в Drupal Каждый материал в системе имеет собственную страницу с адресом вида node/номер_материала. (node/17)
  • 2. Типы материалов (node types) в Drupal 7 Материал могут быть различных типов – по-умолчанию доступны Page и Article (/admin/structure/types)
  • 3. Типы материалов (node types) в Drupal 7 Типы материалов добавляются – модулями (например Forum, Blog) – вручную (/admin/structure/types/add)
  • 4. Создание новых материалов (node) в Drupal 7 Drupal cоздает форму для добавления/редактирования материалов каждого типа – /node/add/<название типа>
  • 5. Как материалы храняться в БД Drupal 7 Таблица node — базовая информация о всех нодах nid - первичный ключ таблицы vid - связка с таблицей node_revision, идентификатор текущей версии ноды type - связка с таблицей node_type, тип материала данной ноды language - связка с таблицей languages, текущий язык материала title - заголовок ноды uid - идентификатор пользователя-собственника ноды, как правило тот, кто ее создал status - флаг, определяющий опубликована ли нода created - unix timestamp времени создания ноды changed - unix timestamp времени последнего обновления ноды comment - флаг, определяющий позволено ли коментировать данную ноду promote - флаг, определяющий выведена ли нода на главную страницу сайта sticky - флаг, определяющий нужно ли закреплять ноду вверху списков tnid - идентификатор набора переводов для данной ноды translate - флаг, определяющий должен ли быть обновлен перевод для данной ноды Таблица node_revisions — информация о каждой сохраненной версии ноды nid - какой ноде принадлежит данная версия vid - первичный ключ таблицы uid - идентификатор пользователя, создавшего данную версию ноды title - заголовок данной версии ноды log - запись лога, описывающая изменения в данной версии по сравнению с предыдущей timestamp - unix timestamp времени создания версии ноды status - флаг, определяющий, была ли опубликована нода в данной версии comment - флаг, определяющий, разрешалось ли комментировать ноду в данной версии promote - флаг, определяющий, выводилась ли нода на главную страницу сайта в данной версии sticky - флаг, определяющий, закреплялась ли нода вверху списков в данной версии
  • 6. Как материалы храняться в БД 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, формат ввода для данного поля Таблица url_alias — синонимы (aliases) системных путей Drupal pid - первичный ключ таблицы source - системный путь Drupal, для которого задаем алиас (например, node/1) alias - сам алиас (например company/about) language - язык, для которого задается алиас
  • 7. Создание новых материалов в БД Drupal 7 node_save() - создание новой ноды и сохранение в БД – $new_node = new StdClass(); $new_node->type = page; $new_node->title = Новый заголовок; $new_node->status = 1; $new_node->promote = 1; $new_node->comment = 2; $new_node->sticky = 0; $new_node->language = ru; //если нет языков - LANGUAGE_NONE $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->uid = 1; $node->path = array(alias => url/goes/here); node_save($new_node); // узнаем какой ID присвоился созданной ноде $nid = $new_node->nid;
  • 8. Редактирование, удаление материалов в БД Drupal 7 node_load() и node_save() - загрузка и обновление ноды – $node = node_load(17); //указываем nid нужной ноды //теперь в $node храниться вся информация о ноде //загруженная из БД //меняем нужные значения $node->title = Обновили заголовок; $node->status = 0; $node->body[$node->language][0][value] = Новое; $node->body[$node->language][0][summary] = Новое; $node->body[$node->language][0][format] = full_html; node_save($node); node_delete() - удаление ноды – node_delete(17); //указываем nid нужной ноды
  • 9. Вывод и отображение материалов в БД Drupal 7 node_view() - рендеринг содержимого ноды – $node = node_load(17); //указываем nid нужной ноды //указываем какой вид отображения //полный full или анонс teaser //указываем какой язык нужен (необязательно) //если NULL — береться текущий язык сайта $rendered_node = node_view($node, full, NULL); //полученный массив преобразуем в HTML print drupal_render($rendered_node);
  • 10. Хуки для работы с материалами в БД Drupal 7 Создание новой ноды (вызов node_save() с данными новой ноды) – hook_node_presave() - для изменения ноды перед сохранением – hook_node_insert() - для изменения новой ноды перед вставкой – function mymodule_node_insert($node) { if ($node->type == mytype) { $node->path[alias] = mytype/ . $node->nid; } } Редактирование существующей ноды (вызов node_save() с данными существующей ноды) – hook_node_presave() - для изменения ноды перед сохранением – hook_node_update() - для сущесвующей новой ноды перед обновлением – function mymodule_node_update($node) { if ($node->type == mytype) { $node->title = trim($node->title); }
  • 11. Хуки для работы с материалами в БД Drupal 7 Загрузка данных ноды (вызов node_load()) – hook_node_load() - для добавления своих данных или изменения существующих – function mymodule_node_load($nodes, $types) { foreach ($nodes as $node) { $node->mynewfield = node nid = . $node->nid; } } Отображение ноды (вызов node_view()) – hook_node_view() - для добавления содержимого к выводу – hook_node_view_alter() - для изменения содержимого к выводу – function mymodule_node_view($node, $view_mode, $langcode) { if ($view_mode == full) { $node->content[mycontent] = array( #markup => My node content, #weight => 10, ); } }
  • 12. Хуки для работы с материалами в БД Drupal 7 Удаление ноды (вызов node_delete()) – hook_node_delete() - для удаления собственных данных связанных с нодой (нода еще существует в БД) – function mymodule_node_delete($node) { db_delete(mytable) ->condition(nid, $node->nid) ->execute(); } Подготовка ноды к редактированию (отображение формы добавления/редактирования ноды) – hook_node_prepare() - для изменения данных выводимых на форме – function mymodule_node_prepare($node) { if (!isset($node->comment)) { $node->comment = 2; } }
  • 13. Расширенные возможности Понятие “сущности” (entity) как более высокого уровня абстрации над материалом Работа с ревизиями материалов Работа с мультиязычными материалами Работа с дополнительными полями материалов (отдельная лекция) Работа с шаблонами материалов (отдельная лекция)
  • 14. Ссылки на подробную информацию http://api.drupal.org/api/drupal/modules!node! node.api.php/group/node_api_hooks/7 http://api.drupal.org/api/drupal/modules!node!node.module/7
  • 15. Контакты Фиделин Евгений Компания QArea Email: eugene.fidelin@gmail.com Skype: eugene.fidelin

×