ertttert
Books-CMS.clan.su

Так что же собой представляет нода?

Один из первых вопросов, которые задают новички в разработке на Drupal — что такое нода? Нода представляет собой фрагмент контента. Drupal присваивает каждому такому фрагменту контента идентификационный номер, который называется идентификатором ноды (node ID, а в коде — $nid). Обычно у нод имеется название (заголовок), которое позволяет администратору просмотреть список нод по их названиям.

На заметку! Если вы знакомы с объектно-ориентированным программированием, можете считать тип ноды классом, а отдельные ноды — экземплярами класса. Однако код Drupal не полностью объектно-ориентирован, и на то имеются веские причины (см. http://api.drupal.org/api/HEAD/file/developer/topics/oop.html).

Существует множество различных разновидностей нод, или типов нод. Обычно используемыми типами нод являются “запись блога”, “опрос” и “форум”. Часто в качестве синонима для типа ноды применяется термин тип контента (content type), хотя тип ноды является более абстрактной концепцией, и его можно считать порожденным от базовой ноды, как показано на рис. 7.1.

Тот факт, что все типы контента являются нодами, удобен тем, что они основаны на одной и той же базовой структуре данных. Для разработчиков это означает, что для многих операций весь контент можно считать однотипным с программистской точки зрения. С нодами легко выполнять пакетные операции, и для собственноручно разработанных типов контента сразу же доступно много готовых функций. Поиск, создание, редактирование и управление контентом — эти действия поддерживаются самой средой Drupal на основе базовой структуры данных нод и ее поведения. Это однообразие видно и конечным пользователям. Формы для создания, редактирования и удаления нод выглядят и ведут себя одинаково, что приводит к однотипным и поэтому легко осваиваемым интерфейсам.

Типы нод расширяют базовую ноду, обычно за счет добавления собственных атрибутов данных. Нода типа poll (опрос) хранит параметры голосования — продолжительность опроса, активен ли опрос в данный момент и могут ли голосовать отдельные пользователи. Нода типа forum загружает для каждой ноды таксонометрический термин, чтобы знать, где она находится среди всех форумов, определенных администратором. А ноды типа blog (блог) не добавляют никаких дополнительных данных. Вместо этого они просто добавляют различные представления данных, создавая блоги для каждого пользователя и агрегаторы RSS для каждого блога. У всех нод имеются следующие атрибуты, хранимые в таблицах node и node_revisions базы данных.

  • nid. Уникальный идентификатор ноды.
  • vid. Уникальный идентификатор версии для ноды. Он необходим потому, что Drupal может хранить ревизии контента для нод. Значения vid уникальны для всех нод и ревизий нод.
  • type. Каждая нода относится к какому-то типу ноды, например, blog, story, article, image и т.д.
  • language. Язык ноды. Первоначально этот столбец пуст, что обозначает нейтральную к языку ноду.
  • title. Короткая (не более 255 символов) строка, которая используется как заголовок ноды. В типе ноды можно также объявить, что она не имеет заголовка, для чего в поле has_title таблицы node_type необходимо указать значение 0.
  • uid. Идентификатор пользователя-автора ноды. По умолчанию нода имеет одного автора.
  • status. Значение 0 означает, что нода не опубликована, т.е. контент скрыт от тех, у кого нет права “администрирование нод”. Значение 1 означает, что нода опубликована, и ее контент видим для пользователей с правами “доступ к контенту”. Отображение опубликованной ноды может быть заблокировано системой управления доступом Drupal уровня нод (см. разделы “Ограничение доступа к типу ноды с помощью hook_access()” и “Ограничение доступа к нодам” далее в главе). Опубликованная нода индексируется модулем поиска, если он активирован.
  • created. Метка времени Unix о моменте создания ноды.
  • changed. Метка времени Unix о моменте последнего изменения ноды. При использовании системы ревизий нод это же значение находится и в поле timestamp таблицы node_revisions.
  • comment. Целочисленное поле, которое описывает состояние комментариев этой ноды. Возможны три различных значения.
    • 0. Для ноды комментарии отключены. Это стандартное значение для существующих нод, когда отключен модуль комментирования. В разделе Comment settings (Параметры комментирования) в пользовательском интерфейсе формы редактирования это указывается значением Disabled (Отключено).
    • 1. Для ноды запрещено добавлять комментарии. В разделе Comment settings (Параметры комментирования) в пользовательском интерфейсе формы редактирования это указывается значением Read only (Только чтение).
    • 2. Комментарии можно просматривать и добавлять. Управление тем, кто может помещать комментарии и как комментарии выглядят, возлагается на модуль комментирования. В разделе Comment settings (Параметры комментирования) в пользовательском интерфейсе формы редактирования это указывается значением Read/Write (Чтение/запись).
  • promote. Целочисленное поле, определяющее, нужно ли выводить ноду на передней странице. Возможны два значения.
    • 1. Перемещена на переднюю страницу. Нода перемещена на стандартную переднюю страницу сайта. Нода по-прежнему будет выглядеть как обычная страница — например, http://example.com/?q=node/3. Следует отметить, что поскольку на странице ConfigurationSite information (Настройка→Информация о сайте) можно изменять переднюю страницу сайта, сам термин “передняя страница” может ввести в заблуждение. Точнее будет сказать, что страница http://example.com/?q=node будет содержать все ноды со значением 1 в поле promote. По умолчанию URL-адрес http://example.com/?q=node считается передней страницей.
    • 0. Нода не выводится на странице http://example.com/?q=node.
  • sticky. Когда Drupal выводит список нод на странице, по умолчанию сначала выводятся ноды, помеченные как sticky (“приклеенные”), а затем остальные “не приклеенные” ноды в порядке времени создания. Другими словами, ноды sticky “приклеены” к началу списка нод. Значение 1 означает sticky, а 0 — обычную ноду. В одном списке может быть несколько нод sticky.
  • tnid. Если нода является переведенной версией другой ноды, то здесь хранится nid ноды на исходном языке. Например, если нода 3 написана на английском языке, а нода 5 содержит тот же контент, но на русском, то поле tnid ноды 5 содержит значение 3.
  • translate. Значение 1 означает, что перевод необходимо обновить, а 0 — что перевод актуален.

При использовании системы ревизий нод Drupal создает ревизии контента, а также отслеживает, кто выполнил последнее изменение.

Не все является нодами

Пользователи, блоки и комментарии не являются нодами. Каждая из этих специализированных структур данных имеет собственную систему хуков в соответствии с ее назначением. Ноды (обычно) имеют заголовок и тело контента, а в структуре данных,представляющей пользователя, это не требуется. Зато пользователям нужен адрес электронной почты, пользовательское имя и надежный способ хранения паролей. Блоки — это облегченное решение для хранения небольших объемов контента, таких как меню навигации, поле поиска, список последних комментариев и т.д. Комментарии тоже не являются нодами, и поэтому они также относятся к облегченной категории. Вполне возможно, что на нескольких страницах может находиться по 100 и более комментариев, и если каждый из этих комментариев будет проходить при загрузке через систему хуков ноды, это просто катастрофически снизит производительность.

 

В прошлом было немало споров, должны ли быть пользователи или комментарии нодами, и в некоторых разработанных модулях они действительно представлены как ноды. Учтите, что возврат к этому спору аналогичен крикам “Emacs лучше!” в ответ на требование следовать программистскому соглашению.

 

Всего комментариев: 0
Имя *:
Email *:
Код *:


Бесплатный конструктор сайтов - uCoz