SlideShare una empresa de Scribd logo
1 de 15
Работа с материалами (node) в Drupal 7


    Материал (node) — основная единица контента в Drupal

    Каждый материал в системе имеет собственную страницу с
    адресом вида node/номер_материала. (node/17)
Типы материалов (node types) в Drupal 7


    Материал могут быть различных типов
       –    по-умолчанию доступны Page и Article (/admin/structure/types)
Типы материалов (node types) в Drupal 7

    Типы материалов добавляются
      –    модулями (например Forum, Blog)
      –    вручную (/admin/structure/types/add)
Создание новых материалов (node) в Drupal 7

    Drupal cоздает форму для добавления/редактирования
    материалов каждого типа
       –   /node/add/<название типа>
Как материалы храняться в БД 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 - флаг, определяющий, закреплялась ли нода вверху списков в данной версии
Как материалы храняться в БД 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 - язык, для которого задается алиас
Создание новых материалов в БД 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;
Редактирование, удаление материалов в БД 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 нужной ноды
Вывод и отображение материалов в БД 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);
Хуки для работы с материалами в БД 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);
            }
Хуки для работы с материалами в БД 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,
               );
             }
           }
Хуки для работы с материалами в БД 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;
           }
           }
Расширенные возможности

    Понятие “сущности” (entity) как более высокого уровня
    абстрации над материалом


    Работа с ревизиями материалов


    Работа с мультиязычными материалами


    Работа с дополнительными полями материалов (отдельная
    лекция)


    Работа с шаблонами материалов (отдельная лекция)
Ссылки на подробную информацию


    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
Контакты

    Фиделин Евгений


    Компания QArea


    Email: eugene.fidelin@gmail.com


    Skype: eugene.fidelin

Más contenido relacionado

La actualidad más candente

Темизация и Twig в Drupal 8
Темизация и Twig в Drupal 8Темизация и Twig в Drupal 8
Темизация и Twig в Drupal 8DrupalSPB
 
Лекция 5
Лекция 5Лекция 5
Лекция 5itc73
 
Протокол HTTP. Клиент-серверная модель взаимодействия. Servlet API
Протокол HTTP. Клиент-серверная модель взаимодействия. Servlet APIПротокол HTTP. Клиент-серверная модель взаимодействия. Servlet API
Протокол HTTP. Клиент-серверная модель взаимодействия. Servlet APIEkaterina Kuchinskaya
 
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
 
Kozhemyakin dcm2011 1
Kozhemyakin dcm2011 1Kozhemyakin dcm2011 1
Kozhemyakin dcm2011 1drupalconf
 
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективно
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективноkranonitS20 Сергей Бурма. Django - легко, быстро, эффективно
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективноKrivoy Rog IT Community
 
Игорь Любин - PowerShell - ConfeT&QA 2011
Игорь Любин - PowerShell - ConfeT&QA 2011Игорь Любин - PowerShell - ConfeT&QA 2011
Игорь Любин - PowerShell - ConfeT&QA 2011ilyubin
 
Entity возрождение легенды. Исай Руслан
Entity возрождение легенды. Исай РусланEntity возрождение легенды. Исай Руслан
Entity возрождение легенды. Исай РусланDrupalSib
 
Industrial Programming Java - Lection Pack 01 - Building an application - Lav...
Industrial Programming Java - Lection Pack 01 - Building an application - Lav...Industrial Programming Java - Lection Pack 01 - Building an application - Lav...
Industrial Programming Java - Lection Pack 01 - Building an application - Lav...Fedor Lavrentyev
 
Сущности в Drupal 7
Сущности в Drupal 7Сущности в Drupal 7
Сущности в Drupal 7Itech4Web
 
Лекция #3. Введение в языки разметки web-страниц
Лекция #3. Введение в языки разметки web-страницЛекция #3. Введение в языки разметки web-страниц
Лекция #3. Введение в языки разметки web-страницЯковенко Кирилл
 
работа с потоками ввода вывода
работа с потоками ввода выводаработа с потоками ввода вывода
работа с потоками ввода выводаmetaform
 
Толстая модель. История разработки ORM
Толстая модель. История разработки ORMТолстая модель. История разработки ORM
Толстая модель. История разработки ORMMikhail Shamin
 
ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)
ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)
ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)ZFConf Conference
 

La actualidad más candente (16)

Authemployee
AuthemployeeAuthemployee
Authemployee
 
Темизация и Twig в Drupal 8
Темизация и Twig в Drupal 8Темизация и Twig в Drupal 8
Темизация и Twig в Drupal 8
 
Лекция 5
Лекция 5Лекция 5
Лекция 5
 
Протокол HTTP. Клиент-серверная модель взаимодействия. Servlet API
Протокол HTTP. Клиент-серверная модель взаимодействия. Servlet APIПротокол HTTP. Клиент-серверная модель взаимодействия. Servlet API
Протокол HTTP. Клиент-серверная модель взаимодействия. Servlet API
 
Lection1
Lection1Lection1
Lection1
 
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
 
Kozhemyakin dcm2011 1
Kozhemyakin dcm2011 1Kozhemyakin dcm2011 1
Kozhemyakin dcm2011 1
 
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективно
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективноkranonitS20 Сергей Бурма. Django - легко, быстро, эффективно
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективно
 
Игорь Любин - PowerShell - ConfeT&QA 2011
Игорь Любин - PowerShell - ConfeT&QA 2011Игорь Любин - PowerShell - ConfeT&QA 2011
Игорь Любин - PowerShell - ConfeT&QA 2011
 
Entity возрождение легенды. Исай Руслан
Entity возрождение легенды. Исай РусланEntity возрождение легенды. Исай Руслан
Entity возрождение легенды. Исай Руслан
 
Industrial Programming Java - Lection Pack 01 - Building an application - Lav...
Industrial Programming Java - Lection Pack 01 - Building an application - Lav...Industrial Programming Java - Lection Pack 01 - Building an application - Lav...
Industrial Programming Java - Lection Pack 01 - Building an application - Lav...
 
Сущности в Drupal 7
Сущности в Drupal 7Сущности в Drupal 7
Сущности в Drupal 7
 
Лекция #3. Введение в языки разметки web-страниц
Лекция #3. Введение в языки разметки web-страницЛекция #3. Введение в языки разметки web-страниц
Лекция #3. Введение в языки разметки web-страниц
 
работа с потоками ввода вывода
работа с потоками ввода выводаработа с потоками ввода вывода
работа с потоками ввода вывода
 
Толстая модель. История разработки ORM
Толстая модель. История разработки ORMТолстая модель. История разработки ORM
Толстая модель. История разработки ORM
 
ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)
ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)
ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)
 

Destacado

Работа с Views в Drupal 7
Работа с Views в Drupal 7Работа с Views в Drupal 7
Работа с Views в Drupal 7Eugene Fidelin
 
Безопасность Drupal сайтов
Безопасность Drupal сайтовБезопасность Drupal сайтов
Безопасность Drupal сайтовEugene Fidelin
 
Разработка модуля для Cms Drupal
Разработка модуля для Cms DrupalРазработка модуля для Cms Drupal
Разработка модуля для Cms DrupalDrupal Camp Kyiv
 
Что такое Drupal CMS
Что такое Drupal CMSЧто такое Drupal CMS
Что такое Drupal CMSIllya Stankevich
 
Выбираем CMS - шаг за шагом
Выбираем CMS - шаг за шагомВыбираем CMS - шаг за шагом
Выбираем CMS - шаг за шагомPetr Ponomarev
 
Drupal And Google
Drupal And GoogleDrupal And Google
Drupal And Googleguest2766ed
 
Дмитро Суслов “Порівняння різних типів CMS: самописні «движки», безкоштовні с...
Дмитро Суслов “Порівняння різних типів CMS: самописні «движки», безкоштовні с...Дмитро Суслов “Порівняння різних типів CMS: самописні «движки», безкоштовні с...
Дмитро Суслов “Порівняння різних типів CMS: самописні «движки», безкоштовні с...Lviv Startup Club
 
Bionic University. Разработка с использованием CMS/CMF Drupal. Быстрый старт....
Bionic University. Разработка с использованием CMS/CMF Drupal. Быстрый старт....Bionic University. Разработка с использованием CMS/CMF Drupal. Быстрый старт....
Bionic University. Разработка с использованием CMS/CMF Drupal. Быстрый старт....Alex Barkov
 
Основы создания сайта. Часть вторая. Обзор CMS. Выбор CMS под нужды бизнеса.
Основы создания сайта. Часть вторая. Обзор CMS. Выбор CMS под нужды бизнеса. Основы создания сайта. Часть вторая. Обзор CMS. Выбор CMS под нужды бизнеса.
Основы создания сайта. Часть вторая. Обзор CMS. Выбор CMS под нужды бизнеса. ARTW
 
Drupal: система для быстрой и комфортной разработки web-сайтов
Drupal: система для быстрой и комфортной разработки web-сайтовDrupal: система для быстрой и комфортной разработки web-сайтов
Drupal: система для быстрой и комфортной разработки web-сайтовAlex Barkov
 
Презентация к вебинару по CMS WordPress
Презентация к вебинару по CMS WordPressПрезентация к вебинару по CMS WordPress
Презентация к вебинару по CMS WordPressЕвгений Холин
 
Многоязычие сайта на Drupal
Многоязычие сайта на DrupalМногоязычие сайта на Drupal
Многоязычие сайта на DrupalDrupal Camp Kyiv
 
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...Ontico
 

Destacado (16)

Работа с Views в Drupal 7
Работа с Views в Drupal 7Работа с Views в Drupal 7
Работа с Views в Drupal 7
 
AngularJS in practice
AngularJS in practiceAngularJS in practice
AngularJS in practice
 
Безопасность Drupal сайтов
Безопасность Drupal сайтовБезопасность Drupal сайтов
Безопасность Drupal сайтов
 
Разработка модуля для Cms Drupal
Разработка модуля для Cms DrupalРазработка модуля для Cms Drupal
Разработка модуля для Cms Drupal
 
Что такое Drupal CMS
Что такое Drupal CMSЧто такое Drupal CMS
Что такое Drupal CMS
 
Выбираем CMS - шаг за шагом
Выбираем CMS - шаг за шагомВыбираем CMS - шаг за шагом
Выбираем CMS - шаг за шагом
 
Drupal And Google
Drupal And GoogleDrupal And Google
Drupal And Google
 
Дмитро Суслов “Порівняння різних типів CMS: самописні «движки», безкоштовні с...
Дмитро Суслов “Порівняння різних типів CMS: самописні «движки», безкоштовні с...Дмитро Суслов “Порівняння різних типів CMS: самописні «движки», безкоштовні с...
Дмитро Суслов “Порівняння різних типів CMS: самописні «движки», безкоштовні с...
 
Bionic University. Разработка с использованием CMS/CMF Drupal. Быстрый старт....
Bionic University. Разработка с использованием CMS/CMF Drupal. Быстрый старт....Bionic University. Разработка с использованием CMS/CMF Drupal. Быстрый старт....
Bionic University. Разработка с использованием CMS/CMF Drupal. Быстрый старт....
 
Основы создания сайта. Часть вторая. Обзор CMS. Выбор CMS под нужды бизнеса.
Основы создания сайта. Часть вторая. Обзор CMS. Выбор CMS под нужды бизнеса. Основы создания сайта. Часть вторая. Обзор CMS. Выбор CMS под нужды бизнеса.
Основы создания сайта. Часть вторая. Обзор CMS. Выбор CMS под нужды бизнеса.
 
Drupal: система для быстрой и комфортной разработки web-сайтов
Drupal: система для быстрой и комфортной разработки web-сайтовDrupal: система для быстрой и комфортной разработки web-сайтов
Drupal: система для быстрой и комфортной разработки web-сайтов
 
Drupal Paranoia
Drupal ParanoiaDrupal Paranoia
Drupal Paranoia
 
Lviv 2013 d7 vs d8
Lviv 2013   d7 vs d8Lviv 2013   d7 vs d8
Lviv 2013 d7 vs d8
 
Презентация к вебинару по CMS WordPress
Презентация к вебинару по CMS WordPressПрезентация к вебинару по CMS WordPress
Презентация к вебинару по CMS WordPress
 
Многоязычие сайта на Drupal
Многоязычие сайта на DrupalМногоязычие сайта на Drupal
Многоязычие сайта на Drupal
 
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...
 

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

Lviv Euro Drupal Camp 2015_От front-end разработки к темизации в Drupal
Lviv Euro Drupal Camp 2015_От front-end разработки к темизации в DrupalLviv Euro Drupal Camp 2015_От front-end разработки к темизации в Drupal
Lviv Euro Drupal Camp 2015_От front-end разработки к темизации в DrupaldeWeb
 
Олена Ольховик — Від frontend розробки до Drupal-темізації. Основи і специфіка
Олена Ольховик — Від frontend розробки до Drupal-темізації. Основи і специфікаОлена Ольховик — Від frontend розробки до Drupal-темізації. Основи і специфіка
Олена Ольховик — Від frontend розробки до Drupal-темізації. Основи і специфікаLEDC 2016
 
Zend Framework и мультиязычность
Zend Framework и мультиязычностьZend Framework и мультиязычность
Zend Framework и мультиязычностьStepan Tanasiychuk
 
Интеграция Яндекс Сервер
Интеграция Яндекс СерверИнтеграция Яндекс Сервер
Интеграция Яндекс СерверPVasili
 
Drupal 7 deploy database updates
Drupal 7 deploy database updatesDrupal 7 deploy database updates
Drupal 7 deploy database updatesAnton Ivanov
 
Hacking PostgreSQL. Обзор исходного кода
Hacking PostgreSQL. Обзор исходного кодаHacking PostgreSQL. Обзор исходного кода
Hacking PostgreSQL. Обзор исходного кодаAnastasia Lubennikova
 
DrupalCamp Kyiv 2011. Views - стандарт вывода списка данных. Расширение Views...
DrupalCamp Kyiv 2011. Views - стандарт вывода списка данных. Расширение Views...DrupalCamp Kyiv 2011. Views - стандарт вывода списка данных. Расширение Views...
DrupalCamp Kyiv 2011. Views - стандарт вывода списка данных. Расширение Views...Viktor Likin
 
Пакетирование для Debian/Ubuntu
Пакетирование для Debian/UbuntuПакетирование для Debian/Ubuntu
Пакетирование для Debian/Ubuntusamsolutionsby
 
идеология Drupal 8 уже в drupal 7 вячеслав касихин
идеология Drupal 8 уже в drupal 7 вячеслав касихинидеология Drupal 8 уже в drupal 7 вячеслав касихин
идеология Drupal 8 уже в drupal 7 вячеслав касихинdrupalconf
 
Perl6pod devconf
Perl6pod devconfPerl6pod devconf
Perl6pod devconfzagru
 
Drupal и возможности его применения
Drupal и возможности его примененияDrupal и возможности его применения
Drupal и возможности его примененияMedia Gorod
 
Владимир Алаев, Сергей Белов "Новые возможности bem-tools для автоматической ...
Владимир Алаев, Сергей Белов "Новые возможности bem-tools для автоматической ...Владимир Алаев, Сергей Белов "Новые возможности bem-tools для автоматической ...
Владимир Алаев, Сергей Белов "Новые возможности bem-tools для автоматической ...Yandex
 
06 - Hadoop. Java API и Hadoop Streaming
06 - Hadoop. Java API и Hadoop Streaming06 - Hadoop. Java API и Hadoop Streaming
06 - Hadoop. Java API и Hadoop StreamingRoman Brovko
 
Hadoop presentation
Hadoop presentationHadoop presentation
Hadoop presentationVlad Orlov
 

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

Render API.
Render API.Render API.
Render API.
 
Lviv Euro Drupal Camp 2015_От front-end разработки к темизации в Drupal
Lviv Euro Drupal Camp 2015_От front-end разработки к темизации в DrupalLviv Euro Drupal Camp 2015_От front-end разработки к темизации в Drupal
Lviv Euro Drupal Camp 2015_От front-end разработки к темизации в Drupal
 
Олена Ольховик — Від frontend розробки до Drupal-темізації. Основи і специфіка
Олена Ольховик — Від frontend розробки до Drupal-темізації. Основи і специфікаОлена Ольховик — Від frontend розробки до Drupal-темізації. Основи і специфіка
Олена Ольховик — Від frontend розробки до Drupal-темізації. Основи і специфіка
 
Zend Framework и мультиязычность
Zend Framework и мультиязычностьZend Framework и мультиязычность
Zend Framework и мультиязычность
 
Zend framework 2
Zend framework 2Zend framework 2
Zend framework 2
 
Интеграция Яндекс Сервер
Интеграция Яндекс СерверИнтеграция Яндекс Сервер
Интеграция Яндекс Сервер
 
Drupal 7 deploy database updates
Drupal 7 deploy database updatesDrupal 7 deploy database updates
Drupal 7 deploy database updates
 
Hacking PostgreSQL. Обзор исходного кода
Hacking PostgreSQL. Обзор исходного кодаHacking PostgreSQL. Обзор исходного кода
Hacking PostgreSQL. Обзор исходного кода
 
Backbone js
Backbone jsBackbone js
Backbone js
 
DrupalCamp Kyiv 2011. Views - стандарт вывода списка данных. Расширение Views...
DrupalCamp Kyiv 2011. Views - стандарт вывода списка данных. Расширение Views...DrupalCamp Kyiv 2011. Views - стандарт вывода списка данных. Расширение Views...
DrupalCamp Kyiv 2011. Views - стандарт вывода списка данных. Расширение Views...
 
Пакетирование для Debian/Ubuntu
Пакетирование для Debian/UbuntuПакетирование для Debian/Ubuntu
Пакетирование для Debian/Ubuntu
 
идеология Drupal 8 уже в drupal 7 вячеслав касихин
идеология Drupal 8 уже в drupal 7 вячеслав касихинидеология Drupal 8 уже в drupal 7 вячеслав касихин
идеология Drupal 8 уже в drupal 7 вячеслав касихин
 
UWDC 2013, Yii2
UWDC 2013, Yii2UWDC 2013, Yii2
UWDC 2013, Yii2
 
Perl6pod devconf
Perl6pod devconfPerl6pod devconf
Perl6pod devconf
 
Drupal и возможности его применения
Drupal и возможности его примененияDrupal и возможности его применения
Drupal и возможности его применения
 
Component Inspector
Component InspectorComponent Inspector
Component Inspector
 
Владимир Алаев, Сергей Белов "Новые возможности bem-tools для автоматической ...
Владимир Алаев, Сергей Белов "Новые возможности bem-tools для автоматической ...Владимир Алаев, Сергей Белов "Новые возможности bem-tools для автоматической ...
Владимир Алаев, Сергей Белов "Новые возможности bem-tools для автоматической ...
 
Administrarea DSpace
Administrarea DSpaceAdministrarea DSpace
Administrarea DSpace
 
06 - Hadoop. Java API и Hadoop Streaming
06 - Hadoop. Java API и Hadoop Streaming06 - Hadoop. Java API и Hadoop Streaming
06 - Hadoop. Java API и Hadoop Streaming
 
Hadoop presentation
Hadoop presentationHadoop presentation
Hadoop presentation
 

Más de Eugene Fidelin

Testing: Do More With Less
Testing: Do More With LessTesting: Do More With Less
Testing: Do More With LessEugene Fidelin
 
Node.js BFFs - our way to the better/micro frontends
Node.js BFFs - our way to the better/micro frontendsNode.js BFFs - our way to the better/micro frontends
Node.js BFFs - our way to the better/micro frontendsEugene Fidelin
 
Housekeeping the platform at scale
Housekeeping the platform at scaleHousekeeping the platform at scale
Housekeeping the platform at scaleEugene Fidelin
 
Node.js BFFs: our way to better/micro frontends
Node.js BFFs: our way to better/micro frontendsNode.js BFFs: our way to better/micro frontends
Node.js BFFs: our way to better/micro frontendsEugene Fidelin
 
Redis persistence in practice
Redis persistence in practiceRedis persistence in practice
Redis persistence in practiceEugene Fidelin
 
Разработка и deploy Drupal сайтов с помощью Features.
Разработка и deploy Drupal сайтов с помощью Features.Разработка и deploy Drupal сайтов с помощью Features.
Разработка и deploy Drupal сайтов с помощью Features.Eugene Fidelin
 
Работа с БД в Drupal 7
Работа с БД в Drupal 7Работа с БД в Drupal 7
Работа с БД в Drupal 7Eugene Fidelin
 
Фичи н-н-нада? Или почему стоит использовать модуль Features.
Фичи н-н-нада? Или почему стоит использовать модуль Features.Фичи н-н-нада? Или почему стоит использовать модуль Features.
Фичи н-н-нада? Или почему стоит использовать модуль Features.Eugene Fidelin
 

Más de Eugene Fidelin (8)

Testing: Do More With Less
Testing: Do More With LessTesting: Do More With Less
Testing: Do More With Less
 
Node.js BFFs - our way to the better/micro frontends
Node.js BFFs - our way to the better/micro frontendsNode.js BFFs - our way to the better/micro frontends
Node.js BFFs - our way to the better/micro frontends
 
Housekeeping the platform at scale
Housekeeping the platform at scaleHousekeeping the platform at scale
Housekeeping the platform at scale
 
Node.js BFFs: our way to better/micro frontends
Node.js BFFs: our way to better/micro frontendsNode.js BFFs: our way to better/micro frontends
Node.js BFFs: our way to better/micro frontends
 
Redis persistence in practice
Redis persistence in practiceRedis persistence in practice
Redis persistence in practice
 
Разработка и deploy Drupal сайтов с помощью Features.
Разработка и deploy Drupal сайтов с помощью Features.Разработка и deploy Drupal сайтов с помощью Features.
Разработка и deploy Drupal сайтов с помощью Features.
 
Работа с БД в Drupal 7
Работа с БД в Drupal 7Работа с БД в Drupal 7
Работа с БД в Drupal 7
 
Фичи н-н-нада? Или почему стоит использовать модуль Features.
Фичи н-н-нада? Или почему стоит использовать модуль Features.Фичи н-н-нада? Или почему стоит использовать модуль Features.
Фичи н-н-нада? Или почему стоит использовать модуль Features.
 

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

  • 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