Работа с материалами (nodes) в Drupal 7
-
Upload
eugene-fidelin -
Category
Documents
-
view
14.051 -
download
5
description
Transcript of Работа с материалами (nodes) в Drupal 7
![Page 1: Работа с материалами (nodes) в Drupal 7](https://reader036.fdocument.pub/reader036/viewer/2022082316/556fd462d8b42af8088b4799/html5/thumbnails/1.jpg)
Работа с материалами (node) в Drupal 7
Материал (node) — основная единица контента в Drupal Каждый материал в системе имеет собственную страницу с
адресом вида node/номер_материала. (node/17)
![Page 2: Работа с материалами (nodes) в Drupal 7](https://reader036.fdocument.pub/reader036/viewer/2022082316/556fd462d8b42af8088b4799/html5/thumbnails/2.jpg)
Типы материалов (node types) в Drupal 7
Материал могут быть различных типов – по-умолчанию доступны Page и Article (/admin/structure/types)
![Page 3: Работа с материалами (nodes) в Drupal 7](https://reader036.fdocument.pub/reader036/viewer/2022082316/556fd462d8b42af8088b4799/html5/thumbnails/3.jpg)
Типы материалов (node types) в Drupal 7
Типы материалов добавляются – модулями (например Forum, Blog)
– вручную (/admin/structure/types/add)
![Page 4: Работа с материалами (nodes) в Drupal 7](https://reader036.fdocument.pub/reader036/viewer/2022082316/556fd462d8b42af8088b4799/html5/thumbnails/4.jpg)
Создание новых материалов (node) в Drupal 7
Drupal cоздает форму для добавления/редактирования материалов каждого типа
– /node/add/<название типа>
![Page 5: Работа с материалами (nodes) в Drupal 7](https://reader036.fdocument.pub/reader036/viewer/2022082316/556fd462d8b42af8088b4799/html5/thumbnails/5.jpg)
Как материалы храняться в БД 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 - флаг, определяющий, закреплялась ли нода вверху списков в данной версии
![Page 6: Работа с материалами (nodes) в Drupal 7](https://reader036.fdocument.pub/reader036/viewer/2022082316/556fd462d8b42af8088b4799/html5/thumbnails/6.jpg)
Как материалы храняться в БД 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 - язык, для которого задается алиас
![Page 7: Работа с материалами (nodes) в Drupal 7](https://reader036.fdocument.pub/reader036/viewer/2022082316/556fd462d8b42af8088b4799/html5/thumbnails/7.jpg)
Создание новых материалов в БД 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;
![Page 8: Работа с материалами (nodes) в Drupal 7](https://reader036.fdocument.pub/reader036/viewer/2022082316/556fd462d8b42af8088b4799/html5/thumbnails/8.jpg)
Редактирование, удаление материалов в БД 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 нужной ноды
![Page 9: Работа с материалами (nodes) в Drupal 7](https://reader036.fdocument.pub/reader036/viewer/2022082316/556fd462d8b42af8088b4799/html5/thumbnails/9.jpg)
Вывод и отображение материалов в БД Drupal 7
node_view() - рендеринг содержимого ноды – $node = node_load(17); //указываем nid нужной ноды
//указываем какой вид отображения //полный 'full' или анонс 'teaser'//указываем какой язык нужен (необязательно)//если NULL — береться текущий язык сайта$rendered_node = node_view($node, 'full', NULL);//полученный массив преобразуем в HTMLprint drupal_render($rendered_node);
![Page 10: Работа с материалами (nodes) в Drupal 7](https://reader036.fdocument.pub/reader036/viewer/2022082316/556fd462d8b42af8088b4799/html5/thumbnails/10.jpg)
Хуки для работы с материалами в БД 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); }}
![Page 11: Работа с материалами (nodes) в Drupal 7](https://reader036.fdocument.pub/reader036/viewer/2022082316/556fd462d8b42af8088b4799/html5/thumbnails/11.jpg)
Хуки для работы с материалами в БД 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, ); }}
– function mymodule_node_view_alter(&$build) {//поменяем нахвание ссылки Read more$build['links']['node']['#links']['node-readmore']['title'] = t('New Title');}
![Page 12: Работа с материалами (nodes) в Drupal 7](https://reader036.fdocument.pub/reader036/viewer/2022082316/556fd462d8b42af8088b4799/html5/thumbnails/12.jpg)
Хуки для работы с материалами в БД 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;}}
![Page 13: Работа с материалами (nodes) в Drupal 7](https://reader036.fdocument.pub/reader036/viewer/2022082316/556fd462d8b42af8088b4799/html5/thumbnails/13.jpg)
Расширенные возможности
Понятие “сущности” (entity) как более высокого уровня абстрации над материалом
Работа с ревизиями материалов
Работа с мультиязычными материалами
Работа с дополнительными полями материалов (отдельная лекция)
Работа с шаблонами материалов (отдельная лекция)
![Page 14: Работа с материалами (nodes) в Drupal 7](https://reader036.fdocument.pub/reader036/viewer/2022082316/556fd462d8b42af8088b4799/html5/thumbnails/14.jpg)
Ссылки на подробную информацию
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